跳至內容
yt-dlp

yt-dlp 速查表

值得記住的 yt-dlp 指令:挑畫質、擷取 MP3、播放清單、字幕、cookies,以及真正會遇到的錯誤怎麼解。

本手冊依 yt-dlp 2026.07.21 撰寫。不同版本之間會新增或改名選項,請用 yt-dlp --version 確認你的版本。

基本下載

完全不加任何選項時,yt-dlp 會挑出它能合併的最佳組合,並用標題替檔案命名。出乎意料地常見,這就是正確的指令。

yt-dlp URL

在下載大檔案之前,先看看實際提供了哪些格式是值得的。這條指令會印出格式表,然後什麼都不下載就結束。

yt-dlp -F URL

表格最左邊一欄是格式 id,之後你可以直接指定它。兩個 id 用 + 連起來,意思是「兩個都下載並合併」。

yt-dlp -f 137+140 URL

畫質與格式選擇

寫死的格式 id 會在網站改動編碼階梯的那一刻失效。選擇器運算式才是耐用的寫法:說出你要的屬性,讓 yt-dlp 自己去找最相符的。

yt-dlp -f "bv*[height<=1080]+ba/b[height<=1080]" URL

這樣讀它:高度不超過 1080 的最佳視訊串流加上最佳音訊;如果這一對不存在,就取高度不超過 1080 的最佳單一檔案。斜線後面的這個退路,正是讓指令在只提供漸進式串流的網站上不至於失敗的關鍵。

合併兩條串流時,yt-dlp 必須選一個容器。MP4 到處都能播;MKV 什麼都能裝,一旦牽涉到字幕和章節,這一點就要緊了。

yt-dlp -f "bv*+ba" --merge-output-format mp4 URL

如果你想表達偏好而不是硬性上限,就用排序而不是過濾。這樣會優先 1080p 和 MP4,但兩者都沒有時仍然會下載點什麼。

yt-dlp -S "res:1080,ext:mp4" URL

音訊與 MP3

擷取音訊需要 ffmpeg——在全新安裝的環境裡,下面這條指令失敗的最常見原因就是它。

yt-dlp -x --audio-format mp3 URL

加上封面圖和標籤只多兩個 flag,卻能讓結果在音樂庫裡真正可用,而不是變成一堆沒有名字的檔案。

yt-dlp -x --audio-format mp3 --audio-quality 0 --embed-thumbnail --embed-metadata URL

--audio-quality 0 指的是可變位元率的最佳檔位,不是「零品質」。如果你需要固定位元率,就明確寫出來:--audio-quality 320K

當來源已經是 AAC 或 Opus 時,轉成 MP3 會重新編碼,白白損失品質。保留原格式既更快也更好。

yt-dlp -x --audio-format best URL

字幕

內嵌字幕會跟著檔案一起走;單獨的 .srt 檔案更方便編輯,也更方便交給別的工具處理。

yt-dlp --embed-subs --sub-langs en URL
yt-dlp --write-subs --sub-langs en,vi --convert-subs srt URL

機器產生的字幕是另一個開關。不加它的話,一部沒有人工字幕的影片什麼都不會產出,而且不會報錯。

yt-dlp --write-auto-subs --sub-langs en --convert-subs srt --skip-download URL

播放清單與頻道

一個 YouTube 網址常常同時屬於一部影片和一個播放清單,yt-dlp 只能猜你指的是哪個。明確說出來。

yt-dlp --no-playlist URL
yt-dlp --yes-playlist URL

對任何長任務來說,封存檔案比這裡其他任何選項都重要:它記錄了已經下載過什麼,於是重跑時會從停下的地方接著走,而不是從頭開始。

yt-dlp --yes-playlist -i \
  --download-archive archive.txt \
  -o "%(playlist_index)02d - %(title)s.%(ext)s" \
  URL

搭配 -i,一部地區受限或已刪除的影片就不會再中斷其餘兩百部。若只想取其中一段而不是全部,-I 接受區間和清單:-I 1:10-I "1,3,7-10"

片段、章節與贊助段落

你可以只下載影片的一部分而不是整部。開頭的星號表示這是時間戳記而不是章節名稱,引號是必須的——裸的 * 會被 bash 拿去比對你的檔案名稱。

yt-dlp --download-sections "*00:01:30-00:03:00" URL

SponsorBlock 使用社群提交的標記,可以把片段整段剪掉,也可以把它們保留為章節,由你自己跳過。

yt-dlp --sponsorblock-remove default URL
yt-dlp --sponsorblock-mark all --embed-chapters URL

登入、Cookie 與機器人驗證

私密內容、年齡限制內容和會員專屬內容都需要你的工作階段。直接從瀏覽器讀取是最不容易出錯的做法。

yt-dlp --cookies-from-browser chrome URL
yt-dlp --cookies-from-browser "firefox:Profile 1" URL

先把瀏覽器關掉:Chrome 和 Edge 在執行時會鎖住 cookie 資料庫,而隨之出現的錯誤訊息並不會告訴你這一點。

當一個網站開始回傳 403,或者要求你確認自己不是機器人時,把要求偽裝得像真實瀏覽器通常就能通過。

yt-dlp --impersonate chrome URL

檔案名稱與資料夾

輸出樣板同時控制這兩者。斜線會建立目錄,所以一個樣板就能安排整個封存的結構。

yt-dlp -o "%(uploader)s/%(upload_date>%Y-%m-%d)s - %(title)s.%(ext)s" URL

標題裡常常有某些檔案系統不接受的字元。--restrict-filenames 會把一切降到純 ASCII,對任何要在機器之間搬動的東西來說都是值得的。

在 Windows 的 .bat 檔案裡,每個 % 都必須寫兩遍——%%(title)s——否則批次處理直譯器會在 yt-dlp 看到之前把樣板吃掉。你下載 .bat 時,產生器已經替你處理好了。

你真的會遇到的錯誤

ffmpeg not found

凡是合併、轉換、嵌入或剪輯的操作,都需要 PATH 裡有 ffmpeg。裝好它,然後用 ffmpeg -version 確認。

Sign in to confirm you are not a bot

先試 --impersonate chrome,再試 --cookies-from-browser。兩個都不行就更新 yt-dlp——這一項驗證變動特別頻繁,修正通常幾天之內就會隨新版本發布。

Unable to extract player response

幾乎總是 yt-dlp 版本太舊。在動別的之前先更新它:yt-dlp -U,如果你是用套件管理員裝的就用套件管理員。

Requested format is not available

你的選擇器沒有比對到任何東西。執行 -F 看看有哪些格式,並且寧可用排序(-S)也不要用硬性過濾,這樣永遠留有退路。

HTTP Error 403

那個網址是為另一個工作階段或另一個地區簽發的。用新的 cookie 重跑一遍,加上 --impersonate chrome,或者試試 --geo-bypass

讓 yt-dlp 保持最新

被回報的問題裡,靠更新解決的比靠任何 flag 解決的都多。如果你裝的是獨立執行檔:

yt-dlp -U

如果是透過套件管理員裝的,就用同樣的方式更新——-U 會拒絕,而且它拒絕得有道理。

常見問題

「Sign in to confirm you are not a bot」怎麼解決?
先試 --impersonate chrome,再試 --cookies-from-browser chrome 用你的登入工作階段。都不行就更新 yt-dlp —— 這個驗證經常變,修正通常幾天內就會發布。
「Unable to extract player response」是什麼意思?
網站改了什麼,而你的 yt-dlp 早於對應的修正。先更新,再考慮改別的;這個錯誤幾乎從來不是靠某個 flag 解決的。
它顯示 ffmpeg not found。
合併、轉檔、內嵌與裁切都需要 PATH 裡有 ffmpeg。裝好後用 ffmpeg -version 確認。
yt-dlp 該多久更新一次?
任何東西開始失效時就更新,此外每隔幾週更新一次。網站一直在變,而大多數損壞都會在專案那邊很快修好。
yt-dlp 與 youtube-dl 有什麼差別?
yt-dlp 是仍在維護的分支,extractor 與功能都多得多 —— SponsorBlock、下載片段、瀏覽器偽裝、同時下載 fragment。它保留了 youtube-dl 的選項名稱,所以大多數簡單指令兩邊都能用。