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

有些网站的视频由几百上千个ts文件(即切片文件)组成,即使成功下载了这些ts文件,需要对它们按顺序地转码合并,输出为mp4等文件格式,才能正常播放。本文基于前人的基础上探索了一个相对方便和高效的方法,特此记录一下。简单来说,就是先利用python将这些ts文件下载到本地,然后用预先安装的ffmpeg包对ts文件进行合并输出为一个mp4文件,其中的难点在于在合并时如何解决密钥文件的问题。

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

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

打开网页,按下F12,并按下F5,输入关键字“m3u8”,可以获取该视频地址对应的m3u8文件和文件地址。在浏览器打开该地址,将m3u8文件下载到本地,可用文本编辑器打开。

方法一:用ffmpeg命令直接下载

打开cmd窗口,可以通过以下命令获取mp4文件:

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

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

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

方法二:下载多个切片ts文件到本地,再合并为一个mp4文件

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

首先需要手动将上文提到的m3u8文件下载到本地,通过该文件可知ts文件的总数,以及每个ts文件名。m3u8文件前缀+ts文件名,即为每个ts文件的完整地址,有了这个地址就可以用python的wget包来自动循环下载所有的ts文件了。

import wget

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。目的是指明合并的文件位置和所需的解码key。

原m3u8文件如下:

第一步,为每个ts文件加上本地完整路径(下载好的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下载视频

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值