yt-dlp 使用心得(一)下载 YouTube 视频和音频

安装

我的使用环境是 macOS,使用 pip 安装。

pip3 install yt-dlp

之后查看版本

yt-dlp --version
2023.12.30

在我开启系统代理的情况下,我可以直接使用它,它会自动走代理。

如果把代理关掉,再来使用它,自然连接不上。会出现这样的警告。

WARNING: [youtube] Unable to download webpage: (<urllib3.connection.HTTPSConnection object at 0x10788cb10>, 'Connection to www.youtube.com timed out. (connect timeout=20.0)')

使用

获取视频的结构(就是看它有哪些分辨率,哪些音频),使用大写的 F

yt-dlp -F https://www.youtube.com/xxxxxxxxxxxxxxxxx

不加任何参数(也就是上面的命令去掉 -F),会自动下载质量最高的视频和音频,然后将它们合并起来。

yt-dlp https://www.youtube.com/xxxxxxxxxxxxxxxxx

当然我们也可以自由选择,例如我们不需要那么高分辨率的视频,我只要 720P 就够了之类的。那么可以序号相加的方式,例如

yt-dlp -f 251+614 https://www.youtube.com/xxxxxxxxxxxxxxxxx

下载音频

我个人有这样的需要,想要下载视频的音频部分。所以我了解到有这样的参数,-x 参数,可以用来提取音频。

不过我发现这样是把完整的视频下载之后,再从视频中把音频提取出来。然后再删除掉视频……

感觉不环保,我明明不需要视频部分,它下载之后只保留音频,再删掉视频……

当然也有只下载音频的方法,先用 -F 查询信息,然后选择想要的音频 id 就行,例如

yt-dlp -f 251 https://www.youtube.com/xxxxxxxxxxxxxxxxx

但是这样也比较麻烦,得先查询嘛。于是继续了解,发现可以使用 -f ba ,也就是 best audio 的首字母缩写,只下载质量最好的音频。

不过这样有时候下载的音频是 webm 格式的。

我观察了一个视频

233 mp4   audio only        │                  m3u8  │ audio only          unknown             Default
234 mp4 audio only │ m3u8 │ audio only unknown Default
599 m4a audio only 2 │ 2.50MiB 31k https │ audio only mp4a.40.5 31k 22k ultralow, m4a_dash
600 webm audio only 2 │ 2.70MiB 33k https │ audio only opus 33k 48k ultralow, webm_dash
139 m4a audio only 2 │ 3.96MiB 49k https │ audio only mp4a.40.5 49k 22k low, m4a_dash
249 webm audio only 2 │ 3.99MiB 49k https │ audio only opus 49k 48k low, webm_dash
250 webm audio only 2 │ 5.31MiB 65k https │ audio only opus 65k 48k low, webm_dash
140 m4a audio only 2 │ 10.51MiB 129k https │ audio only mp4a.40.2 129k 44k medium, m4a_dash
251 webm audio only 2 │ 9.83MiB 121k https │ audio only opus 121k 48k medium, webm_dash

只看它音频部分,其实质量最高的应该是 140 m4a audio only 2 │ 10.51MiB 129k 这个才对,不管是文件体积还是码率,它都是最大的。

但实际上使用 ba 参数,下载的是最高一项 webm 这个。难道是因为它是 48K 而上面的 m4a 是 44k 的?

那么我添加一个限制,排除掉 webm

yt-dlp -f 'bestaudio/best' --format 'bestaudio[ext!=webm]'

这样后面再加上视频链接即可。

然后我再写一个 alias,之后我只需要 「ya 视频链接」,就能下载一个视频的音频了。

alias ya="yt-dlp -f 'bestaudio/best' --format 'bestaudio[ext!=webm]'"