跳到正文

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 保留原始格式。

相关指南