yt-dlp 音频:WebM/Opus、M4A/AAC 还是 MP3 —— 你该保留哪一个?
作者 Tunelio 团队发布于
YouTube 并不存储 MP3。它的音频流是 WebM 容器中的 Opus(最高约 160 kbps)和 M4A 中的 AAC(约 128 kbps)。yt-dlp -x 会原样给你其中之一;要求 MP3 则让 ffmpeg 重新编码,损失一点质量并消耗 CPU。为质量和体积保留 WebM/Opus,为 Apple 设备和广泛兼容选 M4A,只有目标播放器别的都不认时才用 MP3。
YouTube 实际提供什么
yt-dlp -F "https://youtu.be/dQw4w9WgXcQ"
# ID EXT ... ACODEC ABR
# 249 webm opus ~50k (低)
# 250 webm opus ~70k (中)
# 251 webm opus ~130–160k(高) ← 通常就是 "bestaudio"
# 140 m4a aac ~128k普通视频只有这几条纯音频轨道(部分视频还提供更高码率的 AAC 或多语言轨道)。无论你最终得到什么 —— MP3、FLAC、WAV —— 都源自其中之一,所以不可能好过约 160 kbps 的 Opus 或约 128 kbps 的 AAC。
三种选择
保留原始格式(WebM/Opus 或 M4A/AAC)—— 最佳质量,不转码
yt-dlp -x --audio-format best "URL" # 保留 bestaudio 本来的样子(通常是 .webm/.opus)
yt-dlp -f bestaudio "URL" # 同一流,完全不做后处理零质量损失、即时完成、同等质量下文件最小。Opus 在所有现代浏览器、Android、VLC、Windows 10+ 和大多数桌面播放器中原生播放。--audio-format best 还会在可能时把 .webm 重封装为 .opus,让标签工具能识别。
M4A(AAC)—— 对 Apple 友好,源是 AAC 时同样不转码
yt-dlp -f 'ba[ext=m4a]' "URL" # 原样获取 AAC 轨道(itag 140)
yt-dlp -x --audio-format m4a "URL" # .m4a 中的 AAC;只有所选源是 Opus 时才转码iPhone、iPad、iTunes/Music 和许多车载系统支持 M4A 但不支持 Opus。直接选择 AAC 轨道可避免任何重新编码;约 128 kbps 的 AAC 对语音内容和大多数音乐都足够。
MP3 —— 兼容性最大,永远要重新编码
yt-dlp -x --audio-format mp3 --audio-quality 0 "URL"只有目标设备确实需要时才用 MP3:老式车载音响、廉价 MP3 播放器、部分播客平台和陈旧工具。转码是有损到有损,并消耗 ffmpeg 的 CPU 时间;VBR 0 能把损失降到最小。详情见 MP3 指南。
并排对比
- 质量:WebM/Opus > M4A/AAC ≳ MP3(同码率下 Opus 是三者中最高效的编解码器;MP3 最低效)。
- 一首 4 分钟歌曲的文件大小:Opus 160k ≈ 4.7 MB · AAC 128k ≈ 3.8 MB · MP3 VBR 0 ≈ 6–8 MB。
- 兼容性:MP3 无处不在 · AAC/M4A 除极少数老旧播放器外无处不在 · Opus 除较老的 Apple 设备和部分车载系统外无处不在。
- CPU:原始格式 = 无 · 由 AAC 得到 M4A = 无 · MP3 = 每首几秒(规模化时很重要)。
- 元数据与封面:三者都支持通过 --embed-metadata --embed-thumbnail 写标签。
按用途选择
- 手机/桌面上的个人曲库 → 保留原始格式(--audio-format best)。
- Apple 生态、通过 USB 的车载 → M4A(-f 'ba[ext=m4a]')。
- 播客源、老硬件、未知播放器 → MP3 VBR 0。
- 用于转写或机器学习的语音 → 保留 Opus,或直接请求转录文本而不是音频。
- 存档 → 保留原始流;以后随时可以转码,反过来永远不行。
常见错误
- “为了最佳质量用 --audio-format mp3 --audio-quality 320K” —— 源只有约 160 kbps;你只是把文件变大,而不是变好。
- 在存在 AAC 轨道时把 Opus 转成 M4A —— 直接选 itag 140,跳过重新编码。
- 在 -o 里硬编码 .mp3 —— 使用 %(ext)s 让 yt-dlp 能在转换后重命名。
- 指望 FLAC/WAV 是无损的 —— 它们只是有损源的无损容器;更大,不更好。
在产品中
如果你的应用向用户交付音频,格式决定就变成了服务器成本:每个 MP3 都是一次 ffmpeg 任务,每个 Opus 都是直通。托管 API 让你按请求指定 —— quality=mp3 得到现成 MP3,quality=opus 得到原始流 —— 两种情况都返回一个 URL。Tunelio 是我们自己的服务;个人下载用上面的命令就够了。新账号可获得 100 个免费额度。
来源
- yt-dlp README —— 格式选择(-f、-S、bestaudio)、--audio-format best。
- yt-dlp -F 输出 —— 任意视频的 itag/编解码器表。
- Opus 编解码器(opus-codec.org)与 ffmpeg libmp3lame 文档 —— 码率与质量等级。
常见问题
WebM 音频比 MP3 好吗?
同一来源下是的:WebM 原样承载 YouTube 的原始 Opus 流,而 MP3 是在其之上的第二次有损编码。Opus 每千比特的效率也更高。
Opus .webm 能在我手机上播放吗?
在 Android、Windows、Linux、VLC 和所有现代浏览器上 —— 可以。较老的 iPhone 和部分车机不行;那里请用 M4A。
yt-dlp 是直接从 YouTube 下载 MP3 吗?
不是。YouTube 没有 MP3 流;yt-dlp 下载 Opus 或 AAC,当你要求 --audio-format mp3 时由 ffmpeg 转换。
--audio-format best 做什么?
把下载的音频保持在原始编解码器中,只重封装容器(例如 .webm → .opus)。不转码,不损失质量。