我想以最佳质量下载 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 可能不会报告它们以您感兴趣的特定高质量格式提供。在这种情况下,只需使用该选项进行请求,
-f
youtube-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