网页视频流m3u8/ts视频下载

39次阅读

共计 879 个字符,预计需要花费 3 分钟才能阅读完成。

现在很多视频网站播放流视频,都不是采用 mp4/flv 文件直接播放,而是采用 m3u8/ts 这种方式播放。
简单说就是,网站后台把视频切片成成百上千个 xx.ts 文件,一般 10 秒一个,每个都几百 kb 很小。然后通过 xx.m3u8 播放列表把这些文件连接起来。
通过 Chrome DevTool 的 Network 栏,我们可以清楚的看到加载过程:

我们直接点击这个 playlist.m3u8 播放列表文件,在旁边的 preview 栏中查看内容,可以看到:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXTINF:5.250000,
out000.ts
#EXTINF:9.500000,
out001.ts
#EXTINF:8.375000,
out002.ts
#EXTINF:5.375000,
out003.ts
#EXTINF:9.000000,
out004.ts
………..
那我们怎么下载呢?
下载视频所有的 ts 切片文件
一般的思路是,想办法把所有的 ts 切片文件下载下来,然后合成一个完整的视频。然而,配合 xx.m3u8 播放列表文件,我们可以直接用 ffmpeg 在线下载播放列表中所有的视频,然后直接用 ffmpeg 合并为一个视频。
我们就直接执行这一句命令即可:
$ ffmpeg -i <m3u8-path> -c copy OUTPUT.mp4
$ ffmpeg -i <m3u8-path> -vcodec copy -acodec copy OUTPUT.mp4

# 例如:
ffmpeg -i https://v6.438vip.com/2018/10/17/3JAHPTdvPhQb9LrE/playlist.m3u8 -c copy OUTPUT.mp4
然后就会看到这样的下载过程:

为什么下载播放列表就能下载所有的切片文件?因为播放列表里的都是相对路径,既然我们有了播放列表的绝对路径,那么其它所有文件的绝对路径也就不难获取了。好在 ffmpeg 直接实现了这种播放列表一键下载的方式。

正文完
 0