如何使用youtube-dl将播放列表下载为mp3格式?

我想下载一些以mp3格式的视频。这是一个播放列表。我该如何使用一个命令下载整个播放列表?

要获取混音的URL,请在右列的混音中右键单击一首歌曲。选择“复制链接地址”将会得到一个以&index=7结尾的URL。这是一种会导致“[youtube:playlist] 正在下载播放列表...”的链接类型。 - Paul Rougieux
7个回答

这个问题的两个部分(下载mp3和下载播放列表)都可以通过youtube-dl来支持。
youtube-dl --extract-audio --audio-format mp3 -o "%(title)s.%(ext)s" <url to playlist>

一些关于我和评论的注释:
  • 旧版本的youtube-dl在处理现代播放列表时存在问题。您可能需要用最新的版本替换

  • cmo: 您可以使用-i标志忽略缺失的(“在您的国家不可用”或已删除)视频。

  • frans: 如果您的播放列表无法正常工作并且URL包含v=<ID>元素,请将其删除,以便查询字符串中只有?list=...项目。


7不,它只下载了第一个视频。 - user267628
5@user267628 我已经用一个播放列表的URL进行了测试,对我来说是有效的。我不得不升级youtube-dl(请参考链接结尾处),但听起来你的问题是你没有提供一个播放列表的URL。 - Oli
2对我来说,它完美地运作。 - penta
31有时候你会复制一些像https://www.youtube.com/watch?v=<VIDEO_ID>&list=<LIST_ID>这样的东西。我需要从URL中移除v=<ID>这部分。 - frans
如何通过命令行获取<播放列表的URL>?我想使用ytsearch功能。 - Jonathan
更新youtube-dl(即执行youtube-dl -U)后,完美运行。非常优雅的答案。 - cmo
9我建议你在命令中加入“-i”参数。这样可以跳过从YouTube上删除的播放列表中的任何视频。 - cmo
1@cmo,感谢这个提示。它也可以用来跳过基于国家的屏蔽内容。 - devunder
谢谢!@frans 也感谢你的提示!在从URL中移除v=ID部分后,一切正常了 :) - Jack
跳过错误,将文本内容从英语翻译成中文:https://github.com/rg3/youtube-dl/issues/698#issuecomment-212984683 - ssi-anik
1我想要在音轨编号前加上填充的数字,所以我将其更改为 youtube-dl --extract-audio --audio-format mp3 -o "%(autonumber)02d-%(title)s.%(ext)s" <播放列表的网址>(添加了 %(autonumber)02d-)。 - cfx

注意:旧版本的youtube-dl无法下载播放列表。首先要知道你的youtube-dl版本。使用以下命令检查Youtube-dl的版本:
youtube-dl --version
2014.02.17及更早版本无法下载播放列表。 如果你使用的是旧版本,请通过以下方式进行更新:
sudo youtube-dl -U
成功更新后,使用以下命令:
youtube-dl -cit https://www.youtube.com/playlist?list=PLttJ4RON7sleuL8wDpxbKHbSJ7BH4vvCk
另外,你可以在一个简单的文本文件中创建URL列表,并使用以下命令:
youtube-dl -cit -a 文件名_其中你粘贴URL列表

对于MP3格式,音频可以保存。但是在我的机器上,音频保存为.m4a格式。

youtube-dl -cit --extract-audio --audio-format mp3 https://www.youtube.com/playlist?list=PLttJ4RON7sleuL8wDpxbKHbSJ7BH4vvCk

注意:如果你从Ubuntu软件中心安装了youtube-dl,就无法通过终端更新它。
请前往软件中心并进行更新。
我在Wine上测试了这些命令,因为我的youtube-dl版本较旧,无法更新。
如果你能够更新你的youtube-dl,你可以使用上述命令下载播放列表。
希望对你有所帮助...Youtube-dl on WINE


下载Youtube-dl.exe并在WINE上尝试使用youtube-dl。如果无法更新,请尝试其他方法。 - Madhav Nikam
参见 - Madhav Nikam
2Python基础安装 - Madhav Nikam
6不要在Wine中使用Windows版本,只需使用PIP(Python软件包管理器)进行安装。您可能需要安装PIP(sudo apt install pip3),然后使用sudo pip3 install youtube-dl进行安装,并使用sudo pip3 install youtube-dl --upgrade获取最新版本。我建议在使用youtube-dl之前每次都升级一下。哦,对了,请使用Python 3的PIP而不是Python 2。 - Stephen Angelico
1比起使用软件包管理器(如pip、apt等),更容易只获取脚本(按照这里建议使用curlchmod命令)。 - Wilf
Wilf,你也要获取最新版本,有时候需要根据发行版进行构建。但是记得执行chmod +x命令。 - Stígandr
该死,刚刚注意到这个命令只能下载播放列表中的第51首歌曲,因为YouTube的限制...只是提醒你,需要找到一些解决办法。 - Stígandr

你可以使用你喜欢的搜索引擎找到很多说明。例如:

对于这个播放列表,命令是:youtube-dl -t https://www.youtube.com/playlist?list=PLYH8WvNV1YEnNVnJb5ZXxDCE2HDAVVo4M

希望我能帮到你!


而且你也应该添加@Oli提供的参数。youtube-dl -t --extract-audio --audio-format mp3 https://www.youtube.com/playlist?list=PLYH8WvNV1YEnNVnJb5ZXxDCE2HDAVVo4M - IndexOutOfBoundsException
1不,只有一首歌能加载。 - user267628
对我来说没问题(版本2015.02.28) - tshepang

如果您使用pip进行安装,请运行以下命令进行更新:
 sudo pip install youtube-dl --upgrade

享受...


1有时候你需要更新的源代码,只需取回它并编译即可。 - Stígandr

补充Oli的回答。如果你有一个包含所有URL的播放列表(每行一个URL)的文本文件要下载:
youtube-dl --extract-audio --audio-format mp3 --batch-file="/full/path/to/playlist"

所有的答案都很好,但是让我来为大家节省下载播放列表时可能遇到的问题。
首先,你不能随心所欲地下载东西。如果你这样做,Youtube会暂时封禁你的IP地址。
此外,有些播放列表视频有时会是“私人”的、损坏的或已删除的。
为了避免所有这些问题,请按照以下步骤操作。
youtube-dl --sleep-interval 30  -i -f 251 URL_HERE

只是为了增加一些额外的清晰度。您不必使用-f标签加上一个数字。您可以使用受支持的特定文件扩展名。
youtube-dl --sleep-interval 30  -i -f mp3 URL_HERE

youtube-dl将始终尝试下载最佳版本。

有关更多信息,请参阅文档 - https://github.com/ytdl-org/youtube-dl/blob/master/README.md#format-selection


谢谢你的建议。251代表什么?这是一种特定的格式吗? - Paul Rougieux
这是你想要使用的格式类型。你不必使用晦涩的数字。如果你只想要最好的,而不关心格式,那么可以什么都不用。它会自动下载最佳可获得的格式,但如果你特别想要音频,你可以指定特定的类型。https://github.com/ytdl-org/youtube-dl/blob/master/README.md#format-selection - Goddard
谢谢,那个链接说“youtube-dl 默认使用 -f bestvideo+bestaudio/best 作为格式选择”,我猜可以使用 -f 'worstvideo,bestaudio' 下载音频文件。 - Paul Rougieux

你真的确定要MP3吗?现在很多设备都可以播放AAC,有些甚至可以播放Opus。
如果你想保留最高质量(Opus 160 kbps),并且你的播放器支持Opus编解码器,最好使用:
youtube-dl -f 251 (Playlist URL)

但是如果你的播放器只支持AAC(就像2018年大多数入门级电视一样):
youtube-dl -f 140 (Playlist URL)

如果你使用MP3,音质会下降,因为需要重新编码(从YouTube已经重新编码的音频)