快轉到主要內容

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

分類   資訊科技 資訊科技應用
標籤   Yt-Dlp Youtube Youtube Music
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

本文簡介如何使用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
直播小工具VDO Ninja使用方式,免裝軟體將手機鏡頭分享給電腦
分類   資訊科技 資訊科技應用
標籤   OBS Studio WebRTC
萬能手機影片下載器 ~ Seal APP,支援Youtube、Facebook、Twitter、Instagram,開源yt-dlp前端
分類   智慧型手機 手機APP分享
標籤   Yt-Dlp Android Youtube Youtube Music

留言板

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

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

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