FLAC格式

無損音頻壓縮編碼

FLAC即是Free Lossless Audio Codec的縮寫,中文可解為無損音頻壓縮編碼。FLAC是一套著名的自由音頻壓縮編碼,其特點是無損壓縮。不同於其他有損壓縮編碼如MP3及WMA(9.0版本支持無損壓縮),它不會破壞任何原有的音頻信息,所以可以還原音樂光碟音質。現在它已被很多軟體及硬體音頻產品所支持。在2003年1月29日,Xiphophorus(現在稱為 Xiph.Org基金會)宣布FLAC併入旗下,連同Ogg Vorbis,Ogg Theora及Speex成為旗下的開源產品。

簡介


免費的無損音頻壓縮。簡而言之,FLAC與MP3相仿,但是是無損壓縮的,也就是說音頻以FLAC方式壓縮不會丟失任何信息。這種壓縮與Zip的方式類似,但是FLAC將給你更大的壓縮比率,因為FLAC是專門針對音頻的特點設計的壓縮方式,並且你可以使用播放器播放FLAC壓縮的文件,就象通常播放你的MP3文件一樣(現在已經有許多汽車播放器和家用音響設備支持FLAC,在FLAC的網站上你可以找到這些設備廠家的連接)。
FLAC是免費的並且支持大多數的操作系統,包括Windows, " unix" (Linux, *BSD, Solaris, OS X, IRIX), BeOS, OS/2, 和Amiga。並且FLAC提供了在開發工具autotools, MSVC, Watcom C, 和Project Builder上的build系統。
FLAC項目包括以下幾個方面:數據流的格式以庫的形式提供的參考編碼器和解碼器flac,一個以命令行方式工作的可以編解碼FLAC文件的程序(譯註:有些象Lame吧?)metaflac,以命令行方式工作的FLAC文件的metadata編輯器不同音頻播放器的輸入插件
我們所說的“FLAC是免費的”不僅僅意味著你可以不花錢而得到它。更重要的是FLAC的文件格式是對公眾完全開放的,你可以以任何目的使用它(FLAC項目只保留維護FLAC格式規格和確認兼容特性的權利),FLAC的文件格式和編碼/解碼的實現方式都不受任何已知專利的限制。還有,所有的源代碼都在開放源代碼的授權方式下可以得到。FLAC是世界上第一個完全開放和免費的無損音頻壓縮格式。
FLAC格式
FLAC格式

目標


FLAC計劃包括有:
音頻格式libFLAC,一個參考的編碼及解碼程序庫,及一個元數據介面libFLAC++,一個配合libFLAC的對象壓縮器flac,一個文字介面的壓縮指令,配合libFLAC以編碼或解碼.flac文件metaflac,一個文字介面的.flac元數據編輯器input plugins,不同的音樂播放軟體的輸入插件(如Winamp,XMMS,foobar2000,musikCube)自由指的是這個音頻格式可以在不需事先授權的情況下使用(xiph.org保留了制定FLA規格及認證兼容規格的權利)。而不論是FLAC格式還是其編碼及解碼方法均沒有任何軟體專利保護,這表示整個FLAC是自由軟體:libFLAC及 libFLAC++的源代碼是在BSD許可證下發布,而flac,metaflac及其他插件的源代碼均是在GPL下發布。
在其官方的目標中,FLAC計劃鼓勵開發者不要加入任何防複製特性於其中。

特性


優點

無損失壓縮:被編碼的音頻(PCM)數據沒有任何信息損失,解碼輸出的音頻與編碼器的輸入的每一個位元組都是一樣的。每個數據幀都有一個當前幀的16-bit CRC校驗碼,用於監測數據傳輸錯誤。對整段音頻數據,在文件頭中還保存有一個針對原始未壓縮音頻數據的MD5標記,用於在解碼和測試時對數據進行校驗。
快速:FLAC更看重解碼的速度。解碼只需要整數運算,並且相對於大多數編碼方式而言,對計算速度要求很低。在很普通的硬體上就可以輕鬆實現實時解碼。
硬體支持:由於FLAC提供了免費的解碼範例,而且解碼的複雜程度低,所以FLAC是目前唯一獲得硬體支持的無損壓縮編碼。
可以流化: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是專門並且僅僅為無損壓縮而設計的,您可以選用許多其他優秀的有損壓縮方式如Vorbis,MPC, 和MP3(LAME提供了一個優秀的開放源代碼的實現)。
SDMI(例如cetera)兼容。FLAC不準備支持任何複製保護方法,實際上這些手段最終都是在浪費數據。(從另一個角度看,由於所有這些手段最終都被證明是無效的,所以也可以說FLAC把這些無用數據壓縮到了零!)當然我們不能阻止某些人利用專用的metablock進行複製保護,但是他們的保護只會在他們自己解碼產品上有效,其他解碼器會跳過這些專門的metablock的。

技術


FLAC只支持定點取樣,並不支持浮點取樣,這是因為它要確保沒有任何約束錯誤以致影響音質。它能支持任何PCM位解析度,由4至32bits per sample皆有。它不支持任何採樣率,由 1 Hz 至 655,350 Hz不等,並可逐1Hz微調。
FLAC支持很多不同的平台:大多數的Unix-like系統(包括Linux,*BSD,Solaris及 Mac OS X),Windows, BeOS及OS/2。支持這麼多平台的原因是因為它是由autoconf/automake、MSVC、Watcom C及Project Builder編譯的。

比較


FLAC與其他無損壓縮式如ZIP及gzip的主要分別在於FLAC可實時播放已壓縮的音頻數據。而且FLAC比ZIP這類無損壓縮格式有更高的壓縮比率。(FLAC在壓縮音樂光碟時有大約五成壓縮率,但ZIP在同一情況下則只有一至兩成壓縮率。)
雖然有損壓縮格式如mp3,ogg等有更高的壓縮率,但它們會破壞了音頻的原來數據,使其不可變回原來音質。而且FLAC可自由選擇壓縮率及壓縮時間,當然兩者是成正比的。
相比起其他無損壓縮格式如Monkey's Audio(拓展名為.APE)及Shorten,FLAC技術更先進,佔用資源更低,雖然壓縮率稍有不及Monkey's Audio,所以,更多的平台及硬體產品支持FLAC,可惜到了Flac 1.2.1b仍然不支持中文名稱文件和路徑的編碼和解碼,目前在中國大陸Monkey's Audio更為流行。
FLAC同時亦是保存音樂光碟於計算機中的最佳方法之一,因為其不會破壞音頻原始數據,所以FLAC是可以再轉迴音樂光碟並保留原來的音質。而且可以有效對抗文件損壞。
在Hydrogenaudio維基有一個各類無損音頻壓縮得比較表,內里包括了FLAC。