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处理文本文件并生成指定格式的文件
Jul 31 Python
python中私有函数调用方法解密
Apr 29 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
Python爬取豆瓣视频信息代码实例
Nov 16 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
python批量创建变量并赋值操作
Jun 03 Python
Python四款GUI图形界面库介绍
Jun 05 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
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
form自动提交实例讲解
2017/07/10 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
ext 代码生成器
2009/08/07 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
canvas知识总结
2017/01/25 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
vue实现记事本功能
2019/06/26 Javascript
vue实现跳转接口push 转场动画示例
2019/11/01 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
Python计算一个文件里字数的方法
2015/06/15 Python
Python的pycurl包用法简介
2015/11/13 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python绘制热力图heatmap
2020/03/23 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
python统计文章中单词出现次数实例
2020/02/27 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
python 进程池pool使用详解
2020/10/15 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
国培远程培训感言
2014/03/08 职场文书
小学评语大全
2014/04/22 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server