音频编解码器
除非你想回到1927年之前,否则的话,你的视频中的音频都会有自己独立的轨道。就像视频编解码器一样,音频编解码器也是一组用于音频流编码的算法。类似视频编解码器,音频编解码器也分为有损和无损两种。同样类似无损视频,无损音频也是因为体积太大而不能放在web上。所以这里我们还是讨论的是有损的音频编解码器。
事实情况比这个还要复杂一些,因为有损音频编解码器分成几大类。音频可以在更多场合使用,而视频则会有些限制(例如电信等),有些音频还专门为人类声音做了特殊的优化。你不能使用这种解码器去播放音乐CD,因为其结果会很像一个4年前的喇叭发出的声音。但是你可以使用 Asterisk PBX 播放,因为其带宽很精准,这种编解码器可以把人的声音压缩到通用格式大小的几分之一。但是,由于缺少本地支持和第三方插件,这种专门演讲优化的音频编解码器很难在web上看到。所以我们主要还是介绍通用的有损编解码器。
正像我们前面曾经说到的,当你“观看视频”时,你的计算机至少在做三件事:
- 解析容器格式;
- 解码视频流;
- 解码音频流,并且将声音发送到你的音箱。
音频编解码器指定如何进行第三步——解码音频流,将其转换成数字声波,以便你的音箱可以将其播放出来。同视频编解码器类似,我们有各种技巧来减少在音频流中存储的信息。既然我们正在讨论有损音频编解码器,这些信息就会在录制 → 编码 → 解码 → 收听这一过程中丢失。不同的音频编解码器会丢失不同的东西,但是其主要目的是一致的:让你的耳朵听不出来到底丢失了什么。
音频有一个视频没有的概念:声道。我们要将声音发送到音箱,对不对?那么,你有几个音箱呢?如果你正坐在电脑前,你可能只有两个:一个在左侧一个在右侧。而我的电脑有三个:左侧一个,右侧一个,地面上还有一个。所谓的“环绕立体声”系统则至少有六个音箱,将分布在房间的每个角落。每一个音箱接收到的是原始声音的一个特定的声道。其原理是,你坐在六个音箱的中间位置,听到的是来自于六个独立声道的声音,然后你的大脑就可以将它们同步起来,而你的感觉就是你坐在了演出现场的中心。真的是这样吗?这种花费可能高达几百万美元的工业产品的确会这么想。
大部分通用音频编解码器都能处理两个声道的声音。在记录过程中,声音被分成左声道和右声道;在编码过程中,两个声道被存在同一个音频流;在解码过程中,两个声道都被解码,每一个都被发送给一个合适的音箱。有些视频编解码器可以处理多于两个声道,能够记录下哪个对应哪个,然后你的播放器就可以将声道发送到正确的音箱。
现在有很多音频编解码器。还记得我们曾经说也有很多视频编解码器吗?与音频相比,那简直是小巫见大巫了。虽然如此,但是在web上,我们实际使用的也只有三种:MP3、AAC 和 Vorbis。
MPEG-1 Audio Layer 3
MPEG-1 Audio Layer 3 就是我们所熟知的 “MP3”。如果你没听说过 MP3,那真的很无语。沃尔玛卖的那种便携式音乐播放器就叫“MP3播放器”。
MP3 包含2个声道的声音。它们可以有不同的比特率:64 kbps、128 kbps、192 kbps 和另外相当宽泛的从 32 到 320。高比特率意味着更大的文件体积,更好的音质,不过这个关系不是线性的。(128 kbps 的效果听起来要比 64 kbps 好一倍多,但是 256 kbps 则不如 128 kbps 的两倍。)另外,MP3 格式允许多种比特率编码。这意味着编码流的一部分要比另外一部分压缩率更大。例如,两部分之间的静音就可以使用更低的比特率;当声音换到多种乐器演奏的复杂部分是则自动提高比特率。MP3 也可以使用固定的比特率编码,这被称为“恒定比特率编码”。
MP3 标准并没有定义如何编码 MP3(虽然它明确定义了如何解码);不同的编码器使用不同的声音模型进行编码,得到的结果相差很大,但是这些却都可以被任何播放器播放。开源的 LAME 项目是最好的编码器,或者说是除最低比特率外的最好的编码器。
MP3 格式(在1991年被标准化)有专利保护。这就是为什么 Linux 不能提供 MP3 文件播放功能的原因。很多便携式音乐播放器都支持播放标准的 MP3 文件;MP3 音频流也可以嵌入到任何视频容器中。Adobe Flash 可以直接播放独立的 MP3 文件,也可以播放嵌入到 MP4 视频容器中的 MP3 音频流。
Advanced Audio Coding
Advanced Audio Coding 就是我们所熟知的 “AAC”。这种格式在1997年被标准化。在它被 Apple 选作 iTunes Store 的默认格式之后才被人们所熟知。最初,所有从 iTunes Store 购买的 AAC 文件都使用了 Apple 名为 FairPlay 的专有 DRM 方案进行加密的。现在,iTunes Store 里面选择的歌曲已经不是受保护的 AAC 文件了。Apple 称其为“iTunes Plus”,因为这个名字听起来比“iTunes Minus”要好。AAC 格式也是受专利保护的,其协议信息可以在线找到。
AAC 设计是在相同比特率下提供比 MP3 更好的音质。(MP3 受限于固定多的比特率,其上限是 320 kbps。)AAC 可以编码多达 48 个声道,虽然实际没人这么做。AAC 格式与 MP3 不同之处还在于它定义多个配置,类似 H.264,原因也是类似的。“低复杂度”配置可以由低CPU设备实时播放,而高配置则可以在相同比特率提供更好的音质,当然编码和解码速度也会更慢。
现在所有 Apple 的产品,包括 iPod、AppleTV 和 QuickTime 都支持播放特定配置的 AAC 独立音频文件和嵌入到 MP4 视频容器的音频流。Adobe Flash 支持 MP4 中的所有 AAC 配置,开源的 MPlayer 和 VLC 视频播放器也可以。对于编码,FAAC 库是开源的选择;对于 mencoder 和 ffmpeg 则是一个编译时的选项。
Vorbis
Vorbis 通常称作 “Ogg Vorbis”,虽然从技术上说这是不对的。(“Ogg” 仅仅是一个容器格式,而 Vorbis 音频流也能嵌入到其他容器中。)Vorbis 没有专利保护,因此所有主流 Linux 发行版都直接支持;便携式设备则通过开源的 Rockbox 固件播放。Mozilla Firefox 3.5 支持 Ogg 容器中的 Vorbis 音频文件,或者是带有 Vorbis 音轨的 Ogg 视频。Android 手机可以播放独立的 Vorbis 音频文件。Vorbis 音频流通常嵌入到 Ogg 或者 WebM 容器,但也可以嵌入 MP4 或者 MKV 容器(通过一些技巧也可以嵌入 AVI)。Vorbis 支持任意的声道。
开源的 Vorbis 编码器和解码器包括 OggConvert(编码)、ffmpeg(解码)、aoTuV(编码)和 libvorbis(解码)。Mac OS X 上的 QuickTime 和 Windows 的 DirectShow 也都支持。