FLAC(Free Lossless Audio Codec)是一種音訊無損壓縮(Lossless Compression)的編碼格式,有別於AAC或MP3等等的有損壓縮(Lossy Compression),採用FLAC編碼(Encode)之音訊的音質並不會有任何的損失,經過解碼(Decode)後能還原出原始的訊號。FLAC編碼/解碼(壓縮/解壓縮)的速度不算慢,可以將原始未壓縮的音訊縮小至先前一半左右的大小,並能在多種軟硬體環境下直接播放,支援最高32位元的取樣位元深度和任意的取樣頻率,是目前最流行的無損壓縮格式。相較於Monkey's Audio的APE無損壓縮格式,FLAC雖然在壓縮率上略為遜色,但它在播放時所耗用的CPU資源較小,同時也因其是開源格式的關係,許多產品都有支援。



在繼續瞭解FLAC之前,您必須要先知道FLAC「只是」FLAC的編/解碼器,它不能夠將FLAC格式的音樂檔案轉換成其他編碼的格式。而且,在一般情形下(無自帶額外解碼器),FLAC的編碼器只能夠讀取PCM(WAV)格式,如果要將其他格式的檔案轉成FLAC(例如APE轉成FLAC),必須配合其他工具一起使用才行!

取得並安裝FLAC

如果是使用基於Debian的Linux發行版,可以使用以下指令,直接安裝FLAC:

sudo apt-get install flac

編譯FLAC For Linux

如果想手動編譯安裝FLAC,可以參考這部份的步驟。

編譯環境:Linux Mint 17 MATE

取得FLAC

FLAC的原始碼可以直接在FLAC的官方網站上取得:

產生「configure」檔案

若是在FLAC原始碼根目錄找不到「configure」檔案,就需要自己產生出來。

在終端機執行「autogen.sh」檔,指令如下:

./autogen.sh

配置FLAC

使用以下指令執行「configure」檔案。

./configure

編譯與安裝FLAC

使用以下指令編譯FLAC:

make

FLAC編譯成功後,可以使用以下指令來安裝:

sudo make install

安裝好自己編譯的FLAC之後,可以直接在終端機下輸入「flac」,檢查FLAC是否已經安裝成功。

FLAC 使用方法

FLAC自帶文件

安裝好FLAC後,在終端機下輸入以下指令,可以查看FLAC的用法:

flac --help

PCM(WAV)轉FLAC

將PCM(WAV)檔案轉成FLAC格式檔案的方式十分簡單,指令格式如下:

flac -o 輸出檔案路徑 輸入檔案路徑

FLAC調整輸出的壓縮等級

FLAC雖然是無損壓縮,但它也可以在編碼時設定不同的壓縮等級(Compression Level),來控制壓縮程度。不管檔案被壓縮的多小,FLAC依然是屬於無損壓縮,這點非常重要哦!檔案大小的差異僅在於,被壓縮得愈小的FLAC檔案,在解碼(解壓縮)的時候愈需要更多的CPU資源來還原訊號。壓縮等級由數字來表示,範圍是0~8,數字愈大壓得愈小,預設值是5。如果要調整FLAC的壓縮等級,可以在編碼的參數加上「--compression-level-#」或是「-#」。如以下指令,可以編碼出最小的FLAC檔案:

flac -8 -o 輸出檔案路徑 輸入檔案路徑

FLAC的壓縮效果還算不錯,這裡拿一個長度為3分48秒,取樣位元深度為24位元,取樣頻率為96kHz的WAV檔案來舉例。

原始的WAV檔案大小為131.6MB。使用預設的壓縮等級(-5)編碼出來的FLAC檔案,大小為69.9MB,幾乎快小了一半了。如果我們參考這篇文章,使用rar的最大壓縮(-ma5 -m5)設定來壓縮的話,壓縮出來的檔案為89.3MB,比FLAC還要大很多,而且還不能像FLAC一樣能直接被播放出來。因此如果您有保存音樂原始音質的嗜好的話,建議直接將原始訊號來源轉成FLAC格式,而不要直接使用一般的檔案壓縮格式。

使用FLAC最低的壓縮等級(-0)編碼出來的FLAC檔案,大小為71.9MB,比預設的大了一些。使用FLAC最高的壓縮等級(-8)編碼出來的FLAC檔案,大小為69.5MB,只比預設的小了一點點。在絕大多數的情況下,使用預設的壓縮等級是最平衡的作法,檔案既不會太大,也不會耗用太多的CPU資源。

將這個WAV用APE的最大壓縮設定編碼出來的APE檔案,檔案大小為66.3MB,比使用FLAC最高壓縮等級編碼出來的FLAC檔案大小還要小了不少,相對地,在解碼時APE會比FLAC還需要更多的CPU資源。將這個WAV用用ALAC(Apple Lossless Audio Codec)格式編碼出來的ALAC檔案,檔案大小為71.6MB,與FLAC檔案差不多。

參考這篇文章將這個WAV檔案用不同的「-q」參數進行編碼。使用「-q 300」編碼出來的AAC檔案,大小為10.2MB,雖然經過有損壓縮,但AAC檔案的音質幾乎等於原本的WAV檔案,檔案大小也比使用FLAC最高壓縮等級編碼出來的FLAC檔案大小要小了好幾倍。即便使用FAAC品質最好的「-q 500」參數,編碼出來的AAC檔案,大小也才13.4MB,遠遠小於FLAC檔案。就實用性來說,還是AAC格式比較好啦!但FLAC比AAC還要有收藏價值,原汁原味的總是讓人比較安心。

FLAC轉PCM(WAV)

將FLAC格式檔案轉成PCM(WAV)檔案的方式十分簡單,多加個「-d」(decode)參數即可,指令格式如下:

flac -d -o 輸出檔案路徑 輸入檔案路徑

FLAC與其他解碼器合作

由於FLAC所支援的輸入格式有限,因此常會與其他解碼器一同工作,利用外部的解碼器將特殊格式的音樂檔進行解碼,再將解碼結果傳給FLAC進行格式轉換的工作。在終端機預設的bash script下可以使用「|」字元將兩個指令隔開在同一行中。字元「|」左邊的指令輸出到標準輸出串流(stdout)中的資料,會成為字元「|」右邊指令的標準輸入串流(stdin)。使用「-」字元可以指定要使用標準輸入/輸出串流的參數位置。

APE(MAC)轉FLAC

APE(或是MAC)為Monkey's Audio的格式,由於官方政策的關係,在Linux上如果要進行解碼,只能使用以下的非官方套件:

使用以下指令可以將APE(或是MAC)格式的音樂檔案轉成FLAC音樂檔:

mac 輸入檔案路徑 - -d | flac -o 輸出檔案路徑 -

ALAC轉FLAC

必須要先有FFmpeg套件,可以使用以下指令來安裝:

sudo apt-get install ffmpeg

使用以下指令可以將ALAC格式的音樂檔案轉成FLAC音樂檔:

ffmpeg -i 輸入檔案路徑 -acodec pcm_s24le -f wav "./alactemp.wav" ; flac -o 輸出檔案路徑 "./alactemp.wav" ; rm "./alactemp.wav"

經實測,FFmpeg無法直接透過標準輸入輸出串流與FLAC正常溝通,因此中間使用了「alactemp.wav」作為轉檔過程中的暫存檔。另外,FFmpeg需使用「-acodec」來指定輸出編碼格式,如果想使用24位元的取樣位元深度,就使用「pcm_s24le」;如果想使用16位元的取樣位元深度,就使用「pcm_s16le」。