昨天,学霸胖问了我们一个问题,“APE”格式是什么?我也一时想不起来全称,只知道属于一种无损的音频格式。回来之后,觉得有必要查一查资料,然后做一次科普,同诸位分享。
查阅资料,当今广泛存在的无损压缩格式(音频)有 APE、 FLAC、 WavPack、 LPAC、 WMALossless、 AppleLossless、 La、 OptimFROG 和 Shorten。而常见的、主流的无损压缩格式是 APE、FLAC、WMALossless 和 AppleLossless。那我们今天就来聊聊这些无损音频格式当中的两个:APE 和 FLAC。
引入—— WAV 音频格式与音频压缩WAV 音频格式是最接近无损的一种音乐格式,是微软开发的一种符合 RIFF(Resource Interchange File Format) 文件规范的声音文件格式。如果你使用过 Adobe Audition 系列软件,会发现它们使用的默认存储格式就是 WAV。WAV 文件通常都比较大,根据其大小计算公式:
文件大小(Byte) = (取样频率 * 取样位数 * 声道) * 时间 / 8
一个10分钟 44.1k 采样频率、16位立体声音频,根据计算式:
filesize = (44.1 * 1000 * 16 * 2) * 60 * 10 / 8 = 105,840,000 Byte = 100.93689 MB
可见其实 WAV 文件是非常占用空间的,如果是一场音乐会,时长90分钟,使用24位深度,那么文件大小约为 1.31GB,故而人们尝试使用压缩算法来减小文件体积。
那么重点来了,如何压缩文件来获得更小的体积占用呢?软件算法把人耳不敏感的音频信号全部滤除,从而只留下人耳敏感的部分,这样会直接导致使用高还原度的音频播放设备时,声音出现明显的失真!
简单说来,此类算法的目的就是要去掉不必要的音频信号。所以,这一类压缩算法往往都是不可逆的,即通过压缩之后的音频文件,绝对不可能通过逆向算法还原原来的文件。
APE 音频格式经过刚才的分析,我们已经知道了为什么音频格式会出现无损和有损之分,它指的是文件压缩的时候是否会丢失精细程度,而不是相对原始声音而言(因为真实声音信号向数字信号转换时,必然有一部分信息丢失,丢失的多少,与采样率有直接关系)。那么如何证明 APE 文件格式是无损的呢?以下进行一个实验:
实验工具:
实验过程:
所以我们说 APE 是一种无损压缩。
FLAC 音频格式知道了 APE 格式,我们再来看看 FLAC 格式。
同样的工具和步骤:
第一步:生成 FLAC 文件
第二步:还原 WAV 文件
FLAC 格式因起强大的信息保全特性和较好的跨平台支持特性,广受人们的欢迎,如今不如智能化时代,设备的运算能力提升,故市面常见的播放器厂商都会对这种格式作支持。
但是值得注意的是,FLAC 格式的压缩比不高,使得文件存储时仍然需要较大的空间。同时,低圧缩比也是其相对 APE 的另一优势。APE 文件因其高压缩比而往往需要设备更强大的解码能力,在软硬件能力不足时,其流畅性会受到损伤。
多平台支持FLAC 相比 APE 的解码复杂程度要较低(解码运算量小、只需要整数运算),解码速度快,对计算硬件要求很低,在很普通的硬件上就可以轻松实现实时解码播放。所以 FLAC 是目前唯一获得广泛硬件支持的无损压缩编码,在消费领域,已经有很多移动多媒体播放器、汽车、家用音响设备支持 FLAC 格式了。
目前,APE 格式官方只提供 Windows 支持。虽然也有提供 GNU/Linux 和 macOS 平台的官方支持的讨论,但是没有结果。目前只有一位名为 SuperMMX 的开发者于2003年7月发布了一个非官方移植版本。它包括了供 XMMS 与 Beep Media Player 回放 Monkey's Audio (APE) 使用的插件。该移植支持 GNU/Linux,后续逐渐支持Mac OS X和基于 PowerPC、SPARC 平台的 GNU/Linux。但是这个非官方移植计划没有得到官方的承认,受制于官方发行许可证的限制,其未来并不明朗。不过据称 Monkey's Audio 的Win32库可以借助 wine 在 GNU/Linux 平台运行。而硬件支持方面,由于采用了浮点运算,编码解码速度慢,对硬件的要求较高,硬件支持度不如FLAC。
容错能力APE 文件的容错性很差,只要在传输过程中出现一点差错,就会让整首 APE 音乐作废。而 FLAC 文件因为每帧数据之间无关联。因此当 FLAC 文件在传播过程中受损,导致某帧数据损坏缺失的话,只会损失该帧的音频信息,不会影响到前后的数据。这是 FLAC 的优势,但也因此 FLAC 的压缩率略低。
下面附上 FLAC 官方网站的网址:Free Lossless Audio Codec
【说明】使用 APE 和 FLAC 还原 WAV 文件时,会发现文件大小有几kb的差别,这一点产生的原因目前还不能确定。所以还需对二进制文件比较来查证。