基本下載
完全不加任何選項時,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
檔案名稱與資料夾
輸出樣板同時控制這兩者。斜線會建立目錄,所以一個樣板就能安排整個封存的結構。
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 會拒絕,而且它拒絕得有道理。