M3U8 轉 MP4 示意圖

為什麼 M3U8 需要「轉換」而不是直接另存新檔?

當你在播放一個 M3U8 串流時,瀏覽器背後實際上在不斷地請求一個又一個的 .ts 資料包,然後即時解碼播放。這些片段:

  • 格式是 MPEG-2 Transport Stream(.ts)
  • 大小通常是 2-10 秒的影片
  • 無法直接用大多數播放器播放(格式不廣泛支援)

要獲得一個可在任何設備播放的影片,需要:

  1. 下載所有 .ts 片段
  2. 將它們按順序合併
  3. 重新封裝成 .mp4 容器(可選:重新編碼轉換編碼格式)

M3U8 的兩層結構

在開始下載前,必須理解 M3U8 可能有兩層:

Master Playlist(主播放清單)

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720
720p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=854x480
480p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=700000,RESOLUTION=640x360
360p/index.m3u8

這個檔案本身不含片段,只列出不同畫質的 Media Playlist 路徑。

Media Playlist(媒體播放清單)

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:3
#EXTINF:6.006,
segment-001.ts
#EXTINF:6.006,
segment-002.ts
...
#EXT-X-ENDLIST

這才是實際包含 .ts 片段路徑的清單。

轉換方法詳解

方法一:FFmpeg -c copy(直接重封裝,最快)

ffmpeg -i "https://stream.example.com/720p/index.m3u8" \
       -c copy \
       -movflags +faststart \
       output.mp4

說明: - -c copy:不重新編碼,直接把 TS 的 H.264 + AAC 資料重新封裝到 MP4 容器 - -movflags +faststart:將 moov atom 移到檔案開頭,讓 MP4 支援邊下載邊播(串流友善) - 速度極快,幾乎無 CPU 消耗,輸出大小與原始幾乎相同

方法二:FFmpeg 重新編碼(降低大小)

ffmpeg -i "https://stream.example.com/720p/index.m3u8" \
       -c:v libx264 -crf 23 -preset medium \
       -c:a aac -b:a 128k \
       output.mp4

說明: - 適合需要壓縮原本高 bitrate 影片的情況 - CRF 值越低品質越好,檔案越大(建議 18-28) - 速度比 -c copy 慢許多,需要 CPU 重新編碼

方法三:瀏覽器端 FFmpeg.wasm(免安裝)

本站的 HLS 研究工具 在瀏覽器內執行 FFmpeg.wasm 完成合併,等同於在瀏覽器裡執行:

ffmpeg -f concat -safe 0 -i concat.txt -c copy output.mp4

適用場景: 臨時需要合併少量公開串流,不想安裝任何軟體時。

轉換工具比較

工具 安裝需求 速度 CORS 限制 適合對象
FFmpeg 命令列 需安裝 ★★★★★ 可繞過 開發者、技術用戶
VLC 需安裝 ★★★ 可繞過 一般用戶
瀏覽器工具(本站) 免安裝 ★★★ 受限制 快速測試
線上轉換網站 免安裝 ★★ 多有支援 非技術用戶

常見問題

轉換後影片沒有聲音?

通常是因為音訊軌道是 AC-3(Dolby) 格式,部分 MP4 播放器不支援。解法:

ffmpeg -i input.m3u8 -c:v copy -c:a aac output.mp4

強制將音訊轉碼為 AAC 即可解決。

影片不同步(音畫不同步)?

若出現音畫不同步,通常是 TS 片段的 PTS/DTS 時間戳有跳動。加上 -async 1 或使用 -fflags +genpts 重新生成時間戳:

ffmpeg -fflags +genpts -i input.m3u8 -c copy output.mp4

M3U8 加密了怎麼辦?

若 M3U8 內有 #EXT-X-KEY:METHOD=AES-128,URI=...,代表片段加密。FFmpeg 能自動處理 AES-128,但 DRM(如 Widevine、FairPlay)是硬體級保護,目前沒有公開工具能處理。

更多加密詳情:M3U8 加密與 DRM 完整解析

相關資源

想立即測試您的 M3U8 連結嗎?

🚀 立即測試 M3U8 線上播放器