1. 安装

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

1pip3 install yt-dlp

之后查看版本

1yt-dlp --version
22024.08.06

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

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

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

2. 使用

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

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

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

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

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

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

3. 下载音频

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

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

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

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

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

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

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

我观察了一个视频

1233 mp4   audio only        │                  m3u8  │ audio only          unknown             Default
2234 mp4   audio only        │                  m3u8  │ audio only          unknown             Default
3599 m4a   audio only      2 │    2.50MiB   31k https │ audio only          mp4a.40.5   31k 22k ultralow, m4a_dash
4600 webm  audio only      2 │    2.70MiB   33k https │ audio only          opus        33k 48k ultralow, webm_dash
5139 m4a   audio only      2 │    3.96MiB   49k https │ audio only          mp4a.40.5   49k 22k low, m4a_dash
6249 webm  audio only      2 │    3.99MiB   49k https │ audio only          opus        49k 48k low, webm_dash
7250 webm  audio only      2 │    5.31MiB   65k https │ audio only          opus        65k 48k low, webm_dash
8140 m4a   audio only      2 │   10.51MiB  129k https │ audio only          mp4a.40.2  129k 44k medium, m4a_dash
9251 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

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

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

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

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