跳至主要内容

YT-DLP 指令

YT-DLP 是一個開源的命令列工具,可以從 YouTube 等平台下載影片與音訊。

資訊

如需存取私人播放清單需登入才能取得的畫質,可以用這個「Chrome 擴充套件」在已登入的狀態下匯出 Cookie 檔案,並在指令中加上:

--cookies "cookies.txt"

1. 先用 -F 查看可用格式

下載前先用 -F 列出所有可用格式,確認解析度、編碼與碼率後再指定要下載的格式。

yt-dlp -F "{影片網址}"

同一解析度常有 H.264(avc)、HEVC(hev)、AV1(av01)三種編碼,AV1 檔案最小、H.264 相容性最好。挑好格式 ID 後,用 -f "影片ID+音訊ID" 指定下載,比 bestvideo 自動挑更精準。

2. 下載 mp4 檔案

yt-dlp ^
-f "bestvideo[height<=1080]+bestaudio" ^
--merge-output-format mp4 ^
--embed-thumbnail ^
--add-metadata ^
"{播放清單/影片網址}"
參數用途
bestvideo[height<=1080]最佳影片檔案,解析度在 1080p 內,自行調整
bestaudio最佳音訊檔案,不限格式,讓 yt-dlp 挑最高碼率
--merge-output-format強制輸出為 mp4 格式
--embed-thumbnail嵌入影片縮圖
--add-metadata將影片標題、作者等資訊嵌入檔案 metadata 中

3. 下載 mp3 檔案

yt-dlp ^
--extract-audio ^
--audio-format mp3 ^
--embed-thumbnail ^
--add-metadata ^
"{播放清單/影片網址}"
參數用途
--extract-audio只取出音訊檔案
--audio-format轉換為 mp3 格式
--embed-thumbnail嵌入影片縮圖
--add-metadata將影片標題、作者等資訊嵌入檔案 metadata 中

4. 備份播放清單(輸出為 txt 檔案)

yt-dlp ^
--flat-playlist ^
--print-to-file "%(playlist_index)03d | %(title)s | %(url)s" "%(playlist_title)s.txt" ^
"{播放清單網址}"
參數用途
--flat-playlist取得整個播放清單
--print-to-file輸出為文字檔

5. 下載播放清單縮圖

yt-dlp ^
--skip-download ^
--write-thumbnail ^
--convert-thumbnails jpg ^
-o "%(title)s.%(ext)s" ^
"{播放清單/影片網址}"
參數用途
--skip-download不下載影片本體,只抓縮圖
--write-thumbnail輸出縮圖檔案
--convert-thumbnails jpg將縮圖轉為 jpg 格式(預設可能是 webp)
-o "%(title)s.%(ext)s"以影片標題作為輸出檔名

接著用 ImageMagick 把資料夾內所有 jpg 統一縮放到 480x270:

magick mogrify -resize 480x270! *.jpg
  • mogrify:原地覆寫檔案,不會另存新檔(如果要保留原圖請改用 convert)。
  • 480x270!:尾端的 ! 表示強制拉伸到指定尺寸,忽略原始比例。

疑難排解:下載完卻損壞、合併失敗

來源限速或連線不穩時(例如 Bilibili),yt-dlp 內建下載器容易中途留下資料破洞,檔案下完卻損壞,ffmpeg 合併時報 Invalid NAL unitFailed to parse temporal unit。改用 aria2c 當下載器可解決,它會分段下載並自動重試補齊。

先安裝:winget install aria2.aria2,再加上參數:

yt-dlp ^
--downloader aria2c ^
--downloader-args "aria2c:-x4 -s4 --max-tries=0 --retry-wait=3" ^
-k ^
--merge-output-format mkv ^
"{影片網址}"
參數用途
--downloader aria2c改用 aria2c 下載,分段重試不留破洞
-x4 -s44 條連線分 4 段下載(限速來源開太多沒用)
--max-tries=0每段無限重試直到成功
-k合併失敗時保留原始影片、音訊檔,避免整包蒸發
--merge-output-format mkvmkv 合併容錯高,不易發生 mp4 的封裝錯誤

驗證下載是否完整:ffmpeg -v error -i 檔案 -f null -,沒有輸出即代表無損壞。