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实现apahce网站日志分析示例
Apr 02 Python
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
Python3.4解释器用法简单示例
Mar 22 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Python异常模块traceback用法实例分析
Oct 22 Python
浅析Python3 pip换源问题
Jan 06 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
Python容器类型公共方法总结
Aug 19 Python
python实现图片批量压缩
Apr 24 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
关于PHP中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
JavaScript学习历程和心得小结
2010/08/16 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
基于nodejs的微信JS-SDK简单应用实现
2019/05/21 NodeJs
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
Python读写Excel文件的实例
2013/11/01 Python
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
一份python入门应该看的学习资料
2018/04/11 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
python实现比较文件内容异同
2018/06/22 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
python实现扫雷游戏
2020/03/03 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
python 实现简易的记事本
2020/11/30 Python
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
新闻专业推荐信范文
2013/11/20 职场文书
高中生物教学反思
2014/02/05 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript