yt-dlp 转 MP3:正确命令、质量设置与元数据
作者 Tunelio 团队发布于
一行搞定:yt-dlp -x --audio-format mp3 --audio-quality 0 URL。yt-dlp 下载 YouTube 提供的最佳音频流(通常是 Opus 或 AAC),ffmpeg 把它转成 VBR MP3。下文:各参数的含义、如何选码率、嵌入封面和标签、处理播放列表,以及什么时候根本不该转成 MP3。
命令
yt-dlp -x --audio-format mp3 --audio-quality 0 "https://youtu.be/dQw4w9WgXcQ"- -x(--extract-audio):只下载音频流并运行音频后处理器。
- --audio-format mp3:用 ffmpeg 把结果转码为 MP3(必需 —— 见下文)。
- --audio-quality 0:最佳 VBR 质量(0 = 最佳,10 = 最差,或如 192K 的固定码率)。
需要 PATH 中的 ffmpeg 或通过 --ffmpeg-location 指定;没有它 yt-dlp 会打印 “ffmpeg not found” 并保存原始 .webm/.m4a 而不是 MP3。安装见 ffmpeg 指南。
码率:怎么选
--audio-quality 0 # VBR 约 220–260 kbps,最佳质量(推荐)
--audio-quality 5 # VBR 约 120–150 kbps,文件小
--audio-quality 192K # 固定 192 kbps,给不喜欢 VBR 的播放器YouTube 的源音频最高约为 128 kbps AAC 或约 160 kbps Opus。MP3 无法增加本就不存在的质量,所以 320K 主要只是增大文件;VBR 0 保留源里的一切。每一次 MP3 转换都是有损到有损的转码 —— 如果不是特别需要 MP3,请保留原始格式(下一节)。
你真的需要 MP3 吗?
yt-dlp -x --audio-format best "URL" # 保留原始 Opus(.webm/.opus)或 AAC(.m4a)—— 不转码
yt-dlp -x --audio-format m4a "URL" # .m4a 中的 AAC:Apple 设备和大多数播放器都能播MP3 适合老式车载音响、部分播客应用以及只认 MP3 的设备。对手机、浏览器和现代播放器,原始的 Opus 或 AAC 更小也更好听。webm 与 mp3 对比指南讲得更深。
封面、标题、艺术家
yt-dlp -x --audio-format mp3 --audio-quality 0 \
--embed-thumbnail --embed-metadata \
--parse-metadata "title:%(artist)s - %(title)s" \
"URL"--embed-thumbnail 把视频缩略图写为 ID3 封面(yt-dlp 会自动把 WebP 缩略图转成 JPEG)。--embed-metadata 填充标题、上传者、日期和描述标签。--parse-metadata 这一行会在上传者使用 “艺术家 - 标题” 命名习惯时,把它拆成 artist 和 title 字段。
文件名与文件夹
yt-dlp -x --audio-format mp3 -o "~/Music/%(uploader)s/%(title)s.%(ext)s" "URL"
# 播放列表:以列表名命名的文件夹中的编号文件
yt-dlp -x --audio-format mp3 -o "%(playlist)s/%(playlist_index)02d - %(title)s.%(ext)s" "PLAYLIST_URL"使用 %(ext)s,永远不要硬编码 .mp3:yt-dlp 先以源扩展名下载,转换后再重命名。如果播放器挑剔,--restrict-filenames 会替换空格和特殊字符。
播放列表与频道
yt-dlp -x --audio-format mp3 --audio-quality 0 \
--download-archive done.txt --ignore-errors \
--sleep-interval 2 --max-sleep-interval 6 \
"https://www.youtube.com/playlist?list=PL..."--download-archive 记住已完成的视频,重跑时只取新的;--ignore-errors 跳过已删除或私密的条目而不是中止;sleep 参数让批量运行保持在 YouTube 的速率限制之下 —— 没有它们会怎样,见机器人验证指南。
保存为配置文件
# ~/.config/yt-dlp/config(Windows:%APPDATA%\yt-dlp\config.txt)
-x
--audio-format mp3
--audio-quality 0
--embed-thumbnail
--embed-metadata
-o ~/Music/%(title)s.%(ext)s有了它,yt-dlp URL 就够了。偶尔要下载视频时用 --ignore-config。
常见问题
- 输出是 .webm 或 .m4a 而不是 .mp3 → 缺少 ffmpeg;安装它或传入 --ffmpeg-location。
- “Postprocessing: Conversion failed!” → 损坏的部分下载或非常旧的 ffmpeg;删除 .part 文件,更新两个工具,重试。
- 没有封面 → --embed-thumbnail 需要 ffmpeg,某些文件还需要 mutagen Python 包(官方二进制和 yt-dlp[default] 已包含)。
- 下载慢或被限速、403、机器人验证 → 这不是 MP3 的问题;更新 yt-dlp 并参照 403 和机器人验证指南。
- 多语言视频选错音轨 → 用 -f 'ba[language=zh]' 指定,或用 yt-dlp -F 查看音轨列表。
改用 API 获取 MP3
如果 MP3 是你机器人或应用的功能而不是个人下载,上面的流水线 —— yt-dlp 加 ffmpeg 加干净 IP —— 就成了需要运行和打补丁的基础设施。托管 API 一次请求返回现成的 MP3 URL:
curl "https://tunelio.dev/create?url=https://youtu.be/dQw4w9WgXcQ&quality=mp3" \
-H "Authorization: Bearer tnl_your_api_key"
# → { "url": "https://…/tunnel?id=…&sig=…", "file_size_str": "3.29 MB", "status": "ok" }Tunelio 是我们自己的服务;个人使用时,本页顶部的命令就足够了。新账号可获得 100 个免费额度,无需银行卡。
来源
- yt-dlp README —— 后处理选项(-x、--audio-format、--audio-quality、--embed-*)、输出模板。
- yt-dlp README —— 格式选择与排序(-f、-S)。
- ffmpeg 文档 —— libmp3lame VBR 质量等级。
常见问题
--audio-quality 0 等于 320 kbps 吗?
不等于。0 是最佳 VBR 设置(视素材约 220–260 kbps)。YouTube 的源本来就只有约 128–160 kbps,所以 320K 只会让文件更大。
为什么我得到的是 .webm 而不是 .mp3?
ffmpeg 未安装或不在 PATH 中,所以 yt-dlp 保留了原始音频容器。安装 ffmpeg 或传入 --ffmpeg-location。
能把整个播放列表下载为 MP3 吗?
可以:把播放列表 URL 交给 yt-dlp,并加上 --download-archive 和 --ignore-errors,这样重跑是增量的,坏掉的条目也不会中断批处理。
转成 MP3 会损失质量吗?
会有一点 —— 这是在 YouTube 的 Opus/AAC 之上的第二次有损编码。如果播放器支持,用 --audio-format best 保留原始格式。