HLS 串流下載完整教學
很多人第一次想下載線上影片時會卡住——右鍵找不到「另存新檔」,下載到的卻是一堆看不懂的 .ts 檔案。這頁把 HLS 的結構、下載的每一步、以及合法性界線一次講清楚。
操作步驟
-
先確認你有權下載
只下載你自己上傳的內容、公開授權的素材,或已取得授權的影片。付費串流平台的內容通常受 DRM 保護,不應下載。
-
取得 m3u8 播放清單網址
在播放頁面按 F12 開啟開發者工具,切到 Network 分頁後篩選 m3u8,重新整理頁面即可看到播放清單的請求網址。
-
確認播放清單類型
若清單中出現 #EXT-X-KEY 表示已加密,需要金鑰才能解碼;出現多個 #EXT-X-STREAM-INF 則是 Master Playlist,需再選一個畫質子清單。
-
選擇下載方式
不想碰命令列就用瀏覽器端工具;片段多或需要批次處理則用 FFmpeg 指令。
-
合併並轉存
HLS 切片是 MPEG-TS 格式,合併後可用 -c copy 直接重新封裝成 MP4,不需重新編碼。
為什麼右鍵另存只會存到一個空白頁?
傳統的 MP4 影片是單一檔案,瀏覽器把它整包下載後播放,所以你可以右鍵另存。但 HLS 的設計完全不同。
HLS(HTTP Live Streaming)把影片切成大量小片段,每個片段通常只有 2 到 10 秒。播放時瀏覽器依序抓取這些片段、即時串接起來,看起來像一個連續的影片,但實際上伺服器上根本沒有「一個完整的影片檔」。
所以右鍵另存時,你存到的是那個 .m3u8 清單文字檔(或空白頁),而不是影片本身。要保存影片,就必須把清單裡列出的所有片段都抓下來再合併。
HLS 的檔案結構
下載前先看懂這個結構,可以省下很多嘗試錯誤的時間:
| 檔案 | 作用 |
|---|---|
.m3u8 | 播放清單(索引檔),用純文字列出所有片段的位置與順序 |
.ts | 實際的影片片段,MPEG-TS 格式,一個通常 2 到 10 秒 |
.m4s / .mp4 | 部分服務改用 fMP4 切片,作用同 .ts |
.key | 加密金鑰(若串流有加密),沒有它就無法解碼 |
用文字編輯器開啟 .m3u8 就能看到它的內容,裡面以 #EXTINF 標示每段長度、以 #EXT-X-KEY 標示是否加密。
下載前該確認的事
這不是法律說教,而是實際的判斷依據——搞清楚界線,才能避免下載了半天卻不能用的內容。
| 情況 | 能否下載 |
|---|---|
| 自己上傳的影片 | 可以,這是你自己的內容 |
| 開放授權素材 | 可以,依授權條款使用(例如標示出處) |
| 已取得授權的內容 | 可以,例如課程平台允許下載的教材 |
| 付費串流平台 | 不應下載。這類內容受 DRM 保護,且服務條款明文禁止 |
| 來源不明的盜版站 | 不應下載。除了法律問題,這類站台常夾帶惡意腳本 |
技術上的現實:受 DRM 保護的串流(Widevine、FairPlay、PlayReady)在設計上就無法用一般工具處理,因為解密需要授權伺服器核發的金鑰。本站工具不具備、也不會提供繞過 DRM 的功能。
路線二:用 FFmpeg 下載(適合大檔案)
若片段很多、檔案很大,或需要自動化處理,FFmpeg 會比瀏覽器工具穩定得多。這是最通用也最可靠的做法:
# 直接下載並重新封裝成 MP4(不重新編碼,速度最快)
ffmpeg -i "https://example.com/hls/index.m3u8" -c copy output.mp4如果來源需要特定的 Referer 標頭,可以加上參數:
ffmpeg -headers "Referer: https://example.com/" \
-i "https://example.com/hls/index.m3u8" -c copy output.mp4更完整的 FFmpeg 指令與參數說明,請參考 FFmpeg M3U8 完整指令集。若下載後的檔案需要與其他片段合併,可參考合併 TS 片段。
常見的下載中斷原因
| 症狀 | 可能原因與處理 |
|---|---|
| 下載到一半停止 | 多半是網路不穩或裝置休眠。改用有線網路,並確認電源設定不會在閒置時睡眠 |
| 片段數少於預期 | 可能是直播中的串流,清單會持續增長。這種情況無法一次抓完,只能等直播結束 |
| 合併後無法播放 | 檢查是否有片段下載失敗。片段缺漏會導致整個檔案損毀,需重新下載 |
| 出現 403 | 連結可能過期。回到來源頁面重新取得網址,參考403 錯誤修復 |
| 檔案沒有聲音 | 音訊可能是獨立的一條播放清單。檢測工具會顯示是否有分離的音訊軌 |