科普:AAC与OPUS纯音频的封装

MP3发明于1989年,被写进1993年的MPEG-1标准,凭借着先发优势,迅速成为当年互联网主流的有损音频编码格式。虽然,随着技术的进步,MP3的技术指标已逐渐过时,但随着2017年其专利在全球范围内过期,MP3编码凭借免费与兼容性的优势,继续焕发出较强的生命力。

AAC最初诞生于1997年,是MPEG-2与MPEG-4标准中的有损音频编码格式,在压缩率、音质、多声道支持上都优于MP3。目前它被广泛应用于音乐流媒体、视频流媒体、移动设备等领域,是最主流的有损音频编码格式之一。

Opus诞生于2012年,虽然兼容性尚待提升,但其开源、免费的授权模式,以及优于AAC的压缩率、音质和低延迟技术特性,使其成为下一代主流音频编码标准的强力竞争者。

格式 发布时间 授权方式 音质 流媒体平台支持
MP3 1993 专利(过期) 低码率下音质较差,高码率下接近CD音质 几乎所有平台
AAC 1997 MPEG-2专利过期,MPEG-4有效 低码率下音质优于MP3,高码率下与MP3接近 绝大多数平台
Vorbis 2000 开源 低码率下音质优于MP3,高码率下可超越CD音质 部分平台
Opus 2012 开源 低码率下音质表现最佳,高码率下接近Vorbis 部分平台

楼主时不时会有一些从视频中提取音频的需求。

我们可以用 ffmpeg 的 -vn -c copy 命令,来扔掉视频流,仅复制音频流。这种方法不经过转码。既节约了算力资源,又避免了多次有损压缩导致的音质恶化。

AAC与OPUS均是支持多种容器的音频编码。不过,如果输出文件继续使用原有的扩展名,则依旧默认关联到视频播放器打开,如果只是用视频播放器播放一个黑屏画面,我们提取音频就显得多此一举。

那么,我们在获取了不含视频的纯音频之后,如何决定新文件采用什么扩展名呢?

这篇帖子总结了可以封装AAC、OPUS两种编码的音频流的容器格式

AAC

AAC音频流的封装有两种选择

一般来说,为了防止视频播放器误扫描到我们的纯音频文件,把 AAC 音频流封装成 .m4a 扩展名的音频文件是比较通用的选择。

如果是打算在 Apple 的生态系统使用的话,也可以按用途需求来输出 .m4b.m4r 扩展名文件。

万一输出错了,由于四种扩展名唯一的差别就是写法,那么直接批处理重命名就可以。

OPUS

由于Opus诞生距今不过十几年时间,因此兼容性就成为一个不得不说的问题。

以下表格整理自维基百科

扩展名 Windows Android Linux macOS iOS
mka, mkv 1607 5+
weba, webm 1809 5+ Monterey 17+
ogg 1709(Web媒体扩展)
1903(原生支持)
7+
m4a, mp4 17+
opus 1903 10+ 17+
caf High Sierra 11+

目前各系统的浏览器、视频播放器对于VP9视频+Opus音频的.webm容器已经形成广泛的支持,而纯音频所对应的扩展名.weba则走向了另一个极端,除了浏览器在线播放,几乎没有音频播放软件默认关联它。

各系统的本地音频播放器对于Opus纯音频扩展名的支持情况是参差不齐的。

各大系统对于.webm容器兼容性不错,但往往会将该扩展名自动关联到视频播放器,用一个黑屏的视频控制界面播放纯音频多少不太方便,因此建议选取历史更久的.ogg作为封装opus纯音频的容器,这样可以自动关联到音频播放器App打开,或者在支持音频控制界面的视频播放器中会显示为更方便的音频控制界面。