如今不少視頻網站播放流視頻,都不是採用mp4/flv文件直接播放,而是採用m3u8/ts
這種方式播放。網站
簡單說就是,網站後臺把視頻切片成成百上千個xx.ts
文件,通常10秒一個,每一個都幾百kb很小。而後經過xx.m3u8
播放列表把這些文件鏈接起來。spa
經過Chrome DevTool的Network欄,咱們能夠清楚的看到加載過程:code
咱們直接點擊這個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 ...........
那咱們怎麼下載呢?blog
通常的思路是,想辦法把全部的ts切片文件下載下來,而後合成一個完整的視頻。
然而,配合xx.m3u8
播放列表文件,咱們能夠直接用ffmpeg
在線下載播放列表中全部的視頻,而後直接用ffmpeg合併爲一個視頻。ip
咱們就直接執行這一句命令便可:rem
$ 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
而後就會看到這樣的下載過程:it
爲何下載播放列表就能下載全部的切片文件?
由於播放列表裏的都是相對路徑,既然咱們有了播放列表的絕對路徑,那麼其它全部文件的絕對路徑也就不難獲取了。
好在ffmpeg直接實現了這種播放列表一鍵下載的方式。class