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中字符串前面加r的作用
Jun 04 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
解决pycharm界面不能显示中文的问题
May 23 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
详解python中eval函数的作用
Oct 22 Python
pygame实现非图片按钮效果
Oct 29 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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
中国的第一台收音机
2021/03/01 无线电
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
php header Content-Type类型小结
2011/07/03 PHP
php 短链接算法收集与分析
2011/12/30 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
使用focus方法让光标默认停留在INPUT框
2014/07/29 Javascript
JSON格式化输出
2014/11/10 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
JS实现拼图游戏
2021/01/29 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
django连接oracle时setting 配置方法
2019/08/29 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
工商干部先进事迹
2014/05/14 职场文书
抵押贷款承诺书
2014/05/30 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle