主流音频 Codec 对比:AAC、MP3、Opus、FLAC、WAV 的技术特性与适用场景
做音频开发这些年,我几乎每天都在跟这几种格式打交道。选 Codec 这事儿,说白了就是一场权衡——要音质就得牺牲体积,要兼容就得放弃效率。今天我把它们掰开揉碎了讲清楚。
一、先看一张总览图
下面这张图梳理了五种主流音频 Codec 的核心定位。我习惯把它贴在工位上,每次选型前扫一眼,基本不会跑偏。
二、逐个拆解:每个 Codec 的脾气秉性
1. MP3 —— 老将,但该退就退
MP3 是音频压缩的鼻祖。1993 年诞生,靠心理声学模型砍掉人耳不敏感的频率成分。128kbps 是它的黄金码率,再低就明显有「水声」了。
我个人的经验:MP3 在 128kbps 以下,高频会丢失大量细节。有一次我做语音识别的前端处理,用 MP3 压缩后识别率掉了 8 个点,换成 Opus 才救回来。
适用场景:老旧设备兼容、低码率广播、对音质要求不高的语音存档。
避坑:别在 64kbps 以下用 MP3 做音乐,那声音像隔着一层棉被。
2. AAC —— 苹果生态的默认选择
AAC 是 MP3 的升级版。同样的 128kbps,AAC 的听感明显更干净。它支持更多采样率(8kHz-96kHz)和多声道(最多 48 通道)。
我记得有一次给直播平台做音频链路优化,从 MP3 切到 AAC,码率降了 20%,用户反馈的「音质变差」投诉反而少了。为什么?因为 AAC 在低码率下的掩蔽模型更精细。
| 特性 | MP3 | AAC |
|---|---|---|
| 诞生年份 | 1993 | 1997 |
| 典型码率 | 128-320 kbps | 64-320 kbps |
| 感知质量 @128kbps | 良好 | 优秀 |
| 多声道支持 | 最多 2 声道 | 最多 48 声道 |
| 专利状态 | 已过期(部分地区) | 需授权(但苹果免费用) |
小技巧:如果你的目标平台是 iOS/macOS,AAC 是原生硬件加速的,解码功耗比软件解码低 30% 左右。
3. Opus —— 我目前最推荐的通用 Codec
Opus 是 2012 年 IETF 标准化的开源 Codec。它把 SILK(语音)和 CELT(音乐)两种编码器合在一起,码率范围从 6kbps 到 510kbps 全覆盖。
说实话,Opus 是我现在做新项目时的首选。原因很简单:免专利、全平台、低延迟。它的算法延迟最低能到 5ms,而 AAC 通常在 20ms 以上。
核心优势:
- 码率自适应:6-510 kbps 连续可调
- 采样率支持:8kHz-48kHz
- 延迟:5ms-60ms 可配置
- 开源:无任何专利限制
我曾经在一个实时合唱 App 里用 Opus,延迟压到 20ms,配合 Jitter Buffer 基本感觉不到不同步。换成 AAC 的话,光编码延迟就 40ms 了。
注意:Opus 在 64kbps 以下的音乐编码质量会明显下降。如果你做高保真音乐流,建议码率拉到 128kbps 以上。
4. FLAC —— 无损压缩的标杆
FLAC 是 Free Lossless Audio Codec 的缩写。它把 PCM 数据压缩到原来 50%-60% 的大小,解压后和原始数据完全一致。
我习惯用 FLAC 做母带存档。有一次客户要 5 年前的录音重新混音,幸好当时存的是 FLAC,要是存了 MP3,高频细节早就丢光了。
| 参数 | FLAC | WAV (PCM) |
|---|---|---|
| 压缩率 | 50%-60% | 无压缩 |
| 解码复杂度 | 低(整数运算) | 极低(直接读取) |
| 元数据支持 | 完整(封面、歌词等) | 有限(RIFF 块) |
| 流式支持 | 支持 | 支持 |
经验之谈:FLAC 的压缩等级从 0 到 8,等级越高压缩率越大但编码越慢。我一般用等级 5,平衡速度和体积。等级 8 只多压 2%-3%,但编码时间翻倍。
5. WAV —— 最原始,也最可靠
WAV 本质是一个容器格式,里面通常装的是 PCM 裸数据。44.1kHz/16bit 的立体声 WAV 一秒约 172KB,一首歌 50MB 起步。
WAV 的好处是零延迟、零损失。我在做音频算法验证时,所有中间结果都存 WAV。为什么?因为任何有损压缩都会引入相位偏移,影响后续的 FFT 分析。
注意:WAV 文件大小受限于 RIFF 格式的 4GB 上限。录制长时间多轨音频时,建议用 RF64 或分段录制。
三、选型决策矩阵
下面这张表是我做选型时的最终判断依据。你直接对着需求查就行。
| 需求场景 | 推荐 Codec | 理由 |
|---|---|---|
| 实时通话 / 低延迟 | Opus | 5ms 延迟 + 丢包补偿 |
| 音乐流媒体(高音质) | AAC / Opus | 256kbps 以上听感无差异 |
| 老旧设备兼容 | MP3 | 几乎所有设备都支持 |
| 母带存档 / 后期制作 | FLAC | 无损 + 节省 40% 空间 |
| 音频算法开发 / 调试 | WAV | 零损失、零延迟、零歧义 |
| 低码率语音(< 32kbps) | Opus (SILK 模式) | 6kbps 仍可听懂 |
四、避坑指南
这些年踩过的坑,我列几个典型的:
- 别用 MP3 做语音:MP3 的帧长是 1152 样本,编码延迟 26ms,做实时语音交互根本不行。Opus 的帧长可以短到 2.5ms。
- AAC 的 LC 和 HE 版本别搞混:HE-AAC (v1/v2) 用 SBR 和 PS 技术提升低码率音质,但解码器必须支持。我见过有人用 HE-AAC 编码,播放器只支持 LC-AAC,结果声音像机器人。
- FLAC 的 metadata 会拖慢流式加载:如果做网络流媒体,FLAC 的 metadata 块可能很大(尤其带封面图),建议把封面图单独外挂。
- WAV 的字节序:WAV 默认是小端序(Little-Endian),但某些嵌入式平台是大端序。跨平台传输时务必确认字节序,否则出来的声音全是噪声。
五、一句话总结
选音频 Codec 没有银弹。我的原则是:新项目无脑 Opus,苹果生态用 AAC,存档用 FLAC,调试用 WAV,MP3 只留给那些实在跑不动新 Codec 的老古董。