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

好了,这一章就到这里。下一章咱们聊聊音频采样率、位深和声道配置,这些参数怎么选,直接影响你的系统设计。