快轉到主要內容

yt-dlp指令使用教學,萬能Youtube影片命令行下載工具

· 民國113年甲辰年
· ·
分類   資訊科技 電腦軟體分享
標籤   Yt-Dlp Youtube Youtube Music
目錄

本文簡介如何使用yt-dlp工具,下載Youtube影片、音樂。

如果你想要一個開源免費的Youtube下載軟體,那一定就得試試「yt-dlp」了。跨平台支援Linux/Windows/macOS/Android/iOS系統。

yt-dlp為基於youtube-dl開發的命令行程式。跟youtube-dl比起來,yt-dlp更新比較活躍,下載速度也較快。

yt-dlp雖是命令行程式,但是使用上十分簡單,不需要複雜指令。字幕、縮圖什麼的都能抓下來。

另外,yt-dlp不只可以下載Youtube影片,其支援的網站很多呢。根據官方資料所述,yt-dlp還可以下載Twitter、Facebook、Reddit、Twitch、Instagram、Niconico、Bilibili、TikTok、Pornhub等網站的影片…網站數量還在增加中,下載指令都是類似的。

本文我只專注在下載「Youtube網站」的部份。因為yt-dlp指令選項眾多,只講幾個重要的用法,不細究指令差異,讓你可以快速達成下載影片的目的。

1. 如何安裝yt-dlp
#

yt-dlp支援Linux、Windows、macOS、Android、iOS系統。建議搭配ffmpeg使用,方便轉檔。

參見yt-dlp安裝

2. 了解yt-dlp的指令格式
#

下載之前先來點命令行基礎。yt-dlp必須透過終端機打指令下載,你要餵給它「影片網址」,並加上「參數」告訴yt-dlp要怎麼處理影片。

yt-dlp格式如下:

yt-dlp    [參數1...參數2...參數3]   "影片網址1" "影片網址2" "影片網址3"

yt-dlp至少得填入一個影片網址,其餘參數可以隨意組合,以方便你控制具體下載的內容。不過你也可以不填參數,只給網址,讓yt-dlp用預設值下載影片。

yt-dlp指令完整說明文件請參閱Github

為避免困惑,下面的教學我都會附上一個範例。

3. yt-dlp使用例
#

yt-dlp指令是跨平台通用的,只要在終端機輸入yt-dlp指令就可以下載影片。

Windows用戶可以在下載資料夾按右鍵+SHIFT,開啟Windows終端機,再跑yt-dlp。這樣下載的影片都會跑到這個資料夾。

3.1. 下載影片
#

  1. 從最簡單的開始,只要加上Youtube影片網址(或者Youtube Shorts網址)就能下載影片,程式會自動選取最高畫質(可到4K),並合併影片與音訊(預設輸出為webm格式)。

  2. 例如我想下載這部影片:周杰倫 Jay Chou【半島鐵盒 Peninsula Ironbox】Official MV,在瀏覽器複製網址。

  3. 在終端機執行以下指令,會把影片下載到目前的資料夾。

yt-dlp --output "%(title)s.%(ext)s" --embed-thumbnail --add-metadata --merge-output-format mp4 "https://www.youtube.com/watch?v=duZDsG3tvoA"

這裡使用--output "%(title)s.%(ext)s"讓輸出影片檔名能跟Youtube上的標題一致。

加上--merge-output-format mp4指定轉檔為mp4格式(也可以用mkv格式)。

--embed-thumbnail加上縮圖

--add-metadata加上影片資訊

最後面的引號" "填入影片網址,加引號的用意是防止特殊符號&干擾指令。

如果你想下載特定畫質影片,比方說1080p,那就加上-f "bestvideo[height<=1080]+bestaudio[ext=m4a]"的參數,指定影片最大高度。至於其他畫質,2160為4K,1080為1080p,720為720p,以此類推。

yt-dlp --output "%(title)s.%(ext)s" -f "bestvideo[height<=1080]+bestaudio[ext=m4a]" --embed-thumbnail --add-metadata --merge-output-format mp4 "https://www.youtube.com/watch?v=duZDsG3tvoA"
  1. 影片下載後就可以直接看了。

3.2. 下載純音訊
#

yt-dlp下載時會自動選取最高音質。yt-dlp可以將Youtube影片的音訊轉檔成mp3、flac、opus、aac、wav等格式。

  1. 用以下指令下載,用--output "%(title)s.%(ext)s"維持檔名,並使用--extract-audio --audio-format mp3 --audio-quality 320K指定格式為mp3,位元率為320kbps。
yt-dlp --output "%(title)s.%(ext)s" --embed-thumbnail --add-metadata --extract-audio --audio-format mp3 --audio-quality 320K "https://www.youtube.com/watch?v=duZDsG3tvoA"

備註:Youtube音訊最多到256kbps AAC而已,轉成常見的320Kbps MP3就夠了,轉成FLAC沒有太大意義。

  1. 如果該部影片有包含版權歌曲的話,下載的音樂檔會自動嵌入Youtube提供的演出者資料。

以上的指令是把「影片」下載再轉成「音訊」,不過你也可以直接下載Youtube Music,就不會有MV的雜音,且演出者資訊更完整。

如何確認網頁是影片還是Youtube Music?看網頁影片說明欄就能分別了,Youtube Music的說明欄通常只包含演出者資訊,沒有其他連結。

3.3. 下載影片播放清單
#

跟下載影片一樣,餵給yt-dlp播放清單的網址就會開始下載。

建議使用完整播放清單網址:https://www.youtube.com/playlist?list=播放清單ID,否則yt-dlp可能只會抓到一部影片。

例如我要下載周杰倫的影片MV播放清單:周杰倫 Jay Chou | 八度空間 | Eighth Dimension

  1. 活用我上面講過的,下載播放清單的全部影片,存檔到獨立的資料夾,並存檔成mp4:
yt-dlp --output "%(playlist)s/%(title)s.%(ext)s" --embed-thumbnail --add-metadata --merge-output-format mp4 "https://www.youtube.com/playlist?list=PLgFC_SXvt6Lmkks32yM_6l-Eb6KMdgBom"

你可以把上述的命名規則改成--output "%(playlist)s/%(playlist_index)s. %(title)s.%(ext)s" ,這樣每個影片開頭就會加上播放清單的編號。

  1. 下載結果就會像這樣,影片都存到獨立資料夾:

3.4. 下載音樂專輯
#

Youtube Music的音樂專輯跟播放清單沒有兩樣,直接沿用下載播放清單的指令就可以了。

例如我要下載這張專輯:周杰倫 - 八度空間

注意這裡我是用Youtube Music的播放清單,不是MV影片播放清單。

下載播放清單音樂,存檔到獨立的資料夾,轉成純音訊mp3,並把演出者資訊嵌入到mp3檔案:

yt-dlp --output "%(playlist)s/%(title)s.%(ext)s" --embed-thumbnail --add-metadata --extract-audio --audio-format mp3 --audio-quality 320K "https://www.youtube.com/playlist?list=PLu6L9FuV-VP21jo9bHgVRNV4TQBG66mpo"

同樣,你可以把上述的命名規則改成--output "%(playlist)s/%(playlist_index)s. %(title)s.%(ext)s" ,這樣音樂檔案開頭就會加上播放清單的編號,方便音樂播放軟體排序。

註解:如果你下載的中文歌MP3標籤是英文的,可以裝Picard嘗試自動修復成中文。

3.5. 下載會員限定影片/私人影片
#

會員限定影片你一定得訂閱才能存取,yt-dlp沒辦法「破解」付費會員限定影片。

同理,私人影片也只有你自己可以存取。

為了讓yt-dlp可以存取會員限定影片的網址,請使用--cookies-from-browser參數,將瀏覽器cookie(表示你的帳號登入狀態)餵給yt-dlp。

例如讀取Google Chrome的cookie,並下載影片:

yt-dlp --output "%(title)s.%(ext)s" --cookies-from-browser chrome --embed-thumbnail --add-metadata --merge-output-format mp4 "會員限定影片網址"

手動在瀏覽器用擴充功能匯出單一cookie檔案,再餵給yt-dlp也可以:

yt-dlp --output "%(title)s.%(ext)s" --cookies cookies.txt  --embed-thumbnail --add-metadata --merge-output-format mp4 "會員限定影片網址"

3.6. 下載直播影片
#

yt-dlp可以在直播開始之後從頭下載,使用--live-from-start參數。

例如:

yt-dlp --output "%(title)s.%(ext)s" --live-from-start --embed-thumbnail --add-metadata --merge-output-format mp4 "直播網址"

如果直播是預定日期的,那麼也可以用--wait-for-video參數延遲yt-dlp抓取時間,單位為秒。

yt-dlp --output "%(title)s.%(ext)s" --wait-for-video 60 --live-from-start --embed-thumbnail --add-metadata --merge-output-format mp4 "直播網址"

3.7. 批次大量下載Youtube影片
#

如果你要下載的影片不在同一個播放清單,或者你想要自動化下載多部影片,那麼就把多個影片存成單一txt檔,每行一個網址。

例如urls.txt,內容是這樣:

https://www.youtube.com/watch?v=MKNrnSsIwf8
https://www.youtube.com/watch?v=H7hpK6cm-6k
https://www.youtube.com/watch?v=_trE3M24kQY

再使用--batch-file引數,讓yt-dlp逐一讀取urls.txt檔案的網址,下載影片。

yt-dlp --output "%(title)s.%(ext)s" --batch-file urls.txt --embed-thumbnail --add-metadata --merge-output-format mp4 "直播網址"

4. yt-dlp進階用法
#

4.1. 下載CC字幕
#

下載影片時加上--write-sub參數。

例如我想下載這部影片的中文字幕:你的電話會傷害你嗎? 電力是否有危險性?

  1. 因為Youtube有時候會有自動生成的字幕,不只一國語言,建議先用參數--list-subs列出可下載的字幕:
yt-dlp --list-subs "https://www.youtube.com/watch?v=FfgT6zx4k3Q"
  1. 對照Language的欄位,找到要的字幕代號後,下載影片,用--sub-lang選取「正體中文」的字幕,並轉成srt檔
yt-dlp --output "%(title)s.%(ext)s" --sub-lang zh-TW --write-sub --convert-subs srt --embed-thumbnail --add-metadata --merge-output-format mp4 "https://www.youtube.com/watch?v=FfgT6zx4k3Q"
  1. 在那之後下載的影片就會包含字幕檔了

  2. 下載自動生成字幕檔的指令:

yt-dlp --output "%(title)s.%(ext)s" --write-auto-subs --write-sub --convert-subs srt --embed-thumbnail --add-metadata --merge-output-format mp4 "https://www.youtube.com/watch?v=FfgT6zx4k3Q"
  1. 只下載字幕檔不下載影片的指令:
yt-dlp --output "%(title)s.%(ext)s" --sub-lang zh-TW --write-sub --convert-subs srt --skip-download "https://www.youtube.com/watch?v=FfgT6zx4k3Q"

4.2. 下載影片縮圖
#

下載影片時加上--embed-thumbnail參數。這個在下載音樂專輯的時候很好用。

注意內嵌縮圖的影片格式最好使用mp4,音樂的話則是mp3。

例如下載影片,並將縮圖內嵌到影片:

yt-dlp --embed-thumbnail --output "%(title)s.%(ext)s" --merge-output-format mp4 "https://www.youtube.com/watch?v=zzlC6ma-SYQ"

檔案管理員應該能看到檔案縮圖。

如果只想要下載縮圖檔的話,使用--write-thumbnail,並用--skip-download跳過影片下載:

yt-dlp --write-thumbnail --skip-download "https://www.youtube.com/watch?v=zzlC6ma-SYQ"

4.3. 下載影片說明欄與留言
#

注意:如果你不想下載影片,請使用--skip-download跳過下載。

加上--write-description參數,影片說明欄會另存為影片名稱.description的純文字檔案。

加上--add-metadata參數則會把影片的說明欄嵌入到影片檔的synopsis欄位,音樂則是寫入演出者資訊。

加上--write-comments參數,yt-dlp會按照留言順序,將Youtube影片留言下載,儲存成影片名稱.info.json檔。json預設沒有任何排版,請另外用文字編輯器將其格式化。

4.4. 刪除業配片段
#

結合Sponsorblock的功能,在下載影片後自動把業配片段刪除。

使用--sponsorblock-mark all,將所有的影片業配片段標記,並嵌入至下載影片的章節。

使用--sponsorblock-remove all,將所有的影片業配片段從下載的影片中刪除。

延伸閱讀
#

yt-dlp所有指令說明:yt-dlp Github

如果ytl-dlp無法下載影片,請嘗試更新軟體到最新版,或者至Github回報issue。

相關文章

【全平台】網頁/PC/手機/智慧電視 無廣告看Youtube影片的方法
分類   資訊科技 電腦軟體分享
標籤   Adblock Youtube Youtube Music Android TV
Kdenlive搭配Whisper語音轉文字,影片AI自動上字幕
分類   資訊科技 電腦軟體分享
標籤   Kdenlive Speech to Text Whisper AI
漫畫自動翻譯軟體 BallonsTranslator 使用教學,附贈修圖功能
分類   資訊科技 電腦軟體分享
標籤   Machine Translation ChatGPT Large Language Model Optical Character Recognition

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。