VGrab 部落格 回報
安裝到 Chrome

發佈於

怎麼把 m3u8 切片流的影片下下來

網頁裡的影片常常不是一個檔案,而是幾百上千段幾秒鐘的小片段。這篇說清楚它是怎麼回事,以及把它拼回一個能播的檔案要點幾下。

← 回到部落格清單

為什麼影片右鍵另存不下來

很多網站不把一部片子存成一個檔案。它們把片子切成幾秒鐘一段的小片段, 再寫一份清單,告訴播放器先放哪段、後放哪段。清單的副檔名通常是 .m3u8(HLS) 或者 .mpd(DASH)。你在頁面上右鍵,能看到的只是播放器這個殼, 底下那幾百上千段是播一段取一段的,右鍵另存自然拿不到。

這麼做是為了讓影片能隨網速自動換畫質、能從中間點開就放。對網站是好事, 對想把影片存下來的人就多了一道手續:得先拿到清單,照著清單把每一段取回來,再按順序拼成一個檔案。

VGrab 是怎麼做的

裝上擴充功能之後不用開任何開關。你照常開啟影片頁面、點播放,擴充功能在後台看著這一頁發出去的請求, 認出裡面的清單和影片檔案。圖示右下角會顯示這一頁發現了幾條。

  1. 點一下擴充功能圖示。這一頁裡能下的都列出來了,最像正片的排在最前面 —— 廣告片段、迴圈的背景影片、預告片這些會被排到後面去。
  2. 畫質已經挑好了。預設 480P;這部片子沒有 480P 這一檔,就挑最接近的那一檔, 彈出視窗上寫的是實際用的那一檔,不會讓你以為下到的是 480P。想換,點一下就能換。
  3. 點儲存。剩下的事擴充功能自己做:把清單裡的每一段取回來,按順序拼成一個檔案,存進下載資料夾。

拼出來的是什麼檔案

分片流下完拼成一個 .mp4。這裡只換外殼、不重新編碼 —— 畫面和聲音的資料原樣搬過去,所以又快又不掉畫質,也不需要裝 ffmpeg 之類的東西。 極少數換不成外殼的會存成 .ts,彈出視窗裡會寫清楚為什麼。

檔案存在瀏覽器的下載資料夾裡,按影片網站的網域分子資料夾,檔名用影片標題。 電腦、手機上的播放器都能直接播,能拖進度條。

幾種會讓人卡住的情況

片段是加密的。清單裡帶 EXT-X-KEY 的 AES-128 加密流照樣能下 —— 金鑰就放在清單指的那個網址上,取到金鑰解開它本來就是正常播放的一部分。

畫面和聲音是兩條軌。有些網站(尤其是 DASH 那一類)把畫面和聲音分開傳。 兩條軌都找得到時,擴充功能會把它們合成一個檔案;只拿到一條會如實說,不會默默給你一個沒聲音的檔案。

網站限速。同一個網址取得太密,網站會開始拒絕。這時擴充功能會自己放慢、只留一路慢慢下, 而不是一直重試把網站給的額度耗光。真的等了十分鐘一點進展都沒有,才會停下來告訴你, 過一會兒點「繼續」,從停下的那一段接上。

網斷了。下好的片段都在本機存著。斷在 87%,接著下就是從 87% 開始,不會從頭再來。