有些网站的视频由几百上千个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下载视频
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)