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發行版執行以下指令來安裝:

sudo apt install flac

基於紅帽的Linux發行版執行以下指令來安裝:

sudo dnf install flac

FLAC 使用方法

FLAC自帶文件

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

flac --help

linux-flac

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的最大壓縮設定來壓縮的話,壓縮出來的檔案為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檔案差不多。

FLAC轉PCM(WAV)

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

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

FLAC與其他解碼器合作

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

APE(MAC)轉FLAC

APE(或是MAC)為Monkey's Audio的格式,在Linux上如果要進行解碼,得使用以下的非官方套件(基於Debian的Linux發行版):

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

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

ALAC轉FLAC

必須要先有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