M4A是封裝於MPEG4,使用AAC(進階音訊編碼, Advanced Audio Coding)格式壓縮的音訊檔案。若拿相同大小的MP3和AAC格式的音樂檔案來比較,AAC的音質通常會比MP3還要來得好。AAC的取樣精度最高可到32位元,MP3則只有16位元;AAC的取樣頻率最高可以達到96kHz,MP3則只有48kHz。因此現在愈來愈多做線上音樂的廠商,直接將音樂專輯的母片轉成AAC格式的M4A檔案來賣,有的音質甚至還勝於直接從CD轉出來的WAV。在Linux系統上如果要將音樂檔案轉成M4A格式,可以使用FAAC來輕易達成。FAAC官方沒有提供圖形化介面,需要透過Command Line指令來操作FAAC,控制音樂檔案的輸出品質。



FAAC的輸出品質可以直接從音樂檔案的頻譜看出來,可以參閱這篇文章來學習如何判斷音樂檔案的音質。

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

AAC、M4A、MP4到底有什麼不一樣?

AAC是編碼格式,屬於MPEG2的技術。M4A、MP4都是MPEG4標準下的檔案封裝格式,MP4包含了視訊與音訊,M4A則只有音訊而已。MPEG2的AAC若要用在MPEG4,則需要封裝成MPEG4的AAC,才能夠在MP4和M4A等檔案格式上使用。

以下均以Linux Mint為例。

安裝FAAC

參考以下文章連結,安裝支援MPEG4(MP4)的FAAC。

FAAC 使用方法

FAAC自帶文件

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

faac --help

linux-faac-2

從上圖中可以看到FAAC可以設定的參數實在是太多了,真是令人眼花撩亂,但其實我們只要會使用「-q」參數就已經足夠應付大部分的狀況。

FAAC快速調整聲音輸出品質(-q參數)

FAAC的參數系統可能會使得使用者難以調整,再加上AAC本身就又區分好幾種不同的格式,因此會造成AAC很難駕馭的情形。常用的AAC格式為LC-AAC(Low Complexity AAC),FAAC在Command Line模式下也只能支援LC模式。FAAC提供了一個能牽一髮動全身的參數,那就是「-q」,只要調整這個值的大小,就可以影響輸出的採樣率、位元率、頻寬,這個值的範圍是「10~5000」,愈大音質愈高。以下將會以擁有CD音質的WAV檔案(約39.6MB)來使用不同的「-q」參數值實際轉檔測試。在開始進行轉檔之前,一定要先知道AAC格式並沒有真正的CBR(固定位元率, Constant Bitrate),絕大部分都是使用VBR(變動位元率, Variable Bitrate)來進行編碼。如果在哪見到CBR的AAC,那可要小心它是否遭到灌水了。

先來看看WAV檔的頻譜:

linux-faac-2

-q 700

將參數「-q」設置為700,可以輸出非常接近原始音質的檔案。

將測試用的WAV檔用「-q 700」轉換後,得到大小約為9.0MB的M4A檔案,變動位元率平均為318kbps,頻譜如下:

linux-faac-2

從上圖可以發現將WAV轉換成「-q 700」的M4A後,頻譜幾乎沒有任何改變,檔案大小卻小了四到五倍!

-q 500

將參數「-q」設置為500,可以輸出較小但是保有原始音質的檔案。

將測試用的WAV檔用「-q 500」轉換後,得到大小約為8.1MB的M4A檔案,變動位元率平均為286kbps,頻譜如下:

linux-faac-2

從上圖可以發現將WAV轉換成「-q 500」的M4A後,頻譜也幾乎沒有任何改變,檔案大小卻小了將近五倍!

-q 300

將參數「-q」設置為300,可以輸出較小但是保有原始音質的檔案。

將測試用的WAV檔用「-q 300」轉換後,得到大小約為6.7MB的M4A檔案,變動位元率平均為237kbps,頻譜如下:

linux-faac-2

從上圖可以發現將WAV轉換成「-q 300」的M4A後,頻譜也是幾乎沒有任何改變,檔案大小卻小了將近六倍!

-q 150

將參數「-q」設置為150,可以輸出品質以及大小較平衡的檔案。

將測試用的WAV檔用「-q 150」轉換後,得到大小約為5.0MB的M4A檔案,變動位元率平均為178kbps,頻譜如下:

linux-faac-2

從上圖可以發現將WAV轉換成「-q 150」的M4A後,頻譜有了一點點的改變,音質幾乎沒有受太大的影響,檔案大小卻小了將近八倍!

-q 100

將參數「-q」設置為100,可以輸出品質一般,但大小較小的檔案。

將測試用的WAV檔用「-q 100」轉換後,得到大小約為3.5MB的M4A檔案,變動位元率平均為124kbps,頻譜如下:

linux-faac-2

從上圖可以發現將WAV轉換成「-q 100」的M4A後,頻譜有了很大的改變,16kHz以上的訊號完全被過濾掉,音質受到了很大的影響。

使用-q參數來轉檔

根據以上四種不同「-q」參數值的測試,「-q 100」是不用考慮的項目,用它轉換出來的M4A檔案大小和使用「-q 150」轉換出來的M4A檔案大小差不多,卻可以明顯聽出音質差異。所以說,如果有檔案傳輸需求的話,「-q 150」絕對是首選,而聽起來和「-q 300」幾乎一樣的「-q 500」和「-q 700」則完全不用考慮。如果是要收藏音樂的話,「-q 300」是首選。當然,如果有高位元率情節的話,還是可以用「-q 700」來收藏音樂,只是會多花三到四成左右的儲存空間。

如果我們要使用「-q 300」進行轉檔,可以使用以下指令:

faac -q 300 -o 輸出檔案路徑 輸入檔案路徑

FAAC與其他解碼器合作

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

FLAC轉M4A

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

sudo apt-get install flac

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

flac -c -d 輸入檔案路徑 | faac -q 300 -o 輸出檔案路徑 -

flac的-c參數表示將輸出改成stdout(同-o -),-d參數表示要進行解碼(decode)。

APE(MAC)轉M4A

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

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

mac 輸入檔案路徑 - -d | faac -q 300 -o 輸出檔案路徑 -

mac的-d參數表示要進行解碼(decode)。

Ogg轉M4A

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

sudo apt-get install vorbis-tools

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

oggdec 輸入檔案路徑 -o "./oggtemp.wav" ; faac -q 300 -o 輸出檔案路徑 "./oggtemp.wav" ; rm "./oggtemp.wav"

經實測,oggdec無法直接透過標準輸入輸出串流與FAAC正常溝通,因此中間使用了「oggtemp.wav」作為轉檔過程中的暫存檔。

Opus轉M4A

必須要先有opus-tools套件,可以使用以下指令來安裝:
sudo apt-get install opus-tools
使用以下指令可以將Opus格式的音樂檔案轉成M4A音樂檔:
opusdec --force-wav 輸入檔案路徑 - | faac -q 300 -o 輸出檔案路徑 -

MP3轉M4A

這很明顯是用音質較差的聲音來源(MP3)包裝成看起來音質較高的檔案格式(M4A),沒有意義。