FFmpeg M3U8 完整指令集

FFmpeg 是處理 HLS 串流最強大的工具,但它的參數對新手極不友善。這頁把所有實務上會用到的指令整理成可直接複製的範例,並說明每個參數的作用與常見錯誤的解法。如果你只是想快速下載一個檔案,可先用線上工具;若要批次處理或精細控制,這頁就是你的參考書。

操作步驟

  1. 安裝 FFmpeg

    Windows:從 ffmpeg.org 下載壓縮檔,解壓後把 bin 目錄加入系統 PATH。macOS:brew install ffmpeg。Ubuntu / Debian:sudo apt install ffmpeg。安裝後在終端機執行 ffmpeg -version 確認。

  2. 執行最基本的轉檔

    一行指令就能完成:ffmpeg -i "網址.m3u8" -c copy output.mp4。這個指令會下載所有片段並合併成 MP4,不重新編碼,速度最快。

  3. 視需要加上參數

    若遇到 403 錯誤,加 -headers;若要裁剪片段,加 -ss 與 -t;若時間軸有問題,加 -fflags +genpts。詳見下方的指令速查表。

基礎指令:一行完成下載與轉檔

這是最常用的指令,可以解決 90% 的需求:

ffmpeg -i "https://example.com/stream/index.m3u8" -c copy output.mp4

各參數的意義:

參數作用
-i輸入來源,這裡是 m3u8 網址。
-c copy不重新編碼,直接複製串流。這是速度與畫質兼顧的關鍵。
output.mp4輸出檔名。副檔名決定封裝格式,也可用 .ts 或 .mkv。

為什麼快?因為片段本身已是壓縮好的影片,FFmpeg 只是在做「換容器」的動作,不需要解碼再編碼,所以幾乎不太佔 CPU。

進階:處理 403 與防盜連

若出現 HTTP error 403 Forbidden,通常是來源網站檢查了請求標頭。可加入以下參數偽裝成瀏覽器:

ffmpeg -headers "Referer: https://example.com/\r\n" '
       -user_agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
       -i "https://example.com/stream/index.m3u8" \
       -c copy output.mp4

重點說明:

  • -headers 可設定多個標頭,每行結尾必須是 \r\n(這是常見的踩雷點)。
  • -user_agent 設定 UA,有些網站會擋非瀏覽器的請求。
  • Referer 要填該網站自己的網域,不是你的網址。

重要:這些技巧僅適用於你有權存取的內容。刻意規避存取控制可能違反服務條款或法律,請自行斟酌。

指令速查表

實務上最常用的指令,可直接複製修改:

用途指令
基本下載轉 MP4ffmpeg -i "URL" -c copy out.mp4
存成 TS 格式ffmpeg -i "URL" -c copy out.ts
只下載前 60 秒ffmpeg -i "URL" -t 60 -c copy out.mp4
從第 5 分鐘開始ffmpeg -ss 00:05:00 -i "URL" -c copy out.mp4
只抽音訊成 MP3ffmpeg -i "URL" -vn -c:a libmp3lame out.mp3
指定最高畫質ffmpeg -i "URL" -map 0:v:0 -map 0:a:0 -c copy out.mp4
修正時間軸ffmpeg -fflags +genpts -i "URL" -c copy out.mp4
合併本機 TS 檔ffmpeg -i "concat:a.ts|b.ts" -c copy out.mp4
轉成 H.264(相容性高)ffmpeg -i "URL" -c:v libx264 -crf 23 out.mp4

提示:把 URL 換成你的 m3u8 網址,out.mp4 換成你要的檔名即可。Windows 的 cmd 建議把網址用雙引號包起來,避免特殊字元被誤判。

常見錯誤與排除

錯誤訊息解法
HTTP error 403加入 -headers 與 -user_agent 偽裝瀏覽器;或確認網址是否已過期。
HTTP error 404網址失效。串流網址常帶時效性 Token,回到原頁面重新取得。
Invalid data found輸入的不是有效的 m3u8。確認網址結尾是 .m3u8 而非網頁網址。
Conversion failed檢查是否為加密串流(#EXT-X-KEY)。加密串流需要金鑰,FFmpeg 無法自動解開。
輸出檔案時間軸錯亂加上 -fflags +genpts,或先存 TS 再重新封裝為 MP4。
速度快但檔案很小可能只下載到第一個片段。檢查是否為 Master Playlist,可加上 -map 0:v:0 指定。

若以上都無法解決,可先用串流檢測工具分析播放清單結構,確認片段數量、畫質與加密狀態,再對症下藥。

常見問題

FFmpeg 真的可以下載 M3U8 嗎?
可以。FFmpeg 支援 HLS 協定,只要給它 m3u8 網址,它就會自動讀取播放清單、依序下載所有片段並合併。這是最常見的 M3U8 下載方式,指令只需一行:ffmpeg -i "網址.m3u8" -c copy output.mp4。其中 -c copy 表示直接複製串流不重新編碼,因此速度極快且畫質無損。
為什麼要加 -c copy?
-c copy 的意思是「不重新編碼,直接複製」。HLS 的片段本身已经是標準的 MPEG-TS 格式,只是被封裝起來,所以可以直接打包成 MP4 而不需重新壓縮。這樣做有三個好處:速度極快(幾乎是硬碟寫入速度)、畫質完全無損、CPU 使用率極低。除非你需要轉換格式或調整畫質,否則都應該加上這個參數。
出現 403 Forbidden 怎麼辦?
403 表示伺服器拒絕你的請求,常見原因有三:一、缺少 Referer 標頭,部分網站會檢查請求來源;二、缺少 User-Agent,需偽裝成瀏覽器;三、串流網址帶有時效性 Token,已過期。可嘗試加入 -headers 參數偽裝來源,或改用本站的線上工具測試網址是否仍有效。若網址確實過期,只能回到原網站重新取得。
FFmpeg 跟線上工具哪個比較好?
各有適用場景。FFmpeg 適合:長影片、大量批次處理、需要精細控制參數、可在背景執行。線上工具適合:快速測試、不想安裝軟體、在他人電腦上操作。實務上建議兩者搭配:先用線上工具確認網址可用,再用 FFmpeg 做正式處理。需要注意的是,FFmpeg 處理加密串流時同樣需要金鑰,無法繞過 DRM 保護。
合併後的檔案時間軸有問題怎麼辦?
若時間軸錯亂(例如總長度不對、無法拖動),通常是因為 TS 片段的時間戳不連續。可加上 -fflags +genpts 讓 FFmpeg 重新產生時間戳,或改用 -bsf:a aac_adtstoasc 修正音訊。若仍有問題,可先下載成 TS 再重新封裝:先執行 ffmpeg -i "網址" -c copy temp.ts,再執行 ffmpeg -i temp.ts -c copy output.mp4。
可以用 FFmpeg 只下載某一段嗎?
可以。加上 -ss 指定起始時間、-t 指定長度即可,例如 ffmpeg -ss 00:05:00 -i "網址.m3u8" -t 00:01:00 -c copy clip.mp4 就是從第 5 分鐘開始擷取 1 分鐘。需要注意 -ss 放在 -i 前面效率較高(FFmpeg 會直接跳過前面的片段),放在後面則較精確但較慢。

不想用指令列?

用瀏覽器端工具,免安裝直接合併。

開啟線上工具