赞
踩
现在的在线视频都不是mp4的格式的了,都是一种ts的文件格式,为了防止盗版,以及流量和带宽的滥用,ts文件格式是一种视频分段的的技术,主要是需要一个索引文件列出该视频所有的分段信息,有时长和一些ts文件名的信息:
这些子分段信息在播放的时候异步加载,跳转的时候也非常方便,直接计算时长跳过某些分段的加载。
单独下载某个ts文件是不能直接播放的,那么怎么解决这个问题呢?有很多方法,我找到了最适合我们这种技术人的方案,就是使用著名的ffmpeg
,可以直接使用ffmpeg命令行访问远程索引文件下载并合并成一个MP4文件。今天就来简单介绍一下用法。
ffmpeg是一款非常好用处理音视频的软件工具包,在Win10中使用ffmpeg需要下载后再添加环境变量,下载网站:Download FFmpe
下载完成后解压,把解压后的文件移动到一个合适的位置:
添加环境变量,可以参考上上篇文章Fiddler无法抓取HTTPS链接?通过Root权限将Fiddler证书移入系统根证书目录配置Opnen SSL一样,这里只展示最后的配置完成的情况:
此时命令行看下环境变量是否正确:
成功安装
下载要找到需要下载网站的索引文件的链接,我这里在浏览器F12调试台查看到:
假如使用原生命令下载的命令是:
ffmpeg -i {m3u8链接} -c copy -bsf:a aac_adtstoasc {文件名}.mp4'
使用原生命令可以直接下载,但是在Python命令行中 Win10系统无法识别到ffmpeg的环境变量: 所以说要加上ffmpeg的具体目录,这里就简单做一个函数展示如何使用Python调用ffmpeg下载视频:
- def one_video(urls, file_name):
- save_path = 'D:\Download\ts\'+file_name
- shell_str = 'D:\MiniTool\ffmpeg\bin\ffmpeg.exe -i '+url+' -c copy -bsf:a aac_adtstoasc '+save_path+'.mp4'
- os.system(shell_str)
- urls = 'https://*****/videos/augdeduuigdrypzmvseh/index.m3u8?token=eyssddcflgjkmddsds********'
- file_name = 'test'
- one_video(urls, file_name)
效果:
总结
ffmpeg是一个非常强大的工具,但是在脚本中单线程是在太慢了,文件大文件多的话非常慢,我准备在Scrapy 中使用它。
还有就是这个m3u8索引文件是一个非常重要的文件,一般是有加密的,在我的例子中有一个token重放保护,是一次访问的,第二次访问会过期,需要在网页中解密到这个token,其他没有问题,但是实际情况中一般更复杂。
原文 使用Python脚本调用ffmpeg下载ts分段视频文件 - 掘金
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。