AAC 在音视频链路里太常见了,常见到很多人默认知道它,但真问到 profile、封装关系和工具链差别时,往往又说不太清。
1. AAC 为什么重要
如果只从工程角度看,AAC 值得用的原因其实很直接:同样码率下,通常比 MP3 更划算。
它在工程里常见,是因为它同时满足几件事:
- 压缩效率较高
- 生态成熟
- 容器支持广
- 在视频音轨里很常见
很多 MP4 / M4A 文件里的音频流,实际上就是 AAC。
2. AAC 的基本编码思路
AAC 属于感知编码。它不是简单粗暴地把所有数据都保留下来,而是尽量保留人耳更敏感的信息,压缩掉不那么容易感知的部分。
粗略看,它大概做三件事:
- 把时域信号转换到频域
- 根据心理声学模型判断哪些频谱成分更重要
- 对频谱做量化、编码和比特分配
数学细节可以后看,但目标先要记住:码率有限的时候,尽量别把听感毁得太厉害。
3. AAC profile 不能忽略
很多 AAC 兼容性问题,其实不是 AAC 本身的问题,而是 profile 选错了。
常见 profile 有:
- AAC-LC
- HE-AAC
- HE-AAC v2
先这么记就够了:
AAC-LC:最常见、兼容性最好HE-AAC:偏低码率优化HE-AAC v2:更低码率场景下继续优化
如果没有特别明确的低码率目标,工程上通常优先从 AAC-LC 开始,因为它最稳。
4. AAC 和容器的关系
一个非常常见的误区是把 AAC 和 M4A、MP4 混成一回事。实际上:
- AAC 是编码格式
- MP4 / M4A 是容器
所以一个 .m4a 文件常常“里面是 AAC”,但两者不是同一个层面的概念。
调试时要分开看:
- 你在检查的是容器问题
- 还是音频流本身的编码问题
5. 工程里最常见的使用场景
AAC 经常出现在这些地方:
- 视频文件的音轨
- M4A 音频文件
- HLS / TS 流
- 移动端媒体内容
- 直播、点播链路
选择 AAC 往往是因为它在兼容性、质量和体积之间取得了比较平衡的结果。
6. 常见编码工具和实现
工程里常见 AAC 编码来源包括:
- FFmpeg 自带 AAC 编码器
libfdk_aac- 平台硬件编解码能力
- 系统内置多媒体框架
不同实现之间的差异,通常体现在:
- 编码质量
- 低码率表现
- 性能
- 许可证限制
如果只是通用转码,FFmpeg 往往足够;如果是产品级场景,还要同时评估平台支持和授权问题。
7. 排查 AAC 问题时应该优先看什么
很多 AAC 播放异常或转码异常,优先看下面这些信息:
- 采样率
- 声道数
- 比特率
- profile
- 封装格式
- 头信息是否正确
实际问题里最常见的并不是“算法错了”,而是:
- profile 和目标设备不兼容
- 容器与音频流信息不匹配
- 采样率或声道配置超出预期
8. 总结
看 AAC 时,先把这三件事分开:
- AAC 是编码格式
- AAC 有不同 profile
- AAC 常常装在 MP4 / M4A / TS 等容器里
只要把这三层关系理顺,后续再看转码、封装、播放器兼容性问题,就不会总是把“编码”和“容器”混成一件事。