M4A是封裝於MPEG4,使用AAC(進階音訊編碼, Advanced Audio Coding)格式壓縮的音訊檔案。若拿相同大小的MP3和AAC格式的音樂檔案來比較,AAC的音質通常會比MP3還要來得好。在低位元率下,HE-AAC和HE-AACv2的音質遠勝於MP3。AAC的取樣精度最高可到32位元,MP3則只有16位元;AAC的取樣頻率最高可以達到96kHz,MP3則只有48kHz。因此現在愈來愈多做線上音樂的廠商,直接將音樂專輯的母片轉成AAC格式的M4A檔案來賣,有的音質甚至還勝於直接從CD轉出來16位元、44.1kHz的WAV。在Linux系統上如果要將音樂檔案轉成M4A格式,雖然可以使用FAAC來輕易達成,但FAAC只支援AAC-LC,若要使用HE-AAC或是HE-AACv2,可以使用FDK AAC來進行編碼。
FDK AAC的輸出品質可以直接從音樂檔案的頻譜看出來,可以參閱這篇文章來學習如何判斷音樂檔案的音質。
如果只是要轉成AAC而非HE-AAC或是HE-AACv2格式的話,筆者比較建議使用FAAC,可參考這篇文章。
在繼續瞭解FDK AAC之前,您必須要先知道FDK AAC「只是」AAC編碼器,它不能夠將AAC格式的音樂檔案轉換成其他的格式。而且,在一般情形下(無自帶額外解碼器),FDK AAC只能夠讀取RAW PCM(WAV)格式,如果要將其它格式的檔案轉成M4A(例如FLAC轉成M4A),必須配合其它工具一起使用才行!
AAC、HE-AAC、HE-AACv2、M4A、MP4到底有什麼不一樣?
AAC是編碼格式,屬於MPEG2的技術。HE-AAC(High-Efficiency AAC)是AAC加上SBR(Spectral Band Replication),用於低位元率的編碼格式,HE-AACv2是AAC加上SBR和PS(Parametric Stereo),用於更低位元率的編碼格式,兩者都屬於MPEG4的技術。M4A、MP4都是MPEG4標準下的檔案封裝格式,MP4包含了視訊與音訊,M4A則只有音訊而已。MPEG2的AAC若要用在MPEG4,則需要封裝成MPEG4的AAC,才能夠在MP4和M4A等檔案格式上使用。
以下均以Linux Mint為例。
安裝FDK AAC
參考以下文章連結,安裝FDK AAC。
FDK AAC 使用方法
fdkaac自帶文件
安裝好FDK AAC(libfdk-aac和fdkaac)後,在終端機下輸入以下指令,可以查看fdkaac的用法:
從上圖中可以看到fdkaac可以設定的參數十分多樣,但其實我們只要會使用「-p」和「-m」參數就已經足夠應付大部分的狀況。
fdkaac快速調整聲音輸出格式和品質(-p和-m參數)
根據fdkaac自帶的文件,我們可以知道fdkaac支援八種AAC規格(Profile),分別是MPEG-4 AAC LC、MPEG-4 HE-AAC、MPEG-4 HE-AAC v2、MPEG-4 AAC LD、MPEG-4 AAC ELD、MPEG-2 AAC LC、MPEG-2 HE-AAC、MPEG-2 HE-AAC v2。在這篇文章中我們是要轉出M4A格式的檔案,因此是使用MPEG4的封裝方式。MPEG4的AAC也分為好幾種,一般我們所說的AAC,其實就是指AAC-LC(低複雜度, Low Complexity),其餘的都是後來AAC的變化版本。HE(高效能, High-Efficiency)可在低位元率下保持原音質,節省許多檔案佔用空間;LD(低延遲, Low Delay)和ELD(增強低延遲, Enhanced Low Delay)適合用於即時(Real-Time)的網路語音傳輸。調整fdkaac輸出的AAC規格,可使用「-p」參數,在本篇文章中將會使用到2(MPEG-4 AAC LC)、5(MPEG-4 HE-AAC)和29(MPEG-4 HE-AAC v2)。選定AAC的輸出規格後,可以使用「-m」參數來調整輸出的採樣率、變動位元率、頻寬、通道,這個值的範圍是「1~5」,愈大音質愈高。以下將會以擁有高於CD音質的WAV檔案(16bit, 48000Hz, 約41.6MB)來使用不同的「-p」和「-m」參數值實際轉檔測試。
先來看看WAV檔的頻譜:
-p 2 -m 5
設定「-p 2 -m 5」,可以輸出fdkaac能夠支援AAC變動位元率的最高音質。
將測試用的WAV檔用「-p 2 -m 5」轉換後,得到大小約為7.0MB的M4A檔案,變動位元率平均為258kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 2 -m 5」的M4A後,頻譜在20.5kHz以上有了明顯的改變,在20.5kHz以下的改變則不明顯,音質和原始WAV檔案無異,檔案大小卻小了將近六倍!
-p 2 -m 4
將測試用的WAV檔用「-p 2 -m 4」轉換後,得到大小約為3.8MB的M4A檔案,變動位元率平均為138kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 2 -m 4」的M4A後,15.6kHz以上的頻率完全被過濾掉,在15.6kHz以下的頻率也有些微的改變,音質已經受到很大的影響。
-p 2 -m 3
將測試用的WAV檔用「-p 2 -m 3」轉換後,得到大小約為3.2MB的M4A檔案,變動位元率平均為116kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 2 -m 3」的M4A後,14.3kHz以上的頻率完全被過濾掉,在14.3kHz以下的頻率也有些微的改變,音質受到很大的影響。
-p 2 -m 2
將測試用的WAV檔用「-p 2 -m 2」轉換後,得到大小約為2.8MB的M4A檔案,變動位元率平均為102kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 2 -m 2」的M4A後,13.2kHz以上的頻率完全被過濾掉,在13.2kHz以下的頻率也有些微的改變,音質受到非常大的影響。
-p 2 -m 1
將測試用的WAV檔用「-p 2 -m 1」轉換後,得到大小約為2.6MB的M4A檔案,變動位元率平均為95kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 2 -m 1」的M4A後,13.2kHz以上的頻率完全被過濾掉,在13.2kHz以下的頻率有了明顯的改變,音質受到非常大的影響。
-p 5 -m 5
設定「-p 5 -m 5」,可以輸出fdkaac能夠支援HE-AAC變動位元率的最高音質。
將測試用的WAV檔用「-p 5 -m 5」轉換後,得到大小約為3.3MB的M4A檔案,變動位元率平均為120kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 5 -m 5」的M4A後,22.2kHz以上的頻率完全被過濾掉,10kHz到22.2kHz的頻譜形狀改變劇烈,在10kHz以下的頻率改變則不明顯。音質和原始WAV檔案相比雖有很大的差異,但也還可以接受,檔案大小卻小了十二到十三倍!
-p 5 -m 4
將測試用的WAV檔用「-p 5 -m 4」轉換後,得到大小約為2.6MB的M4A檔案,變動位元率平均為95kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 5 -m 4」的M4A後,22.2kHz以上的頻率完全被過濾掉,10kHz到22.2kHz的頻譜形狀改變劇烈,在10kHz以下的頻率改變則不明顯,頻譜和「-p 5 -m 5」轉出來的結果差異不大。音質和原始WAV檔案相比雖有很大的差異,但也還可以接受,檔案大小卻小了十六倍!
-p 5 -m 3
將測試用的WAV檔用「-p 5 -m 3」轉換後,得到大小約為2.3MB的M4A檔案,變動位元率平均為84kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 5 -m 3」的M4A後,22.2kHz以上的頻率完全被過濾掉,10kHz到22.2kHz的頻譜形狀改變劇烈,在10kHz以下的頻率改變則不明顯,頻譜和「-p 5 -m 3」轉出來的結果差異不大。音質和原始WAV檔案相比雖有很大的差異,但也還可以接受,檔案大小卻小了十八倍到十九倍!
-p 5 -m 2
將測試用的WAV檔用「-p 5 -m 2」轉換後,得到大小約為2.1MB的M4A檔案,變動位元率平均為78kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 5 -m 2」的M4A後,22.2kHz以上的頻率完全被過濾掉,10kHz到22.2kHz的頻譜形狀改變劇烈,在10kHz以下的頻率改變則不明顯,頻譜和「-p 5 -m 2」轉出來的結果差異不大。音質和原始WAV檔案相比雖有很大的差異,但也還可以接受,檔案大小卻小了十九倍到二十倍!
-p 5 -m 1
將測試用的WAV檔用「-p 5 -m 1」轉換後,得到大小約為1.4MB的M4A檔案,變動位元率平均為51kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 5 -m 1」的M4A後,17kHz以上的頻率完全被過濾掉,6kHz到17kHz的頻譜形狀改變劇烈,在6kHz以下的頻率改變則不明顯。音質聽起來很差。
-p 29 -m 5
設定「-p 29 -m 5」,可以輸出fdkaac能夠支援HE-AACv2變動位元率的最高音質。
將測試用的WAV檔用「-p 29 -m 5」轉換後,得到大小約為1.7MB的M4A檔案,變動位元率平均為62kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 29 -m 5」的M4A後,20.3kHz以上的頻率完全被過濾掉,8.7kHz到20.3kHz的頻譜形狀改變劇烈,在8.7kHz以下的頻率改變也很明顯。音質和原始WAV檔案相比雖有很大的差異,但和「-p 5 -m 1」比起來卻好上不少,不仔細聽的話也還可以接受。檔案大小小了二十四到二十五倍!
-p 29 -m 4
將測試用的WAV檔用「-p 29 -m 4」轉換後,得到大小約為1.4MB的M4A檔案,變動位元率平均為50kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 29 -m 4」的M4A後,20.3kHz以上的頻率完全被過濾掉,8.7kHz到20.3kHz的頻譜形狀改變劇烈,在8.7kHz以下的頻率改變也很明顯,頻譜和「-p 29 -m 5」轉出來的結果差異不大。音質和原始WAV檔案相比雖有很大的差異,但和「-p 5 -m 1」比起來卻好上不少,不仔細聽的話也還可以接受。檔案大小小了將近三十倍!
-p 29 -m 3
將測試用的WAV檔用「-p 29 -m 3」轉換後,得到大小約為1.3MB的M4A檔案,變動位元率平均為45kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 29 -m 3」的M4A後,20.3kHz以上的頻率完全被過濾掉,8.7kHz到20.3kHz的頻譜形狀改變劇烈,在8.7kHz以下的頻率改變也很明顯,頻譜和「-p 29 -m 5」轉出來的結果差異不大。音質和原始WAV檔案相比雖有很大的差異,但和「-p 5 -m 1」比起來卻好上不少,不仔細聽的話也還可以接受。檔案大小小了三十二倍!
-p 29 -m 2
將測試用的WAV檔用「-p 29 -m 2」轉換後,得到大小約為1.2MB的M4A檔案,變動位元率平均為43kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 29 -m 2」的M4A後,20.3kHz以上的頻率完全被過濾掉,8.7kHz到20.3kHz的頻譜形狀改變劇烈,在8.7kHz以下的頻率改變也很明顯,頻譜和「-p 29 -m 5」轉出來的結果差異不大。音質和原始WAV檔案相比雖有很大的差異,但和「-p 5 -m 1」比起來卻好上不少,不仔細聽的話也還可以接受。檔案大小小了三十四到三十五倍!
-p 29 -m 1
將測試用的WAV檔用「-p 29 -m 1」轉換後,得到大小約為985KB的M4A檔案,變動位元率平均為35kbps,頻譜如下:
從上圖可以發現將WAV轉換成「-p 29 -m 2」的M4A後,18kHz以上的頻率完全被過濾掉,7.3kHz到18kHz的頻譜形狀改變劇烈,在7.3kHz以下的頻率改變也很明顯,頻譜和「-p 29 -m 5」轉出來的結果差異很大,音質聽起來很差。
使用-p和-m參數來轉檔
以上測了AAC-LC、HE-AAC、HE-AACv2三種不同的AAC規格在不同的「-m」參數值下的輸出結果。在音質的部份,自然還是位元率高出許多的「-p 2 -m 5」參數最接近原始音質,聽起來和原始WAV沒有差異。但將其降一級,使用「-p 2 -m 4」參數輸出之後,AAC-LC的音質表現就不如「-p 5 -m 2」的HE-AAC了。用「-p 29 -m 5」輸出的HE-AACv2音質比「-p 5 -m 2」的HE-AAC還來的差一點,但和「-p 29 -m 5」音質接近的「-p 29 -m 2」,其檔案大小又小了「-p 5 -m 2」的HE-AAC將近兩倍。若是真的很需要極致地減少檔案佔用空間,HE-AACv2算是不錯的編碼格式。所以說,如果是要收藏音樂的話,「-p 2 -m 5」是首選,它可以省下十二倍到十三倍的空間,又可以保留原始音質。如果有檔案傳送需求的話,「-p 5 -m 2」是首選,在保有可接受的音質下,可以省下十九倍到二十倍的空間。如果有儲存空間壓力的話,「-p 29 -m 2」是首選,可以在保持著還可以聽個大概的條件下,讓檔案大小減少三十四到三十五倍。
如果我們要使用「-p 5 -m 2」進行轉檔,可以使用以下指令:
fdkaac與其他解碼器合作
由於fdkaac所支援的輸入格式有限,因此常會與其他解碼器一同工作,利用外部的解碼器將特殊格式的音樂檔進行解碼,再將解碼結果傳給fdkaac進行格式轉換的工作。在終端機預設的bash script下可以使用「|」字元將兩個指令隔開在同一行中。字元「|」左邊的指令輸出到標準輸出串流(stdout)中的資料,會成為字元「|」右邊指令的標準輸入串流(stdin)。使用「-」字元可以指定要使用標準輸入/輸出串流的參數位置。
FLAC轉M4A
必須要先有flac套件,可以使用以下指令來安裝:
使用以下指令可以將FLAC格式的音樂檔案轉成M4A音樂檔:
flac的-c參數表示將輸出改成stdout(同-o -),-d參數表示要進行解碼(decode)。
APE(MAC)轉M4A
APE(或是MAC)為Monkey's Audio的格式,由於官方政策的關係,在Linux上如果要進行解碼,只能使用以下的非官方套件:
使用以下指令可以將APE(或是MAC)格式的音樂檔案轉成M4A音樂檔:
mac的-d參數表示要進行解碼(decode)。
Ogg轉M4A
必須要先有vorbis-tools套件,可以使用以下指令來安裝:
使用以下指令可以將Ogg格式的音樂檔案轉成M4A音樂檔:
Opus轉M4A
必須要先有opus-tools套件,可以使用以下指令來安裝:MP3轉M4A
這很明顯是用音質較差的聲音來源(MP3)包裝成看起來音質較高的檔案格式(M4A),沒有意義。