3、音频编解码器:MP3、AAC、FLAC、WAV格式对比,有损与无损压缩原理
好,咱们今天来聊聊音频编解码器。说实话,这玩意儿是音频系统开发里最绕不开的基础。你想想看,无论是做播放器、做录音软件,还是搞流媒体传输,天天都得跟这些格式打交道。
我个人习惯把音频格式分成两大类:无损和有损。说白了,无损就是“原汁原味”,有损就是“丢点细节换体积”。这个取舍,贯穿了整个音频编解码的发展史。
3.1 无损压缩:WAV 与 FLAC
先说说无损。WAV 格式,全称 Waveform Audio File Format,是微软和 IBM 搞出来的老大哥。它不压缩,直接把 PCM 数据存下来。采样率、位深、声道数,一个不落。
举个例子,CD 音质是 44.1kHz、16bit、立体声。一秒的数据量是多少?
44.1k × 16bit × 2声道 = 1,411,200 bps ≈ 176.4 KB/s
一首 4 分钟的歌,大概 40MB。嗯,这就是 WAV 的代价——大。
那 FLAC 呢?Free Lossless Audio Codec,自由无损音频编解码器。它用了预测编码和熵编码。简单说,它发现音频信号有规律,比如一段静音全是 0,那就只存“连续 1000 个 0”这个信息,而不是存 1000 个 0。压缩率一般在 50%~70%。
关键点:FLAC 解压后,和原始 WAV 数据完全一致,一个比特都不差。我在项目中遇到过客户质疑 FLAC 音质,我直接让他做 MD5 校验,结果一模一样,他服了。
我的建议:做存档或后期处理,用 WAV 或 FLAC。FLAC 更省空间,而且支持标签、封面,比 WAV 方便得多。
3.2 有损压缩:MP3 与 AAC
有损压缩,核心原理是心理声学模型。说白了,人耳不是所有声音都听得见。有些频率被更强的声音掩盖了,有些细节人耳根本分辨不出来。那好,把这些“听不见”的信息丢掉,体积就下来了。
MP3,MPEG-1 Audio Layer 3,1993 年诞生。它把音频切成 576 个采样点的帧,每帧做 MDCT(改进型离散余弦变换),然后根据心理声学模型分配比特数。重要的频段多给点比特,不重要的少给甚至不给。
AAC,Advanced Audio Coding,是 MP3 的接班人。它用了更灵活的滤波器组(MDCT 的窗函数更多样),心理声学模型也更精细。同样的码率,AAC 的音质通常比 MP3 好一截。
| 特性 | MP3 | AAC |
|---|---|---|
| 诞生年份 | 1993 | 1997 |
| 采样率支持 | 最高 48kHz | 最高 96kHz |
| 码率范围 | 8~320 kbps | 8~529 kbps |
| 声道数 | 最多 2 声道 | 最多 48 声道 |
| 音质(同码率) | 基准 | 更好 |
避坑指南:我曾经在项目里用 MP3 做多声道环绕声,结果发现 MP3 原生只支持立体声。要做 5.1 声道,得用 MP3 Surround 扩展,或者干脆换 AAC。AAC 原生支持 5.1、7.1,省心多了。
3.3 有损与无损的对比
咱们直接上对比表,一目了然:
| 格式 | 压缩类型 | 典型码率 | 音质 | 适用场景 |
|---|---|---|---|---|
| WAV | 无压缩 | 1411 kbps (CD) | 完美 | 录音、编辑、存档 |
| FLAC | 无损压缩 | 500~900 kbps | 完美 | 音乐收藏、无损传输 |
| MP3 | 有损压缩 | 128~320 kbps | 良好~优秀 | 流媒体、便携播放 |
| AAC | 有损压缩 | 128~256 kbps | 优秀 | 流媒体、视频音频 |
为什么会这样?说白了,WAV 和 FLAC 适合“我要保留所有信息”的场景。比如你做混音,今天存了 WAV,明天打开还是原来的数据。MP3 和 AAC 适合“我要省空间、省带宽”的场景。比如你听在线音乐,128kbps 的 AAC 已经能糊弄大多数人的耳朵了。
我的经验:做音频系统开发,我建议你至少支持 WAV 和 FLAC 两种无损格式,以及 MP3 和 AAC 两种有损格式。这样覆盖了 90% 的使用场景。至于 OGG、APE 这些,看需求再定。
3.4 实际开发中的选择
嗯,这里要注意。如果你在做嵌入式系统,比如一个蓝牙音箱,那 FLAC 解码可能太耗资源。我建议用 MP3 或 AAC,码率控制在 192kbps 以上,音质和性能平衡得最好。
如果你在做专业音频软件,比如 DAW(数字音频工作站),那必须支持 WAV 和 FLAC。用户录完音要导出无损文件,这是底线。
如果你在做流媒体服务,比如网络电台,AAC 是首选。同样的码率,AAC 比 MP3 音质好,而且支持多声道。YouTube、Apple Music 都用 AAC,不是没道理的。
最后,送你一个简单的选择逻辑:
- 要完美音质? → WAV 或 FLAC
- 要省空间? → AAC 256kbps 或 MP3 320kbps
- 要兼容性? → MP3 128kbps(几乎所有设备都支持)
- 要多声道? → AAC 或 FLAC
好了,这一章就到这里。下一章咱们聊聊音频采样率、位深和声道配置,这些参数怎么选,直接影响你的系统设计。