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:a copy 命令,来扔掉视频流,仅复制音频流。这种方法不经过转码。既节约了算力资源,又避免了多次有损压缩导致的音质恶化。

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

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

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

AAC

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

  • 根据MPEG-2规范封装(被MPEG-4规范的音频编码向下兼容,因而较少用到)
    • .aac 扩展名同编码
  • 根据MPEG-4规范封装。拜苹果所赐,采用MPEG-4封装的AAC流扩展名–非常混乱–,看似不是同一种容器,其实本质完全相同:
    • .mp4 没错,.mp4也是可以封装纯音频的
    • .m4a 由于 iTunes Store 的多年经营,.m4a已经成为目前最常见的AAC音频扩展名。(不过除了AAC流之外,.m4a其实还可以封装ALAC流,就不能随便改成其他扩展名了)
    • .m4b 苹果有声书专用的扩展名,本质AAC
    • .m4r 苹果的铃声,本质是不超过40秒的AAC

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

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

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

OPUS

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

以下表格整理自维基百科

扩展名 Windows Android Linux macOS iOS
mka, mkv 1607 5+
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纯音频扩展名的支持情况是参差不齐的。

  • Windows / Android
    • .m4a.ogg:对使用该扩展名的opus音频的支持普遍在2017~2018年左右普及
    • .opus:对该使用该扩展名的opus音频的支持在2019年之后才普及
  • macOS / iOS
    • 仅Safari浏览器支持播放以.caf.webm封装的Opus流媒体,其他App虽然能识别本地文件的.caf.m4a扩展名,但并不支持Opus解码
    • 本地Opus文件往往要借助VLC或者Documents 等第三方App打开,经实测VLC支持上述全部扩展名,Documents无法识别.caf.caf.mka.opusm4a能识别但播放失败,只有.ogg.webm扩展名可以正常播放

对于兼容性最佳的.webm格式,系统往往会自动关联视频播放器,播放黑屏界面多少有些不方便,对于不含视频的纯音频,更建议选取.ogg作为封装的容器,这样在支持音频播放界面的App中会显示为更方便的控制界面。

我只在很久之前从flv视频里抽过音频。那时候多数还是mp3。现在连下载视频的行动力都基本没有了,弄下来最多也是直接剪辑视频,不再单独抽取音频了…