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如何生成随机密码
Apr 20 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
python利用高阶函数实现剪枝函数
Mar 20 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
Python基础之条件控制操作示例【if语句】
Mar 23 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
python 默认参数相关知识详解
Sep 18 Python
python3 logging日志封装实例
Apr 08 Python
Keras实现支持masking的Flatten层代码
Jun 16 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 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
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Vue渲染函数详解
2017/09/15 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
python基础知识小结之集合
2015/11/25 Python
简单易懂的python环境安装教程
2017/07/13 Python
python实现PID算法及测试的例子
2019/08/08 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
如何让python的运行速度得到提升
2020/07/08 Python
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
战略合作意向书
2014/07/29 职场文书
四风问题对照检查材料
2014/09/22 职场文书
房屋出售授权委托书
2014/10/12 职场文书
地球一小时活动总结
2015/02/27 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书