python与ffmepg结合进行ts文件的下载和合并,密钥文件解决方法

python与ffmepg结合进行ts文件的下载和合并,密钥文件解决方法,第1张

有些网站的视频由几百上千个ts文件(即切片文件)组成,即使成功下载了这些ts文件,需要对它们按顺序地转码合并,输出为mp4等文件格式,才能正常播放。


本文基于前人的基础上探索了一个相对方便和高效的方法,特此记录一下。


简单来说,就是先利用python将这些ts文件下载到本地,然后用预先安装的ffmpeg包对ts文件进行合并输出为一个mp4文件,其中的难点在于在合并时如何解决密钥文件的问题。


以开课吧的某个视频为例:

​​​​​​https://learn.kaikeba.com/video/669486?is_auto_auth=1

打开网页,按下F12,并按下F5,输入关键字“m3u8”,可以获取该视频地址对应的m3u8文件和文件地址。


将m3u8文件下载到本地,并将原文件中的所有ts文件地址更改为

利用ffmpeg,可以直接通过以下命令获取mp4文件:

ffmpeg -i https://v.baoshiyun.com/resource/media-863764093534208/lud/b5c45e654e5f48dca41be9c1644f9273.m3u8?MtsHlsUriToken=ca27617a79174646b13c65ab51da23693617756e26504f238ed0f715142333d7 video.mp4

上条命令的结构是这样的:ffmpeg -i 【m3u8文件的地址】 video.mp4

这种方法虽然比较简单,但是速度真的很慢,不适合用于下载比较大的视频文件。


可先用python自动下载这些数量较多的ts文件,然后在本地进行合并转码。


首先需要手动将上文提到的m3u8文件下载到本地,通过该文件可知ts文件的总数,以及每个ts文件名。


m3u8文件前缀+ts文件名,即为每个ts文件的完整地址,有了这个地址就可以用python的wget包来自动循环下载所有的ts文件了。



path = r'C:\Users\Administrator\Desktop\视频\tsfiles'
for i in range(1, 823):
    idx = str(i)
    nz = 5 - len(idx)
    idx = '0' * nz + idx
    # print(idx)
    url = 'https://v.baoshiyun.com/resource/media-863764093534208/lud/b5c45e654e5f48dca41be9c1644f9273-{}.ts'.format(idx)
    wget.download(url, path + '\' + '{}.ts'.format(idx))
    

将ts文件下载到本地后,下一步是修改m3u8文件。


总共要修改2个地方,第一个是为每个ts文件加上本地完整路径,第二个是修改key。


原m3u8文件如下:

第一步,为每个ts文件加上本地完整路径:

 第二步,修改key。


先在浏览器中打开原m3u8文件中关于key的URI地址,获得key值“993851207847a915”。


 

 然后在本地新建一个记事本文件,将这个key值输入到文件中,更改文件名为key.key,保存。


这时我们就有了包含实际key值的key格式本地文件。


继续修改m3u8文件,将key文件的URI地址更改为本地路径。


 需要强调的是,本地路径的分隔符不是平常使用的“\”,而是“/”。


m3u8文件修改完毕,再进行最后一步啦。


利用ffmpeg将本地文件合并转码。


ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy video.mp4

 index.m3u8为本地的m3u8文件,video.mp4为输出的mp4文件。


Done~~

本文参考的链接如下:

利用ffmepg下载在线视频文件_科研咸鱼Pin的博客-CSDN博客_ffmpeg下载视频​​​​​​​

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/570153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存