python 实现视频流下载保存MP4的方法


Posted in Python onJanuary 09, 2019

如下所示:

# -*- coding:utf-8 -*-
import sys
import os
from glob import glob
import requests
 
 
reload(sys)
sys.setdefaultencoding("utf-8")
file_path=os.getcwd()
#获取需要转换的路径
def get_user_path(argv_dir):
if os.path.isdir(argv_dir):
return argv_dir
elif os.path.isabs(argv_dir):
return argv_dir
else:
return False
#对转换的TS文件进行排序	
def get_sorted_ts(user_path):
 
ts_list = glob(os.path.join(user_path,'*.ts'))
 
boxer = []
for ts in ts_list:
 
if os.path.exists(ts):
# print(os.path.splitext(os.path.basename(ts)))
file,_ = os.path.splitext(os.path.basename(ts))
print file
boxer.append(file)
# boxer.append(int(file))
boxer.sort()
print(boxer)
return boxer
#文件合并	
def convert_m3u8(file_path,boxer,o_file_name):
print u"开始拼接视频"
 
new_path=file_path+"/"+u"视频"
try:
os.chdir(new_path)
except Exception, e:
os.mkdir(new_path)
tmp = []
for ts in boxer:
print ts
tmp.append(str(ts)+'.ts')
cmd_str = '+'.join(tmp)
exec_str = "copy /b "+cmd_str+' '+o_file_name
print("copy /b "+cmd_str+' '+o_file_name)
os.chdir(user_path)
os.system(exec_str)
print "go home path"
import shutil
shutil.move(o_file_name,new_path+"/"+o_file_name)
os.chdir(file_path)
 
 
 
 
 
reload(sys)
sys.setdefaultencoding('utf-8')
 
# 功能:爬取m3u8格式的视频
 
# 检查存储路径是否正常
def check_path(_path):
# 判断存储路径是否存在
if os.path.isdir(_path) or os.path.isabs(_path):
# 判断存储路径是否为空
if not os.listdir(_path):
return _path
 
else:
 
print u'>>>[-] 目标文件不为空,将清空目标文件,是否更换路径?'
flag = raw_input('>>>[*] Yes:1 No:2 \n>>>[+] [2]')
 
try:
if flag == '1':
_path = raw_input(unicode('>>>[+] 请输入目标文件路径。\n>>>[+] ').encode('gbk'))
check_path(_path)
else:
# 清空存储路径
os.system('rd /S /Q ' + _path)
os.system('mkdir ' + _path)
return _path
except Exception as e:
print e
exit(0)
 
else:
os.makedirs(_path)
return _path
 
# 获取ts视频的爬取位置
def get_url(_url, _path):
 
all_url = _url.split('/')
url_pre = '/'.join(all_url[:-1]) + '/'
url_next = all_url[-1]
 
os.chdir(_path)
# 获取m3u8文件
m3u8_txt = requests.get(_url, headers = {'Connection':'close'})
with open(url_next, 'wb') as m3u8_content:
m3u8_content.write(m3u8_txt.content)
# 提取ts视频的url
movies_url = []
_urls = open(url_next, 'rb')
for line in _urls.readlines():
if '.ts' in line:
movies_url.append(url_pre + line[:-1])
else:
continue
 
_urls.close()
return movies_url
 
# 爬取ts视频
def download_movie(num,movie_url, _path):
os.chdir(_path)
print u'>>>[+] 第{}个视频 downloading...'.format(num)
print '-' * 60
error_get = []
 
for _url in movie_url:
 
# ts视频的名称
movie_name = _url.split('/')[-1][-6:]
movie_name1 = _url.split('_')[-1][-6:]
# print movie_name2
if len(str(movie_name1))<=4:
movie_name1="00"+str(movie_name1)
elif len(str(movie_name1))<=5:
movie_name1="0"+str(movie_name1)
else :
movie_name1=str(movie_name1)
 
try:
# 'Connection':'close' 防止请求端口占用
# timeout=30 防止请求时间超长连接
movie = requests.get(_url, headers = {'Connection':'close'}, timeout=60)
with open(movie_name1, 'wb') as movie_content:
movie_content.writelines(movie)
print u'>>>[+] 视频片段 ' + movie_name1 + u' 下载完成'
# 捕获异常,记录失败请求
except:
error_get.append(_url)
continue
# 如果没有不成功的请求就结束
if error_get:
print u'共有%d个请求失败' % len(file_list)
print '-' * 60
download_movie(error_get, _path)
else:
print '>>>[+] Download successfully!!!'
 
url=["http://video.renrenjiang.cn/record/alilive/7684990805-1512186274.m3u8"]
 
if __name__ == '__main__':
try:
 
# _url = raw_input(unicode('>>>[+] 请输入指定的[.m3u8]目标URL。\n>>>[+] ').encode('gbk'))
# _path = raw_input(unicode('>>>[+] 请输入存储目标文件路径。\n>>>[+] ').encode('gbk'))
for i in range(len(url)):
_url=url[i]
_path=os.getcwd()+"/"+"ts"+str(i+5)
try:
os.chdir(_path)
except Exception, e:
os.mkdir(_path)
storage_path = check_path(_path)
movie_url = get_url(_url, storage_path)
download_movie(i+1,movie_url, storage_path)#下载视频
user_path =_path
o_file_name=str(i+5)+".mp4"
boxer = get_sorted_ts(user_path)
convert_m3u8(file_path,boxer,o_file_name)#拼接视频
 
except Exception as e:
print e

以上这篇python 实现视频流下载保存MP4的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python脚本实现Web漏洞扫描工具
Oct 25 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
django rest framework 数据的查找、过滤、排序的示例
Jun 25 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
Python模块future用法原理详解
Jan 20 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
Django数据模型中on_delete使用详解
Nov 30 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
Python类型转换的魔术方法详解
Dec 23 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 #Python
Python Pywavelet 小波阈值实例
Jan 09 #Python
python利用小波分析进行特征提取的实例
Jan 09 #Python
Python 实现中值滤波、均值滤波的方法
Jan 09 #Python
对Python信号处理模块signal详解
Jan 09 #Python
使用python实现语音文件的特征提取方法
Jan 09 #Python
对python中Librosa的mfcc步骤详解
Jan 09 #Python
You might like
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
JSON相关知识汇总
2015/07/03 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python实现两个文件夹的同步
2019/08/29 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
8种常用的Python工具
2020/08/05 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
sort命令的作用和用法
2013/08/25 面试题
财务管理专业自荐信范文
2013/12/24 职场文书
财务学生的职业生涯发展
2014/02/11 职场文书
纠纷协议书
2014/04/16 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
vue项目支付功能代码详解
2022/02/18 Vue.js
windows server2008 开启端口的实现方法
2022/06/25 Servers