如何使用 youtube-dl 将 YouTube 视频下载为最佳质量的音频 mp3

如何使用 youtube-dl 将 YouTube 视频下载为最佳质量的音频 mp3

我想以最佳质量下载 YouTube 视频为 mp3 文件。以下代码有助于下载 YouTube 视频,但m4a不能下载我们mp3

youtube-dl -f bestaudio --audio-quality 0 --audio-format mp3 https://www.youtube.com/playlist?list=PLYRruMbyFRcBVdVN8v4FNkIKkXvL-bZn_

你能告诉我如何使用bestaudio参数下载 YouTube 视频吗mp3

答案1

man youtube-dl

-x, --extract-audio                  Convert video files to audio-only files (requires ffmpeg or avconv and ffprobe or avprobe)
    --audio-format FORMAT            Specify audio format: "best", "aac", "vorbis", "mp3", "m4a", "opus", or "wav"; "best" by default
    --audio-quality QUALITY          Specify ffmpeg/avconv audio quality, insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K (default

因此你的命令可能是:

youtube-dl -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 <Video-URL>

使用--audio-quality 0最高编码质量,但会不必要地增加文件大小。默认值为 5,根据源质量,这可能是更好的选择。

因此,如果您关心质量和文件大小,您应该避免重新编码并保留 Youtube 的原生音乐格式:

youtube-dl -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata <Video-URL>

导致m4a文件或

youtube-dl -f bestaudio --extract-audio --embed-thumbnail --add-metadata <Video-URL>

可能会导致一个ogg文件。

您可以使用以下方式列出可用的格式

youtube-dl -F <Video-URL>

答案2

如果您只想要 mp3 文件:

youtube-dl -f bestaudio  "https://www.youtube.com/playlist?list=PLYRruMbyFRcBVdVN8v4FNkIKkXvL-bZn_" --exec "ffmpeg -i {}  -codec:a libmp3lame -qscale:a 0 {}.mp3 && rm {} "

如果您不想删除原始文件:

youtube-dl -f bestaudio  "https://www.youtube.com/playlist?list=PLYRruMbyFRcBVdVN8v4FNkIKkXvL-bZn_" --exec "ffmpeg -i {}  -codec:a libmp3lame -qscale:a 0 {}.mp3 "

答案3

我推荐使用Pafy(Python),非常容易获取音频链接,如果你想要的话可​​以直接下载:

#python3
import pafy
video = pafy.new('video id or video url')
bestaudio = video.getbestaudio()
bestaudio.bitrate #get bit rate
bestaudio.extension #extension of audio fileurl
...
bestaudio.url #get url
...
#download if you want
bestaudio.download()

答案4

还值得注意的是其他作品man youtube-dl(可以找到在线副本这里):

(对于那些认为 TL;DR 的人来说,只需阅读第 4 段,您就可以使用它,youtube-dl -x URL因为它无论如何都应该下载最好的质量 :)

根据我的经验,这种方法也youtube-dl -f bestaudio URL有效!但是,大多数情况下,使用这两种方法时,您都需要使用以下方法转换为 MP3:ffmpeg或类似方法 - 由于您已经在编辑文件,您也可以标记它(使用旧版本 ID3 以实现大多数设备兼容性!)。

格式选择

默认情况下,youtube-dl 会尝试下载最佳质量,但有时您可能想要下载其他格式。最简单的情况是请求特定格式,例如-f 22。您可以使用获取可用格式的列表--list-formats,也可以使用文件扩展名(目前支持 aac、m4a、mp3、mp4、ogg、wav、webm)或特殊名称 best、bestvideo、bestaudio 和 poorr。

如果您想要下载多个视频并且它们没有相同的可用格式,您可以使用斜杠指定偏好顺序,例如-f 22/17/18。您还可以通过将条件放在括号中来过滤视频结果,例如-f "best[height=720]"(或-f "[filesize>10M]")。这适用于文件大小、高度、宽度、tbr、abr、vbr、asr 和 fps 以及比较 <、<=、>、>=、=、!= 以及 ext、编解码器、vcodec、容器和协议以及比较 =、!= 。除非您在运算符后放置问号(?),否则将排除值未知的格式。您可以组合格式过滤器,因此 -f "[height <=? 720][tbr>500]"选择高达 720p 的视频(或高度未知的视频),比特率至少为 500 KBit/s。

使用逗号下载多种格式,例如-f 136/137/mp4/bestvideo,140/m4a/bestaudio. 您可以使用(需要 ffmpeg 或 avconv)将两种格式的视频和音频合并为一个文件-f <video-format>+<audio-format>,例如-f bestvideo+bestaudio.

自 2015 年 4 月底起,youtube-dl 版本 2015.04.26 将其用作-f bestvideo+bestaudio/best默认格式选择(参见 #5447、#5456)。如果安装了 ffmpeg 或 avconv,则会分别下载 bestvideo 和 bestaudio,然后将它们合并为一个文件,从而提供最佳的整体质量。否则,它会恢复为 best,并下载最佳质量的单个文件。非 YouTube 视频也需要 best,因为它们不提供两个不同文件中的音频和视频。如果您只想下载某些 dash 格式(例如,如果您不想获取分辨率高于 1080p 的视频),则可以将其添加-f bestvideo[height<=?1080]+bestaudio/best到配置文件中。请注意,如果您使用 youtube-dl 流式传输到 stdout(然后很可能将其通过管道传输到您的媒体播放器),即您明确指定输出模板 -o -,youtube-dl 仍会使用-f best格式选择以便立即开始向您的播放器传送内容,而不必等到 bestvideo 和 bestaudio 下载和多路复用。

如果您想保留旧的格式选择行为(youtube-dl 2015.04.26 之前),即您想要下载作为单个文件提供的最佳可用质量媒体,您应该使用 明确指定您的选择-f best。您可能希望将其添加到配置文件(#configuration)中,以便不必在每次运行 youtube-dl 时都输入它。

...

您能把 -b 选项放回去吗?

大多数问这个问题的人并不知道 youtube-dl 现在默认下载 YouTube 报告的最高可用质量,在某些情况下将是 1080p 或 720p,因此您不再需要 -b 选项。对于某些特定视频,YouTube 可能不会报告它们以您感兴趣的特定高质量格式提供。在这种情况下,只需使用该选项进行请求,-fyoutube-dl 就会尝试下载它。

Youtube(可能就是这样应该作为一个视频播放网站)显然也压缩了音频(见这里) 降至 120~KBs,这个数字相当低,但大部分情况下看起来还不错。

要比较下载的视频,您可以查询已下载的视频/音轨(您可能需要使用avprobe而不是ffprobe)以查看哪个最好:

$ ffprobe -hide_banner output-output-loads-of-options.webm
Input #0, matroska,webm, from 'output-output-loads-of-options.webm':
  Metadata:
    encoder         : google
  Duration: 00:04:02.63, start: 0.000000, bitrate: 118 kb/s
    Stream #0:0(eng): Audio: vorbis, 44100 Hz, stereo, fltp (default)
$ ffprobe -hide_banner output_with_just_-x.ogg 

Input #0, ogg, from 'output_with_just_-x':
  Duration: 00:04:02.65, start: 0.000000, bitrate: 117 kb/s
    Stream #0:0(eng): Audio: vorbis, 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      LANGUAGE        : eng
      ENCODER         : Lavf56.4.101

相关内容