FLAC

FLAC，全称为自由无损音频压缩编码（Free Lossless Audio Codec），是一款自由音频压缩编码，其特点是可以对音频文件无损压缩。不同于其他有损压缩编码（如MP3与AAC等），压缩后不会有任何音质损失，现在已被很多软件及硬件音频产品所支持。

## 历史

FLAC项目由Josh Coalson在2000年发起并开发。FLAC位元流格式在进入FLAC 0.5版本内部测试时被冻结，2001年1月15日FLAC 0.5版本发布，做为第一个FLAC的参考实做，2001年7月20日，FLAC 1.0正式释出。

2003年1月29日，Xiph.Org基金会宣布FLAC并入旗下，连同Ogg Vorbis，Ogg Theora及Speex成为旗下的开源项目。

2013年5月26日，FLAC 1.3.0发布，并将开发转移至Xiph.org Git仓库。

2014年11月25日，FLAC 1.3.1发布。

2017年1月1日，FLAC 1.3.2发布。

2019年8月4日，FLAC 1.3.3发布，但Windows版本并未被编译为EXE格式，且在主页上的latest news处也未显示，仅在changelog中出现。

2022年2月20日，FLAC 1.3.4发布。

2022年9月9日，FLAC 1.4发布。

2025年2月11日，FLAC 1.5释出，支援多执行绪编码，以充分运用多核心处理器。

## 项目组成

FLAC项目包含：

- 音频格式
- libFLAC，一个参考的编码及解码程式库，及一个元数据界面
- libFLAC++，一个配合libFLAC的物件压缩器
- flac，一个文字界面的压缩指令，配合libFLAC以编码或解码.flac档案
- metaflac，一个命令行界面的.flac元数据编辑器
- input plugins，不同的音乐播放软件的输入插件（如Winamp、XMMS、foobar2000和musikCube）

自由指的是这个音频格式可以在不需事先授权的情况下使用（xiph.org保留了制定FLAC规格及认证相容规格的权利）。而不论是FLAC格式还是其编码及解码方法均没有任何软件专利保护，这表示整个FLAC是自由软件：libFLAC及libFLAC++的源代码是在BSD许可证下发布，而flac，metaflac及其他插件的源代码均是在GPL下发布。

在其官方的目标中，FLAC计划不鼓励开发者在其中加入任何反复制特性。

## 技术

FLAC只支持定点取样，并不支持浮点取样，这是因为它要确保没有任何约数错误以致影响音质。它能支持任何PCM位分辨率，由4至32 bits per sample皆有。它亦支持任何取样频率，由1 Hz至655,350 Hz不等，并可逐1 Hz微调。

FLAC支持很多不同的平台：大多数的Unix-like系统（包括Linux、BSD、Solaris及macOS）、Windows、BeOS及OS/2。支持这么多平台的原因是因为它是由autoconf／automake、MSVC、Watcom C及Project Builder编译的。

FLAC的技术特点如下：

- 无损压缩：被编码的音频（PCM）数据没有任何信息损失，解码输出的音频与编码器的输入的每一个字节都是一样的。每个数据帧都有一个当前帧的16-bit CRC校验码，用于监测数据传输错误。对整段音频数据，在文件头中还保存有一个针对原始未压缩音频数据的MD5标记，用于在解码和测试时对数据进行校验。
- 灵活的压缩策略：与libflac使用是“质量”的参数，该参数变化从0（最快）至8（最小）。虽然在压缩过程（压缩文件总是完美的“无损”表示的原始数据）。涉及速度和容量之间的折衷，解码过程中始终是相当快的，而不是非常依赖于压缩
- 快速：FLAC更看重解码的速度。解码只需要整数运算，并且相对于大多数编码方式而言，对计算速度要求很低。在很普通的硬件上就可以轻松实现实时解码。
- 硬件支持：由于FLAC提供了免费的解码范例，而且解码的复杂程度低，所以FLAC是目前少数获得硬件支持的无损压缩编码之一。（APE格式也有少数硬件支持）
- 可以流化：FLAC的每个数据帧都包含了解码所需的全部信息。解码当前帧无需参照它前面或后面的数据帧。FLAC使用了同步代码和CRC（类似于MPEG等编码格式），这样解码器在数据流中跳跃定位时可以有最小的时间延迟。
- 可以定位：FLAC支持快速采样精确定位。这不仅对于播放有益，更使得FLAC文件便于编辑。
- 富于弹性的metadata：可以定义和实现新类型的metadata数据块，而不会影响旧的数据流和解码器的使用。目前已有的metadata类型包括tag，cue表，和定位表。已经注册的应用程序可以定义自己专用的metadata类型（这一点与MIDI标准相似）。
- 非常适合于存档应用：FLAC是一个开放的编码格式，并且没有任何数据的损失，你可以将它转换为你需要的任何其他格式。除了每个数据帧的CRC和MD5标记对数据完整性的保障，flac（FLAC项目提供的命令行方式编码工具）还提供了一个verify（校验）选项，当使用该选项进行编码的时候，编码的同时就会立即对已编码数据进行解码并与原始输入数据进行比较，一旦发现不同就会退出并且报警提示。
- 便于对CD进行备份：FLAC有一个cue表，表内的metadata数据块用于保存CD的内容列表和所有音轨的索引点。你可以将一张CD保存到一个单一文件，并导入CD的cue表格，这样一个FLAC文件就可以完整地记录整张CD的全部信息。当你的原来的CD损坏的时候，你就可以用这个文件恢复出与原来一模一样的CD副本。
- 抗损伤：由于FLAC的帧结构，当数据流损坏时，数据损失会被限制在受损的数据帧之内。一般只会丢失很短的一个片段。而很多其他无损音频压缩格式在遇到损坏时，一个损坏就会造成后面所有数据丢失。

## 比较

FLAC与其他无损压缩式，如ZIP及gzip的主要分别在于FLAC可即时播放已压缩的音频资料，而且FLAC比ZIP这类无损压缩格式有更高的压缩比率。（FLAC在压缩音乐时有大约五成压缩率，但ZIP在同一情况下则只有一至两成压缩率。）

虽然有损压缩格式如MP3，Opus等有更高的压缩率，但它们会破坏了音频的原来数据，使其不可变回原来音质，而且FLAC可自由选择压缩率及压缩时间，较高的压缩率会带来较高的解压缩时间。相比起其他无损压缩格式如Monkey's Audio（拓展名为.APE）及Shorten，虽然压缩率稍有不及Monkey's Audio，FLAC技术更先进，占用资源更低，而且是开放的，所以，更多的平台及硬件产品支持FLAC。

在Hydrogenaudio维基有一个各类无损音频压缩的比较表，里面包括了FLAC格式。

## 外部链接

- https://xiph.org/flac/
- etree.org维基
- FLAC项目主页 (旧)
- 支持FLAC的音乐播放程式列表由推广FLAC计划组织所编写。
- FLAC与其他无损音频格式比较列表
- Speek的无损音频及有损音频格式比较列表：比较FLAC、Wave、Ogg Vorbis及MP3格式的压缩率及时间。
- 无损压缩格式的比较列表由Hans Heiden所制作
- 无损音频压缩日志

## 基本资料

- 日语原文：Free Lossless Audio Codec
- 说明：Free Lossless Audio Codec（FLAC）的徽标
- 开发者：Xiph.Org基金会、Josh Coalson
- 发行日期：2001年7月20日
- 操作系统：跨平台
- 编程语言：C、C++
- 类型：编解码器、音频文件格式
- 许可协议：命令界面工具：GNU GPL、运行库（libraries）: BSD授权条款
- 扩展名：.flac
- mime：audio/x-flac
- 类型：音频编码
- 作为容器：音频
- 免费在线档案：是