自由無損音頻编解码器

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 只會無損保存已經解碼的結果,不能恢復原碼流捨棄的內容;文件體積增大也不構成來源為無損母帶的證明。校驗值能夠發現數據變化,卻不能判斷錄音、母帶或先前處理是否真實。