自由无损音频编解码器

FLAC

音频编码

一种开放的无损音频编码与文件格式,通过预测和残差编码减小 PCM 数据体积,并能在解码后恢复原始采样。

详细说明

FLAC(Free Lossless Audio Codec,自由无损音频编解码器)是一种面向数字音频的开放无损编码格式,由 Josh Coalson 发起,参考实现于 2001 年首次发布,后来由 Xiph.Org 维护。FLAC 的码流规范现由 RFC 9639 完整描述。它既指音频编码方法,也指原生 `.flac` 文件所采用的码流和元数据结构。

无损意味着解码后的 PCM 采样与编码器输入一致,不表示文件没有压缩。FLAC 把音频划分为帧和子帧,对每个声道选择常量、逐字保存、固定预测或线性预测等方式,再以 Rice 编码保存预测残差。立体声还可使用左右、中侧或差分声道分配减少通道间冗余。编码级别主要改变预测搜索、分块与压缩耗时,不应改变正确解码后的音频数据。

原生码流以 `fLaC` 标识开始,随后是必需的 STREAMINFO 块、可选元数据块和音频帧。STREAMINFO 保存采样率、声道数、有效位数、总样本数等信息,并可包含未压缩音频的 MD5 校验值;其他块可承载 Vorbis Comment 标签、封面图、索引点、CUE Sheet 和填充空间。帧本身具有同步与校验信息,便于流式解码和一定程度的错误定位。

FLAC 不是 WAVE 或 ZIP 的别名。WAVE 是可封装 PCM 或其他编码的 RIFF 文件,FLAC 则针对音频样本建立预测模型;通用压缩器通常难以利用音频的连续相关性。FLAC 也可以映射进 Ogg 或 Matroska 容器,此时文件组织与原生 `.flac` 不同,内部音频仍按 FLAC 规则解码。

重新以不同压缩级别编码无损 FLAC,可以在不改变采样数据的情况下改变文件大小和编码速度。把 MP3、AAC 等有损来源转换为 FLAC 只会无损保存已经解码的结果,不能恢复原码流舍弃的内容;文件体积增大也不构成来源为无损母带的证明。校验值能够发现数据变化,却不能判断录音、母带或先前处理是否真实。