Flac

**FLAC**（發音： /ˈflæk/；全稱：**F**ree **L**ossless **A**udio **C**odec），中文直譯為**自由無損音訊壓縮編碼**（註：這裡「_Free_」指的是**無音質損失** —— 而並不是**免費**）。FLAC 是一款的自由音訊壓縮編碼，其特點是可以對音訊檔無失真壓縮。不同於其他有損壓縮編碼（如 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 釋出。

## 專案組成

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 及 Mac OS X），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 格式。

## 參見

* Monkey's Audio
* 音訊編碼格式的比較
* 無失真資料壓縮

## 註解

## 外部連結

* etree.org 維基（頁面存檔備份，存於網際網路檔案館）
* FLAC 專案主頁 (舊)（頁面存檔備份，存於網際網路檔案館）
* FLAC 專案主頁（頁面存檔備份，存於網際網路檔案館）
* 支援 FLAC 的音樂播放程式列表（頁面存檔備份，存於網際網路檔案館）由推廣 FLAC 計劃組織所編寫。
* FLAC 與其他無損音訊格式比較列表
* Speek 的無損音訊及有損音訊格式比較列表（頁面存檔備份，存於網際網路檔案館）：比較 FLAC, Wave, Ogg Vorbis 及 MP3 格式的壓縮率及時間。
* 無失真壓縮格式的比較列表由 Hans Heiden 所製作
* 無損音訊壓縮日誌（頁面存檔備份，存於網際網路檔案館）