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框架Flask中使用百度云存储BCS实例
Feb 08 Python
简介Django中内置的一些中间件
Jul 24 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
K-近邻算法的python实现代码分享
Dec 09 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
python读写文件write和flush的实现方式
Feb 21 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
keras分类之二分类实例(Cat and dog)
Jul 09 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
python字典与json转换的方法总结
Dec 28 Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 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
Linux中为php配置伪静态
2014/12/17 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
python的mysqldb安装步骤详解
2017/08/14 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Python八皇后问题解答过程详解
2019/07/29 Python
Django项目基础配置和基本使用过程解析
2019/11/25 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
公司门卫的岗位职责
2014/02/19 职场文书
班主任工作实习计划
2015/01/16 职场文书
机械生产实习心得体会
2016/01/22 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
Python基础之操作MySQL数据库
2021/05/06 Python