實用工具

為什麼你下載的影片只有幾KB?M3U/M3U8 播放列表深度解析與下載指南

在網頁裡看到一個喜歡的影片,按右鍵選擇「另存為」,或者用下載器把連結拖進去,滿心歡喜地以為大功告成。結果打開一看,下載回來的檔案叫 `index.m3u8`,而且大小只有可憐的幾 KB。連按兩下開啟它,除了彈出一堆看不懂的程式碼,根本沒有影片畫面。

2026年4月21日·2 分鐘閱讀

在網頁裡看到一個喜歡的影片,按右鍵選擇「另存為」,或者用下載器把連結拖進去,滿心歡喜地以為大功告成。結果打開一看,下載回來的檔案叫 index.m3u8,而且大小只有可憐的幾 KB。連按兩下開啟它,除了彈出一堆看不懂的程式碼,根本沒有影片畫面。

是不是感覺被耍了?

其實你並沒有下錯,只是你沒搞懂 M3U/M3U8 播放列表MP4 影片檔 的本質區別。今天,我將帶你徹底拆解 M3U8 檔案的內部結構,教你如何讀懂這份「說明書」,並提供全套實戰工具和指令列程式碼,讓你把這幾 KB 的文字,完美還原成完整的高清影片。

1. 核心概念:M3U8 是「說明書」,MP4 才是「包裹」

很多人以為 .m3u8 是一種新型的影片壓縮格式,這是完全錯誤的。

  • M3U / M3U8 是一種純文字的播放列表(Playlist)。它裡面一格畫面都沒有,只寫滿了影片片段的網址。.m3u8 僅僅代表這個文字檔使用了 UTF-8 編碼。
  • MP4 則是一個二進位容器(Container)。它就像一個打包好的快遞箱,裡面實打實地裝著視訊軌和音訊軌。

打個比方:你想買一套拼圖(完整影片)。MP4 就是商家直接把拼好的成品寄給你;而 M3U8 是商家寄給你一張「拼圖零件分佈圖(說明書)」,你的播放器需要按照說明書,去全國各地的倉庫把 100 個小碎片(.ts 檔案)一個個拿回來,自己拼起來。

這就是為什麼你用瀏覽器「另存為」時,只下載到了那張幾 KB 的「說明書」!

2. 拆解說明書:看懂 M3U8 裡的程式碼

把下載下來的幾 KB .m3u8 檔案用記事本(或 VS Code)打開,你會看到類似這樣的內容:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:10.000,
segment0.ts
#EXTINF:8.542,
https://example.com/media/segment1.ts
#EXT-X-ENDLIST

不要暈,這其實非常好懂:

  • #EXTM3U:這是接頭暗號,代表這是一個標準的擴展 M3U 列表。
  • #EXTINF:10.000,:代表下面這個影片碎片(TS 檔案)的時長是 10 秒。
  • segment0.ts:這是影片碎片的相對路徑(播放器會自動把它和 m3u8 的網址拼在一起)。
  • https://example.com/media/segment1.ts:這是影片碎片的絕對 URL,直接複製到瀏覽器就能下載這個 8 秒鐘的碎片。

補充知識:IPTV 的 M3U 列表長什麼樣?

如果你玩過電視盒,肯定接觸過 IPTV 源。IPTV 的 M3U 列表和上面的 HLS 影片切片不同,它列出的是一堆電視頻道的直播位址:

#EXTINF:-1 tvg-id="123" tvg-name="CCTV-1" tvg-logo="http://logo.png" group-title="新闻",CCTV-1高清
http://example.com/cctv1_stream

這裡的 -1 代表這是一個沒有固定時長的直播流(Live Stream)。

3. 實戰:如何正確下載 M3U8 指向的完整影片?

既然 M3U8 只是說明書,我們就需要一個「代購」,幫我們把說明書裡的所有碎片買回來並拼好。下面為你提供 3 種最有效的實戰方案。

方案 A:只下載說明書本體(適合排查和備份)

如果你只想把這個幾 KB 的文字檔保存下來分析,用指令列最快:

# 使用 curl 下載 M3U8 檔案(注意 -L 跟隨重新導向)
curl -L -o playlist.m3u8 "http://example.com/path/to/playlist.m3u8"
 
# 或者使用 wget
wget -O playlist.m3u8 "http://example.com/path/to/playlist.m3u8"

方案 B:硬核極客流(使用 FFmpeg / yt-dlp)

這是最強大、最靈活的方式,能自動下載所有碎片並無損合併為 MP4。

使用 FFmpeg(開源多媒體神器):

# 一行指令:讀取 m3u8,下載切片,不重編碼直接合併封裝為 MP4
ffmpeg -i "http://example.com/playlist.m3u8" -c copy output.mp4

(注意:如果你的直播流帶了普通 AES-128 加密,只要 m3u8 裡帶有解密 key 的位址,FFmpeg 也能自動幫你解密合併。)

使用 yt-dlp(網站影片下載神器):

# 自動解析 m3u8 並下載最佳畫質,輸出為 MP4
yt-dlp -f best -o "video.mp4" "http://example.com/playlist.m3u8"

方案 C:瀏覽器擴充功能(適合普通新手)

如果你不想敲指令碼,可以在 Chrome/Edge 瀏覽器安裝以下外掛程式:

  • FetchV:在播放頁面自動嗅探 M3U8,點擊下載後,它會在背景把所有 TS 段拉取並合併成一個 MP4。
  • Live Stream Downloader(Firefox 適用):支援多片段斷點續傳和自動合併。

4. 全景工具對比表

不知道選哪個?直接看表:

工具名稱 適用平台 優點 缺點 核心指令列 / 用法
FFmpeg Win/Mac/Linux 最強大,開源免費,原生支援 HLS 甚至普通 AES 解密 無圖形介面,需敲指令 ffmpeg -i "url.m3u8" -c copy out.mp4
yt-dlp 跨平台 智慧解析成百上千個網站,一行指令搞定 遇到高級 DRM 加密無能為力 yt-dlp -f best -o video.mp4 "url"
Streamlink 跨平台 專攻直播流,邊下邊存極穩 對點播影片支援一般 streamlink "url.m3u8" best -o out.ts
curl / wget 跨平台 系統自帶,適合寫腳本抓取 只能下載說明書,不會合併影片 curl -L -o pl.m3u8 URL
FetchV 外掛程式 Chrome/Edge 傻瓜式操作,自動合併 吃瀏覽器記憶體,受限於前端環境 在瀏覽器播放頁直接點擊擴充按鈕

5. 高頻踩坑與合規排障 (FAQ)

  • 問:為什麼下載一半失敗了,或者影片破圖?
    • :網路波動導致某個 .ts 碎片遺失了。如果是用擴充功能,嘗試減少併發執行緒數;如果是用 FFmpeg,重新跑一次指令即可。
  • 問:我能把整個 IPTV 播放列表裡的電視頻道全下載下來嗎?
    • :不現實。IPTV 裡面通常是直播流(一直有新內容產生),你可以用 FFmpeg 錄製某一段時間,比如錄製 1 個小時:ffmpeg -i <直播URL> -t 3600 -c copy out.mp4
  • 問:加密的 M3U8 怎麼破?
    • :如果是標準的 AES-128(M3U8 裡明文寫了 #EXT-X-KEY 的 URL),FFmpeg 預設就能自動解密。但如果是蘋果 FairPlay 或 Widevine 這種企業級 DRM 數位版權保護,普通工具無法破解,請尊重版權。
  • 問:為什麼線上播放沒問題,丟給 FFmpeg 就報錯 403?
    • :大概率是防盜鏈機制。你需要找出瀏覽器發送的 User-AgentCookie,並在 FFmpeg 或 yt-dlp 的指令中透過 -headers 參數一併帶上。

The Bottom Line
以後再遇到幾 KB 的 .m3u8 檔案,別再抱怨連結壞了。把它當成一份藏寶圖,用文字編輯器打開看看裡面的奧秘,然後掏出 FFmpeg 這把洛陽鏟,把真正的寶藏(MP4)給挖出來吧!

作者:Baiwei

相關文章

為你精選更多 M3U8 主題文章