Youtube 是世界上最大的影音網站,應該很多人天天都在上面看影片吧,要是看到喜歡的影片想要下載,該怎麼做呢?如果是我,我平常都用 youtube-dl 來下載,我認為這是最優雅,最簡便,最快速的方式了,而且是開源軟體,還支援多種影音平台,可以說是下載影片的瑞士刀。
2020/02/08:增加進階指令教學
安裝
先去官網下載符合自己平台的檔案,Windows 有已經編譯好的可執行檔,Linux 可以直接將執行檔放入 /usr/local/bin/
,或著用 pip 套件管理員安裝。
Windows 使用者下載完 youtube-dl 後請在 youtube-dl.exe
所在資料夾開啟 CMD 進行操作,至於怎麼在所在資料夾開啟 CMD 請參考之前的教學;亦或是把放置 youtube-dl.exe
的目錄加入環境變數,這樣就可以直接在 CMD 中調用。
類 UNIX 作業系統皆可用下面指令安裝。
1
2
|
$ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
$ sudo chmod a+rx /usr/local/bin/youtube-dl
|
Arch Linux 建議用 pacman 安裝。
1
|
$ sudo pacman -S youtube-dl
|
也能使用 pip 安裝。
1
|
$ sudo pip install --upgrade youtube_dl
|
下載影片
以下載一部 Youtube 影片為例,先在 Youtube 找到你想下載的影片,然後複製網址。
1
|
$ youtube-dl https://www.youtube.com/watch?v=ZzvYGRH9H1M
|
這樣雖然能直接下載影片,但是不能選擇自己想要的品質,加上參數 -F
會列出提供哪些畫質下載。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
youtube-dl -F https://www.youtube.com/watch?v=ZzvYGRH9H1M
[youtube] ZzvYGRH9H1M: Downloading webpage
[youtube] ZzvYGRH9H1M: Downloading video info webpage
[info] Available formats for ZzvYGRH9H1M:
format code extension resolution note
249 webm audio only DASH audio 54k , 1fps, opus @ 50k, 2.80MiB
250 webm audio only DASH audio 76k , 1fps, opus @ 70k, 3.59MiB
140 m4a audio only DASH audio 129k , m4a_dash container, mp4a.40.2@128k, 7.20MiB
171 webm audio only DASH audio 132k , 1fps, vorbis@128k, 6.25MiB
251 webm audio only DASH audio 184k , 1fps, opus @160k, 8.45MiB
160 mp4 256x144 144p 109k , avc1.4d400c, 15fps, video only, 5.92MiB
134 mp4 640x360 360p 248k , avc1.4d401e, 30fps, video only, 11.42MiB
133 mp4 426x240 240p 249k , avc1.4d4015, 30fps, video only, 13.60MiB
135 mp4 854x480 480p 518k , avc1.4d401f, 30fps, video only, 20.28MiB
136 mp4 1280x720 720p 887k , avc1.4d401f, 30fps, video only, 33.83MiB
137 mp4 1920x1080 1080p 1639k , avc1.640028, 30fps, video only, 62.66MiB
17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k, 4.59MiB
36 3gp 320x180 small , mp4v.20.3, mp4a.40.2, 12.73MiB
18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k, 19.78MiB (best)
|
要注意有些格式是只有純影片或純聲音的,像是 1080p 的通常只有純影片,選好你要下載的格式,把 format code 填入參數 -f
裡。
1
|
$ youtube-dl -f 137 https://www.youtube.com/watch?v=ZzvYGRH9H1M
|
品質
youtube-dl 預設會下載最高品質的影片,也可以指定畫質。
1
2
3
4
5
6
|
# 下載 MP4 格式中最高畫質,或是其他格式中的最高畫質
$ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
# 指定最佳畫質,但不要高於 480p
$ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]'
# 下載檔案大小小於 50M 的最高畫質影片
$ youtube-dl -f 'best[filesize<50M]'
|
影音合併
YouTube 1080p 以上畫質的影片視訊和音源是分開的下載的,傳統作法是先分別下載影片和聲音檔,再用其他工具合併,而 youtube-dl 可以整合 ffmpeg/avconv,下載完自動合併影音,非常方便。
在 -f
參數中同時寫入影片和音源格式代號就會自動合併,預設輸出格式為 mkv
,可以用 --merge-output-format
參數來指定輸出影片封裝格式,可選值有:mkv
, mp4
, ogg
, webm
, flv
。
注意:當合併輸出格式為 mp4
時,音訊如果是 webm
格式合併時會出現錯誤,要指定為 m4a
或其他格式才能自動合併成功。
如果你要下載最高畫質的影片,並輸出為 MP4 影片可以這樣寫:
1
|
$ youtube-dl -f 'bestvideo+bestaudio[ext=m4a]' --merge-output-format mp4 https://www.youtube.com/watch?v=y5wkebBCwAE
|
一般人到這步就可以結束了,但如果你是對品質有強烈追求的偏執狂,請繼續看下去。
方法一:分別下載影片和音源,再合併成 MP4 (推薦)
如果你用 -F
去看會發現 m4a
的音訊通常不是最高音質,可以先用 -f 'bestvideo+bestaudio'
,並指定合併成 MP4,先將最高品質的影片和音源下載下來,但因為 webm
音源無法合併成 MP4,會保留影片和音源結束工作。
1
|
$ youtube-dl -f 'bestvideo+bestaudio' --merge-output-format mp4 https://www.youtube.com/watch?v=y5wkebBCwAE
|
下載下來有兩個 webm
格式的檔案,一個只有純影片,另一個只有純聲音,再手動用 ffmpeg 去合併。
1
|
$ ffmpeg -i audio.webm -i video.webm -acodec copy -vcodec copy -strict -2 output.mp4
|
由於 opus 編碼的音源在 MP4 格式中是實驗特性,所以要加上 -strict -2
才能合併成功,但有些老舊的播放器可能會因為不支援 opus 編碼而無法正常播放。
opus in MP4 support is experimental, add ‘-strict -2’ if you want to use it.
方法二:先合併成 webm
,再轉檔成 mp4
youtube-dl 如果在 -f
參數中寫 'bestvideo+bestaudio'
會在下載完成後自動合併成 webm
影片檔,這時再用 ffmpeg 轉換成 mp4 格式。
1
|
$ ffmpeg -i input.webm output.mp4
|
雖然方便一點,但轉換的時間要很久,所以比較推薦使用方法一。
字幕下載
有 CC 字幕的影片 youtube-dl 也能下載。
參數:
--list-subs
:列出可下載的所有字幕
--write-sub
:儲存字幕
--embed-sub
:將字幕合併至影片中,需搭配 --write-sub
參數使用
--all-subs
:下載所有字幕
--sub-format
:下載的字幕格式,如果原影片沒有指定的字幕格式會去下載其他格式的字幕
--sub-lang
:選擇要下載的字幕語言,用逗號分隔,例如:zh_TW,ja
--convert-subs
:將下載的字幕轉換成其他格式,目前支援 srt|ass|vtt|lrc
例如我想下載下面這部多語言字幕的影片。
先用 --list-subs
列出所有可下載字幕,注意上面是 YouTube 自動產生的字幕,下面是人工翻譯上傳的字幕。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
$ youtube-dl --list-subs https://www.youtube.com/watch\?v\=y5wkebBCwAE
[youtube] y5wkebBCwAE: Downloading webpage
[youtube] y5wkebBCwAE: Downloading video info webpage
[youtube] y5wkebBCwAE: Looking for automatic captions
Available automatic captions for y5wkebBCwAE:
Language formats
af vtt, ttml, srv3, srv2, srv1
sq vtt, ttml, srv3, srv2, srv1
am vtt, ttml, srv3, srv2, srv1
...
yi vtt, ttml, srv3, srv2, srv1
yo vtt, ttml, srv3, srv2, srv1
zu vtt, ttml, srv3, srv2, srv1
Available subtitles for y5wkebBCwAE:
Language formats
ca vtt, ttml, srv3, srv2, srv1
zh-CN vtt, ttml, srv3, srv2, srv1
zh-TW vtt, ttml, srv3, srv2, srv1
en vtt, ttml, srv3, srv2, srv1
fr vtt, ttml, srv3, srv2, srv1
id vtt, ttml, srv3, srv2, srv1
ja vtt, ttml, srv3, srv2, srv1
ko vtt, ttml, srv3, srv2, srv1
pt vtt, ttml, srv3, srv2, srv1
pt-BR vtt, ttml, srv3, srv2, srv1
th vtt, ttml, srv3, srv2, srv1
|
我想下載正體中文和日文的字幕,並合併到影片中可以這樣寫:
1
|
$ youtube-dl --sub-lang zh-TW,ja --write-sub --embed-subs https://www.youtube.com/watch?v=y5wkebBCwAE
|
預設會合併成一個 mkv 影片,字幕軌有之前嵌入的中文、日文字幕。
如果你想將字幕存成 srt 格式,加上 --convert-subs srt
參數。
1
|
$ youtube-dl --sub-lang zh-TW,ja --write-sub --convert-subs srt https://www.youtube.com/watch?v=y5wkebBCwAE
|
下載音樂
用 -x
參數提取音源,--audio-format
指定輸出格式,可選值:best
, aac
, flac
, mp3
, m4a
, opus
, vorbis
和 wav
,預設值為 best
,要配合參數 -x
才有用。
1
|
$ youtube-dl -x --audio-format mp3 https://www.youtube.com/watch?v=WI-EMzrUSP4
|
YouTube 最高音質通常為 opus
格式,如果選擇 mp3
位元率可能會被有損壓縮,如果想保持原來的位元率輸出格式請選 opus
。
其他參數:
--embed-thumbnail
:嵌入影片縮圖(僅限 mp3
和 m4a/mp4
)
--add-metadata
:加入影片資訊
假如我想下載這張落日飛車的香草渡假村。
使用 --embed-thumbnail
和 --add-metadata
就會把資訊寫在 ID3 標籤裡。
1
|
$ youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata https://www.youtube.com/watch?v=gex2JGKDXIo
|
下面是用 mpv 播放器播放 Opus 音檔(最佳音質)顯示的資訊。
這是 MP3 格式的位元率,其實兩者相去不遠,不必太在意。
下載播放清單
下載整份清單
跟下載影片一樣,只是把網址換成播放清單。
指定下載範圍
--playlist-start
:播放清單起始位置
--playlist-end
:播放清單結束位置
--playlist-items
:指定範圍,逗號分隔,例如:1,2,5,8
, 1-3,7,10-13
假設我要下載這個播放清單的 1~3 首歌,並存成 MP3 音樂檔。
指令可以這樣下:
1
|
$ youtube-dl -x --audio-format mp3 --embed-thumbnail --add-metadata --playlist-items 1-3 https://www.youtube.com/watch?v=qRNTg7bk5LU&list=RDqRNTg7bk5LU
|
這種指令在下載專輯的時候很有用。
Proxy 設定
如果你身在無法使用 Youtube 的國家要使用 youtube-dl,可以用 --proxy
參數進行代理。
youtube-dl 內建的 --proxy
參數,支持 Socks5 和 HTTP 代理伺服器,通常現代代理軟體(SS、SSR 等)預設的本機連接埠都是 socks5://127.0.0.1:1080
。
更多參數可以去看 youtube-dl 官方的 README。
1
|
$ youtube-dl --proxy socks5://127.0.0.1:1080 https://www.youtube.com/watch?v=ZzvYGRH9H1M
|
其他影音平台
youtube-dl 除了可以下載 Youtube 影片,也能下載其他的影音平台,詳細支援網站詳見官方文檔,裡面列出了非常多的網站,你認識的影音平台應該都有列在上面,這裡示範如何下載 bilibili 的影片。
操作流程跟前面 Youtube 一樣,先到 B 站找尋你想要下載的影片,把網址複製。
先看提供哪些格式下載。
1
2
3
4
5
6
7
8
|
$ youtube-dl -F https://www.bilibili.com/video/av30534279
[BiliBili] 30534279: Downloading webpage
[BiliBili] 30534279: Downloading video info page
[info] Available formats for 30534279:
format code extension resolution note
0 flv unknown
1 flv unknown
2 flv unknown 164.17MiB (best)
|
B 站提供的格式相較於 Youtube 少很多,應該也只能選 2
了。
1
2
3
4
5
|
$ youtube-dl -f 2 https://www.bilibili.com/video/av30534279
[BiliBili] 30534279: Downloading webpage
[BiliBili] 30534279: Downloading video info page
[download] Destination: 【FGO动画】无限流星制-Unlimited Stella Works--30534279.flv
[download] 81.8% of 164.17MiB at 622.88KiB/s ETA 00:49
|
youtube-dl 真的是下載影片的神器,自從用了 youtube-dl 就再也不需要其他影片下載軟體了。
Reference