本文簡介如何使用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下載其他網站影片的教學
本文我只專注在下載「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. 下載影片#
從最簡單的開始,只要加上Youtube影片網址(或者Youtube Shorts網址)就能下載影片,程式會自動選取最高畫質(可到4K),並合併影片與音訊(預設輸出為webm格式)。
例如我想下載這部影片: 周杰倫 Jay Chou【半島鐵盒 Peninsula Ironbox】Official MV,在瀏覽器複製網址。
在終端機執行以下指令,會把影片下載到目前的資料夾。
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"
- 影片下載後就可以直接看了。
3.2. 下載純音訊#
yt-dlp下載時會自動選取最高音質。yt-dlp可以將Youtube影片的音訊轉檔成mp3、flac、opus、aac、wav等格式。
- 用以下指令下載,用
--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沒有太大意義。
- 如果該部影片有包含版權歌曲的話,下載的音樂檔會自動嵌入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
- 活用我上面講過的,下載播放清單的全部影片,存檔到獨立的資料夾,並存檔成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"
,這樣每個影片開頭就會加上播放清單的編號。
- 下載結果就會像這樣,影片都存到獨立資料夾:
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
參數。
例如我想下載這部影片的中文字幕: 你的電話會傷害你嗎? 電力是否有危險性?
- 因為Youtube有時候會有自動生成的字幕,不只一國語言,建議先用參數
--list-subs
列出可下載的字幕:
yt-dlp --list-subs "https://www.youtube.com/watch?v=FfgT6zx4k3Q"
- 對照
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"
在那之後下載的影片就會包含字幕檔了
下載自動生成字幕檔的指令:
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"
- 只下載字幕檔不下載影片的指令:
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。