Watch at Ease看見世界,讀懂生活。

科技 · 實用指南

yt-dlp 下載的影片沒有聲音?重試前先核對串流與 FFmpeg

yt-dlp 下載結果無聲,不一定表示下載失敗。先保留檔案和詳細記錄,檢查檔案中實際有哪些串流,再區分是只選了視訊、跳過或未完成合併,還是播放器相容性問題,然後才考慮重新下載。

視訊串流和音訊串流分別進入診斷核對流程的原創概念圖
原創概念圖:先檢查實際存在的串流,再判斷無聲檔案是否真的下載失敗。 Watch at Ease

下載的影片沒有聲音時,最安全的第一步不是再下載一次。保留現有輸出、任何分離的音訊或視訊元件、準確命令以及詳細記錄。它們合在一起,通常能說明你是否選擇了僅視訊格式、yt-dlp 是否找到 FFmpeg 並嘗試合併,或最終檔案其實含有音訊,只是某個播放器無法解碼。

yt-dlp 文件說明,許多網站會把較高品質的影片與音訊作為獨立串流提供。格式清單會分別標記這些串流,而組合它們需要 FFmpeg。項目中的一個真實問題也顯示,即使已安裝 FFmpeg,明確指定單個格式 ID 仍可能得到僅影片檔案,因為 FFmpeg 無法憑空生成從未被選擇的音訊串流。

本指南只適用於你有權保存的媒體,不涉及繞過 DRM 或存取控制。最終目標是一份簡短的證據紀錄和一個最小下一動作,而不是承諾某個選擇器適用於所有網站。

1. 改命令前先凍結證據

把無聲輸出以及同名的元件檔案複製到工作資料夾。不要覆蓋或刪除帶有 .f137、.f140、.video、.audio、.webm 或 .m4a 等後綴的檔案。名稱會因情況而異,但遺留的一對元件可能無需再次下載媒體就能重複使用。

記錄準確的 yt-dlp 命令、頁面網址、yt-dlp 版本、作業系統以及首次測試所用播放器。條件允許時只重新執行資訊命令並啟用詳細輸出:`yt-dlp -v -F URL`。`-F` 表是只讀的,會列出可用格式列;詳細輸出的開頭還會顯示是否檢測到 FFmpeg 和 ffprobe。

不要把帳戶 Cookie、簽名媒體網址或其他憑據貼到支援貼文中。證據紀錄裡不要包含秘密資訊。

2. 檢查磁碟上已經存在的檔案

不要根據副檔名判斷容器內容,先檢查串流。若有 ffprobe,請執行 `ffprobe -hide_banner -show_streams -show_format "FILE"`。在輸出中查找至少一個 `codec_type=video` 視訊串流和一個 `codec_type=audio` 音訊串流。MP4、MKV 或 WebM 等容器可以同時包含兩者,也可以只包含其中之一,甚至兩者都沒有。

如果檔案有視訊串流但沒有音訊串流,首先懷疑的不應是播放器,應轉向格式選擇與合併證據。如果檔案確實有音訊串流,請先用另一個最新版本的播放器測試,並檢查該串流是否被禁用、編碼不受支援或映射異常,再決定是否重新下載。

如果 ffprobe 報告檔案截斷或無法讀取,請把它單獨歸入完整性分支。損壞的容器與有效但僅含視訊的串流不是同一種診斷。

3. 閱讀實際選中的格式列,不要只看格式 ID

在 `yt-dlp -F URL` 中找到 `-f` 後使用的每個 ID 所對應的行,逐項讀取音訊和視訊列。標為 video only 的行本身沒有音軌可供合併;audio only 行則無法提供畫面。本指南審閱的項目問題恰好展示了這種模式:FFmpeg 已被檢測到,但使用者明確選擇的是僅視訊 ID。

如果你選擇了一個僅視訊 ID,請用 `VIDEO_ID+AUDIO_ID` 之類的選擇器搭配一行音訊,或在確認該網址的解析結果後使用 `bv*+ba/b` 等文件化策略。不要假設從別處複製來的數字 ID 在另一網站或另一上傳內容上仍代表相同編解碼器或串流配置。

真正重試前,先執行 `yt-dlp -v -f "SELECTOR" --simulate URL` 預覽選擇結果,並保存詳細輸出中選中的格式列。模擬可以驗證選擇邏輯,不會下載媒體。

4. 把格式選擇、FFmpeg 發現與合併分開判斷

包含視訊加音訊的選擇器,在正常合併路徑中仍需要 FFmpeg。查看詳細輸出,確認 yt-dlp 是否顯示已檢測到的 FFmpeg 與 ffprobe 版本。如果提示缺少 FFmpeg,請在啟動 yt-dlp 的同一個 shell 中執行 `ffmpeg -version` 和 `ffprobe -version`。圖形終端、排程工作或服務的 PATH 可能與互動式 shell 不同。

如果 FFmpeg 安裝在 PATH 之外,請按 yt-dlp 文件使用 `--ffmpeg-location` 指向其目錄或可執行檔案。不要為了消除提示而重命名無關程式,也不要下載來源未經驗證的可執行檔案。

若找到了 FFmpeg 但沒有發生合併,請在記錄中查找兩個已下載元件串流,以及 merger 或 postprocessor 行。故意選擇一個已合併格式的命令可能不需要合併;只選擇了視訊的命令則無法靠重裝 FFmpeg 修復。

5. 再次下載前先重複使用完整元件檔案

如果工作資料夾裡已有同一項目的完整僅影片檔案和完整僅音訊檔案,請分別檢查它們。確認一個含有視訊、另一個含有音訊,並且兩者都沒有截斷。實驗前先把它們複製為穩定的新檔名。

可用手動重新封裝測試現有串流是否可用:`ffmpeg -i "VIDEO_FILE" -i "AUDIO_FILE" -map 0:v:0 -map 1:a:0 -c copy "merged-test.mkv"`。務必使用新的輸出檔名。MKV 適合作為診斷容器,因為複製串流無需轉碼且能容納多種編解碼器組合;但這不保證所有目標裝置都支援這些編解碼器。

再用 ffprobe 檢查 `merged-test.mkv`,並在兩個最新版本的播放器中播放。如果它同時包含兩種串流且能正常出聲,可能無需重新進行網路下載。如果 FFmpeg 報告輸入不相容或損壞,請保留錯誤並回到完整性分支。

6. 用症狀矩陣選擇下一動作

每個實際觀察到的檔案單獨記錄一行。“沒有音訊”應明確表示 ffprobe 未發現音訊串流;“存在音訊串流,但某個播放器無聲”必須另列一行。這樣的措辭能避免把播放器問題誤當成格式選擇問題。

如果選中的是僅視訊格式且沒有音訊元件,請修正選擇器、先模擬,再做一次受控重試。如果成對元件都存在且檢查正常,請先對複本重新封裝。如果最終檔案含有音訊但只有一個播放器無聲,請檢查播放器與編解碼器相容性。如果記錄顯示選中了兩種串流但合併失敗,應修復準確的 FFmpeg 發現或後處理器錯誤,而不是隨機更換格式。

證據 | 最可能的分支 | 最小下一動作 最終檔案只有視訊;所選行標為僅視訊 | 格式選擇 | 選擇或模擬視訊+音訊策略 仍保留完整的獨立影片與音訊檔案 | 跳過或未完成合併 | 檢查兩者,並把複本重新封裝為新檔案 最終檔案同時有兩種串流;只有一個播放器無聲 | 播放或編解碼器相容性 | 換播放器測試,並檢查音訊編碼與映射 詳細輸出的開頭找不到 FFmpeg | 工具發現 | 核對同一個 shell 的 PATH,或設定 --ffmpeg-location 檢查報告檔案截斷或資料無效 | 檔案完整性 | 保留錯誤,不要覆蓋唯一複本

7. 停止條件與可交給支援人員的記錄

在以下情況下先停止重試:所選格式列仍不清楚;來源網址已不再解析為同一項目;現有元件檔案尚未複製;或詳細記錄仍含未移除的憑據。如果你無權保存該媒體,也應停止並先取得許可。

提交支援請求時,請包括已脫敏的命令、yt-dlp 版本、作業系統、相關 `-F` 行、FFmpeg 檢測行、ffprobe 串流摘要、元件檔案名,以及第一條合併或播放錯誤。觀察與結論應分開陳述。

完成一次受控修正後,再檢查最終檔案,並用兩個最新版本的播放器播放。僅僅出現了一個檔名,並不代表下載已經通過驗證;驗收條件是一個可讀視訊串流、一個可讀音訊串流,以及在目標環境中成功播放。

常見問題

已經安裝 FFmpeg,為什麼 yt-dlp 下載的影片仍沒有聲音? 明確指定的格式 ID 可能只包含視訊。FFmpeg 可以合併已選中的串流,卻無法補上選擇器從未請求的音訊串流。請先檢查所選格式列和詳細記錄。

應該刪除分離的音訊和影片檔案嗎? 不要。先檢查並複製它們。如果兩者完整且來自同一項目,可能無需重複網路下載就能重新封裝。

MP4 副檔名能證明檔案含有音訊嗎? 不能。容器名稱無法證明其中有哪些串流,請使用 ffprobe 或其他串流檢查工具。

`bestvideo+bestaudio` 總是正確的選擇器嗎? 不是。沒有一種選擇器適用於所有情況。請查看當前格式清單,並針對特定項目和目標裝置使用 yt-dlp 文件化的選擇策略與備援規則。

複製獨立視訊串流和音訊串流後再重新封裝新檔案的原創概念圖
原創概念圖:保護原始檔,在複本上操作,並驗證新封裝的輸出。 Watch at Ease