# yt-dlp - 萬能網路影片下載器支援 YouTube Shorts, TikTok, Instagram, X, PornHub
# 介紹
- 名稱:yt-dlp
- 描述:yt-dlp 是 command line 下載 YouTube, TikTok, Instagram, X, PornHub 影片的好幫手,可以避免使用一些有廣告下載網站
- 網站:https://github.com/yt-dlp/yt-dlp (opens new window)
支援的網站相當多可以參考這邊 (opens new window)的網站列表。
# 安裝
Mac 可以用 brew 安裝
brew install yt-dlp
# 安裝 ffmpeg
因為 yt-dlp 會透過 ffmpeg 把 YouTube 的 webm 轉成 mp4 ,所以也要安裝 ffmpeg
brew install ffmpeg
# 基本使用
只要輸入 YouTube 影片的網址就會開始下載。
yt-dlp https://www.youtube.com/watch?v=dhLQS_XCG0g
接著就會開始下載影片
[youtube] Extracting URL: https://www.youtube.com/watch?v=dhLQS_XCG0g
[youtube] dhLQS_XCG0g: Downloading webpage
[youtube] dhLQS_XCG0g: Downloading ios player API JSON
[youtube] dhLQS_XCG0g: Downloading android player API JSON
[youtube] dhLQS_XCG0g: Downloading m3u8 information
[info] dhLQS_XCG0g: Downloading 1 format(s): 22
[download] Destination: NEW: YouTube Create App [dhLQS_XCG0g].mp4
[download] 100% of 10.34MiB in 00:00:00 at 20.30MiB/s
# 下載 mp3 檔
除了下載影片之外,也可以只下載 mp3 檔,用 --extract-audio --audio-format mp3
參數
yt-dlp --extract-audio --audio-format mp3 https://www.youtube.com/watch?v=dhLQS_XCG0g
# 轉換成 mp4 檔
如果要將下載的影片轉換成 mp4 格式可以用 --recode mp4
這個參數,就會用 ffmpeg 轉成 mp4 格式(如果格式已經是 mp4 就不會再轉一次)
yt-dlp --recode mp4 https://www.youtube.com/watch?v=dhLQS_XCG0g
# 下載不同畫質與格式
預設會下載最高畫質的影片,如果要不同畫質或格式可以用 -F
這個參數看有哪些畫質與格式
yt-dlp -F https://www.youtube.com/watch?v=dhLQS_XCG0g
接著就會列出這個影片所有的畫質與格式
[youtube] Extracting URL: https://www.youtube.com/watch?v=dhLQS_XCG0g
[youtube] dhLQS_XCG0g: Downloading webpage
[youtube] dhLQS_XCG0g: Downloading ios player API JSON
[youtube] dhLQS_XCG0g: Downloading android player API JSON
[youtube] dhLQS_XCG0g: Downloading m3u8 information
[info] Available formats for dhLQS_XCG0g:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb2 mhtml 48x27 0 │ mhtml │ images storyboard
sb1 mhtml 80x45 0 │ mhtml │ images storyboard
sb0 mhtml 160x90 0 │ mhtml │ images storyboard
233 mp4 audio only │ m3u8 │ audio only unknown [en] Default
234 mp4 audio only │ m3u8 │ audio only unknown [en] Default
599 m4a audio only 2 │ 1.11MiB 31k https │ audio only mp4a.40.5 31k 22k [en] ultralow, m4a_dash
600 webm audio only 2 │ 1.24MiB 35k https │ audio only opus 35k 48k [en] ultralow, webm_dash
139 m4a audio only 2 │ 1.76MiB 49k https │ audio only mp4a.40.5 49k 22k [en] low, m4a_dash
249 webm audio only 2 │ 1.83MiB 51k https │ audio only opus 51k 48k [en] low, webm_dash
250 webm audio only 2 │ 2.42MiB 67k https │ audio only opus 67k 48k [en] low, webm_dash
140 m4a audio only 2 │ 4.67MiB 129k https │ audio only mp4a.40.2 129k 44k [en] medium, m4a_dash
251 webm audio only 2 │ 4.81MiB 134k https │ audio only opus 134k 48k [en] medium, webm_dash
17 3gp 176x144 8 1 │ 2.34MiB 65k https │ mp4v.20.3 mp4a.40.2 22k [en] 144p
597 mp4 256x144 15 │ 892.99KiB 24k https │ avc1.4d400b 24k video only 144p, mp4_dash
602 mp4 256x144 15 │ ~ 2.95MiB 80k m3u8 │ vp09.00.10.08 80k video only
598 webm 256x144 15 │ 704.70KiB 19k https │ vp9 19k video only 144p, webm_dash
394 mp4 256x144 30 │ 1.19MiB 33k https │ av01.0.00M.08 33k video only 144p, mp4_dash
269 mp4 256x144 30 │ ~ 4.04MiB 110k m3u8 │ avc1.4D400C 110k video only
160 mp4 256x144 30 │ 902.99KiB 24k https │ avc1.4D400C 24k video only 144p, mp4_dash
603 mp4 256x144 30 │ ~ 5.67MiB 154k m3u8 │ vp09.00.11.08 154k video only
278 webm 256x144 30 │ 1.77MiB 49k https │ vp09.00.11.08 49k video only 144p, webm_dash
395 mp4 426x240 30 │ 1.37MiB 38k https │ av01.0.00M.08 38k video only 240p, mp4_dash
229 mp4 426x240 30 │ ~ 5.11MiB 139k m3u8 │ avc1.4D4015 139k video only
133 mp4 426x240 30 │ 1.36MiB 38k https │ avc1.4D4015 38k video only 240p, mp4_dash
604 mp4 426x240 30 │ ~ 7.37MiB 200k m3u8 │ vp09.00.20.08 200k video only
242 webm 426x240 30 │ 1.76MiB 49k https │ vp09.00.20.08 49k video only 240p, webm_dash
396 mp4 640x360 30 │ 2.42MiB 67k https │ av01.0.01M.08 67k video only 360p, mp4_dash
230 mp4 640x360 30 │ ~ 10.41MiB 282k m3u8 │ avc1.4D401E 282k video only
134 mp4 640x360 30 │ 2.27MiB 63k https │ avc1.4D401E 63k video only 360p, mp4_dash
18 mp4 640x360 30 2 │ 12.55MiB 348k https │ avc1.42001E mp4a.40.2 44k [en] 360p
605 mp4 640x360 30 │ ~ 14.84MiB 402k m3u8 │ vp09.00.21.08 402k video only
243 webm 640x360 30 │ 2.85MiB 79k https │ vp09.00.21.08 79k video only 360p, webm_dash
397 mp4 854x480 30 │ 3.75MiB 104k https │ av01.0.04M.08 104k video only 480p, mp4_dash
231 mp4 854x480 30 │ ~ 13.14MiB 356k m3u8 │ avc1.4D401F 356k video only
135 mp4 854x480 30 │ 3.27MiB 91k https │ avc1.4D401F 91k video only 480p, mp4_dash
606 mp4 854x480 30 │ ~ 18.43MiB 500k m3u8 │ vp09.00.30.08 500k video only
244 webm 854x480 30 │ 3.85MiB 107k https │ vp09.00.30.08 107k video only 480p, webm_dash
22 mp4 1280x720 30 2 │ ≈ 10.58MiB 287k https │ avc1.64001F mp4a.40.2 44k [en] 720p
398 mp4 1280x720 30 │ 6.58MiB 183k https │ av01.0.05M.08 183k video only 720p, mp4_dash
232 mp4 1280x720 30 │ ~ 19.58MiB 531k m3u8 │ avc1.4D401F 531k video only
136 mp4 1280x720 30 │ 5.70MiB 158k https │ avc1.4D401F 158k video only 720p, mp4_dash
609 mp4 1280x720 30 │ ~ 28.05MiB 761k m3u8 │ vp09.00.31.08 761k video only
247 webm 1280x720 30 │ 5.94MiB 165k https │ vp09.00.31.08 165k video only 720p, webm_dash
399 mp4 1920x1080 30 │ 11.89MiB 330k https │ av01.0.08M.08 330k video only 1080p, mp4_dash
270 mp4 1920x1080 30 │ ~ 68.55MiB 1859k m3u8 │ avc1.640028 1859k video only
137 mp4 1920x1080 30 │ 21.80MiB 605k https │ avc1.640028 605k video only 1080p, mp4_dash
614 mp4 1920x1080 30 │ ~ 51.13MiB 1387k m3u8 │ vp09.00.40.08 1387k video only
248 webm 1920x1080 30 │ 11.59MiB 322k https │ vp09.00.40.08 322k video only 1080p, webm_dash
616 mp4 1920x1080 30 │ ~125.54MiB 3405k m3u8 │ vp09.00.40.08 3405k video only Premium
要下載不同格式只要使用 -f 'video code+audio code
就可以抓不同畫質與音質的影片,例如要抓 1280 x 720 的畫質,就選 video code 136 跟 audio code 140,這樣 yt-dlp 就會抓對應的畫質與音質的影片下來了
yt-dlp -f '136+140' https://www.youtube.com/watch?v=dhLQS_XCG0g
# 指定路徑
預設會下載到目前的資料夾,用 -P
可以指定下載的路徑,像院長為了保護 SSD 就會把路徑指定到 SD 卡 (opens new window)內,像是 -P /Volumes/SD/video
yt-dlp -P /Volumes/SD/video https://www.youtube.com/watch?v=dhLQS_XCG0g
# 疑難雜症
# 沒辦法下載 X - Twitter 影片
因為 X - Twitter 要登入才能觀看影片所以會出下面的錯誤
[twitter] Some metadata is missing without authentication. Use --cookies, --cookies-from-browser, --username and --password, --netrc-cmd, or --netrc (twitter) to provide account credentials
這可以透過 --cookies-from-browser
這個參數去讀取 browser 的 cookies ,搭配使用的瀏覽器像是 safari
, firefox
, chrome
等
yt-dlp --cookies-from-browser safari https://twitter.com/username/status/1234567890987654321
# Mac 要啟用完全取用磁碟
上面提到讀取 browser 的 cookies ,如果是使用 Mac 還要允許 iTrem 完全取用磁碟,在 系統設定
→ 隱私權與安全性
→ 完全取用磁碟
內允許 iTrem 完全取用磁碟。
# 發生 File name too long 怎麼解決
預設檔名會是影片的名稱,但是像 X - Twitter 沒有影片名稱就會抓這篇推文所有的內容來當作名稱,有時候會遇到 ERROR: unable to open for writing: [Errno 36] File name too long:
問題。
這可以透過 -o
指定檔名來處理,像是 -o "%(id)s.%(ext)s"
就會用 X - Twitter 的 ID 作為檔名就可以解決檔名太長的問題
yt-dlp --cookies-from-browser safari -o "%(id)s.%(ext)s" https://twitter.com/username/status/1234567890987654321
# 參考資料
Cannot get cookies from Safari. · Issue #7392 · yt-dlp/yt-dlp · GitHub (opens new window) Unable to download videos due to "File name too long" · Issue #2329 · yt-dlp/yt-dlp · GitHub (opens new window) How to download an MP4 from YouTube, every time | Jeff Geerling (opens new window)