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
- 類型：音訊編碼
- 作為容器：音訊
- 免費在線檔案：是