https://magiclen.org/acoustics/
由於儲存空間和資料傳輸速度的限制,我們可能沒辦法將很多聲音完好無損的保存或是傳送。聲音是給人聽的,但是人類的耳朵的聽力有限,非常細微的訊號差異其實感受不太出來,因此可以使用一些會改變原本聲音訊號的方式來將其重新編碼(Encode)成和原始聲音訊號聽起來差異不大的格式,減少儲存聲音訊號所佔用空間和加快傳送聲音訊號時的速度,而這種壓縮聲音訊號的方式就稱為有損壓縮(Lossy Compression)。有損壓縮聲音訊號的方式有很多種,常見的格式為MP3、Ogg、AAC,另外還有比較後來才出現的HE-AAC、HE-AACv2、Opus格式。究竟這些格式哪些音質比較好,在不同條件下又應該要選擇使用什麼樣的格式才適合,在本篇文章中將會實地進行轉檔測試,並將結果轉成頻譜來分類討論。
有損(Lossy)音訊壓縮,顧名思義就是將聲音訊號使用破壞性壓縮,使用較少、有限的資料量來還原出接近原始的聲音訊號,以縮小儲存聲音訊號所需的空間。
由於聲音是給人聽的,因此理論上只需要完美保留人類可以聽得到、分辯得出來的訊號,即便聲音訊號會改變,但實際聽起來聲音也還可以和原始的聲音訊號沒有差別。聲音是一種震動介質而產生出來的縱波,振幅愈大,音量愈大;頻率愈高,音調愈高。人類的耳朵可捕捉到20~20,000赫茲(Hz)的聲波。以人耳為基準,大於20,000Hz的波稱為超聲波(超音波);小於20Hz的波稱為次聲波。
雖然每個有損音訊壓縮的格式壓縮聲音訊號的方式都不太一樣,但大致上都會優先保留20~20,000Hz頻率範圍內的聲音訊號,再根據心理聲學來調整聲音訊號,儘量減少壓縮過的聲音訊號和原本訊號聽起來的差異。
相同的壓縮格式在固定的取樣頻率(Sampling Rate)下,所使用的位元率(Bitrate)是影響聲音訊號音質的主要因素。位元率的單位常使用「每秒多少位元(bps, bits per seconds)」來表示,也就是每一秒的聲音訊號使用了多少個位元來儲存。位元率愈高表示每秒可以儲存的聲音訊號愈多,儲存的聲音訊號愈多也就愈接近原始的聲音訊號,音質聽起來自然會愈好。相反地,位元率愈少,表示每秒可以儲存的聲音訊號愈少,必須要丟掉更多的原始聲音訊號才有辦法儲存,儲存的聲音訊號就會和原始的聲音訊號愈差愈多,音質聽起來自然會愈差。
雖然位元率愈高,可以使得壓縮後的聲音訊號愈接近原始的聲音訊號,但位元率並不完全是愈高就愈好。使用高位元率來儲存聲音訊號,相對地需要更多的儲存空間。當位元率高到一個程度之後,實際聽起來就已幾乎和原始的聲音訊號沒有差異了,此時再增加位元率,只是多浪費儲存空間而已。
壓縮聲音訊號時所使用的位元率,大致上可分為「固定位元率(CBR, Constant Bitrate)」和「變動位元率(VBR, Variable Bitrate)」兩種。
「固定位元率」顧名思義就是從頭到尾都使用固定的位元率來儲存聲音訊號,用這種方式所壓縮出來的聲音訊號,雖然可以很容易控制其所佔用的儲存空間大小,但它的位元使用率將會是最差的。譬如很簡單的聲音,像是「嗶──」,和複雜的聲音,像是「哺吱喀─吱吱吱哺─喀吱」,都會使用固定的位元率來儲存,有可能會造成簡單的聲音使用的位元率過高,或是複雜的聲音使用的位元率過低,導致音質和佔用的儲存空間無法平衡。
而「變動位元率」基本上就沒有這個問題存在,它可以根據聲音訊號的複雜度來自行決定該段聲音所使用的位元率。這樣的編碼方式是比較有效率的,只是在編碼的過程中會需要比較多的時間來計算。不同編碼器(Encoder)計算變動位元率的方式皆有所不同,即使是在相同的變動位元率下,音質也可能會有很大的差異。因此建議使用公認較優良的編碼器來進行編碼,才可以達到較佳的成果。
聲音訊號壓縮後所需佔用的儲存空間,可以使用以下公式計算:
儲存空間 = 平均位元率 * 聲音長度
舉個例子,長度為4分鐘,位元率為128kbps的MP3檔案,其所佔用的儲存空間計算方法如下:
儲存空間 = 128kbps * 4 minutes = (128k bits / 1 second) * (4 minutes * (60 seconds / 1 minutes)) = (128k bits / 1 second) * 240 seconds = 30720k bits = 30720k bits / (8 bits / 1 byte) = 3840k bytes = 3840k / (1024k / 1M) bytes = 3.75M bytes = 3.75MB
經由以上算式得知,長度為4分鐘,位元率為128kbps的MP3檔案,其所佔用的儲存空間為3.75MB。
看到這裡您可能會很好奇聲音壓縮前所佔用的儲存空間要如何計算,在此就順便說明一下。
未壓縮的聲音訊號,會有很明確的取樣頻率(Sampling Rate)與取樣深度(Sampling Depth)的數值。在文章前面有提到過,聲音是一種震動介質而產生出來的縱波,它會在連續時間內讓介質不間斷地改變狀態,因此在任意的瞬間點,介質都可以對應到某種狀態,可將介質狀態的變化以波形來表示。為了要使用有限的數位空間來記錄不同時間點下的波形對應的數值,只好對聲音進行「取樣(Sampling)」,每隔一段時間才將該時間點下的波形數值(聲音強度)記錄下來。這個間隔的時間倒數,即為取樣頻率;而記錄每個數值所使用的空間,即為取樣深度。
取樣頻率常用的單位為「赫茲(Hz)」,表示每秒記錄幾次狀態。如44100Hz,即表示每秒記錄44100個時間點的狀態。愈大的取樣頻率,愈可以還原出愈原始的聲音波形。但是由於過高的頻率對人類來說只是聽不到的超音波,因此取樣頻率通常會接近兩倍於人耳所能感受的最大聲音頻率,如44.1kHz或是48kHz。至於為什麼取樣頻率要兩倍於真實的最大聲音頻率,又為什麼不直接使用40kHz作為取樣頻率呢?
根據奈奎斯特定理(Nyquist Theorem),取樣頻率兩倍大於被取樣訊號的最大頻率,即可重構出原始的被取樣訊號。但實際上,重構出原始訊號所用來抗混疊(Anti-Aliasing)、消除某頻率以上訊號的低通濾波器(Low Pass Filter)並非是理想的,它有個過渡頻寬(Transition Band)會導致在這個頻寬內的訊號仍被衰減通過。因此,如果取樣頻率不足於被取樣訊號的最大頻率加上其低通濾波器的過渡頻寬的兩倍,最大頻率附近的聲音訊號依然會有混疊現象,將會導致訊號失真(Distortion)。為了完整保留最大聲音頻率,必須預留過度頻寬,典型的過度頻寬大小為2050Hz,這也是為何CD是使用44100Hz作為取樣頻率的原因,算法如下:
(20000Hz + 2050Hz) * 2 = 44100Hz
CD的44100Hz只是聲音取樣頻率的「最低需求」,有些人可以稍微聽到比20kHz還要高一點的頻率,甚至還可以用耳朵之外的器官來感受超過20Khz的高頻聲音,因此也有在使用比44100Hz更高的取樣頻率,像是48000Hz或是96000Hz。當然,愈高的聲音頻率人類愈感受不到就是了。
取樣深度常用的單位是「位元(bit)」,如16位元可以表示出216種不同的數值,也就是65536種不同的聲音強度。雖然還有24bit甚至是32bit的取樣深度,但一般人的耳朵連16位元的65536種不同的聲音強度都不能完全分辨出來,基本上不太需要用到那麼高的取樣深度。
了解取樣頻率和取樣深度之後,就可以算得出聲音壓縮前所佔用的儲存空間了,公式如下:
儲存空間 = 取樣頻率 * 取樣深度 * 聲音長度 * 聲道數
舉個例子,長度為4分鐘,取樣頻率為44100Hz,取樣深度為16位元,雙聲道的WAV(PCM)檔案,其所佔用的儲存空間計算方法如下:
儲存空間 = 44100Hz * 16 bits * 4 minutes * 2 = (44100 / 1 second) * 16 bits * (4 minutes * (60 seconds / 1 minutes) * 2 = 705600 bits / second * 240 seconds = 169344000 bits = 169344000 / (8 bits / 1 byte) * 2 = 42336000 bytes = 42336000 / (1048576 / 1M) bytes ≒ 40.37MB
經由以上算式得知,長度為4分鐘,取樣頻率為44100Hz,取樣深度為16位元,雙聲道的WAV(PCM)檔案,其所佔用的儲存空間約為40.37MB。
有損音訊壓縮的格式有許多種,不同的有損音訊壓縮格式會使用不同的演算法來對聲音訊號進行破壞壓縮,因此各有不同的音質表現。
網路上最常流傳的音樂格式為MP3(MPEG-1 Audio Layer 3),它可以大幅降低音訊資料量,減少檔案大小,方便傳輸。對於大多數的使用者來說,經由MP3壓縮後的音質和原本的音質差異並不大,但MP3檔案大小卻比原始檔少佔用了約4~10倍的空間,故能受到許多使用者的青睞。
有關MP3格式的編碼方式,可以參考以下文章:
https://magiclen.org/linux-lame/
Ogg是開源、自由、免費的音訊編碼格式,沒有麻煩的專利授權問題,也因此應用程式和遊戲的音效很多都是使用Ogg格式來編碼。
有關Ogg格式的編碼方式,可以參考以下文章:
https://magiclen.org/linux-ogg/
AAC(進階音訊編碼, Advanced Audio Coding)是基於MPEG-2的音訊編碼技術,用來取代MP3格式。相較於MP3格式,AAC支援更多的聲道,更高的採樣率和位元率,以及更精確的聲音訊號。
有關AAC格式的編碼方式,可以參考以下文章:
https://magiclen.org/linux-faac-2/
HE-AAC(High-Efficiency AAC)是AAC加上SBR(Spectral Band Replication),用於低位元率的編碼格式,HE-AACv2是AAC加上SBR和PS(Parametric Stereo),用於更低位元率的編碼格式,兩者都屬於MPEG4的技術。
有關HE-AAC與HE-AACv2的編碼方式,可以參考以下文章:
https://magiclen.org/linux-fdk-aac-2/
Opus是比MP3、OGG、AAC、HE-AAC(AAC+)還要新的音訊編碼格式,它整合了Skype開發的語音編碼格式─SILK,與超低延遲的CELT(Constrained Energy Lapped Transform)編碼格式,因此Opus非常適合用於即時地(Real-Time)的網路語音傳輸。
有關Opus的編碼方式,可以參考以下文章:
https://magiclen.org/linux-opus/
有的。FLAC(Free Lossless Audio Codec)、ALAC(Apple Lossless)、APE(Monkey's Audio)和WMA Lossless(Windows Media Audio 9 Lossless)是近年非常受歡迎的格式,因為它們不會以破壞性資料壓縮的方式來儲存聲音訊號,而導致訊號無法完整還原成原始的樣子,使得播放出來的音樂會失真。而FLAC、ALAC、APE和WMA Lossless就不同了,它們採用無失真壓縮法(Lossless Compression),常稱其為「無損壓縮」,不會破壞原有的聲音訊號,能將聲音訊號壓縮為原本的一半,但經過解碼(Decode)也依然可以百分之百還原出原始的聲音訊號。
有關FLAC的編碼方式,可以參考以下文章:
https://magiclen.org/linux-flac/
一個規律、有週期性的聲音稱為樂音,反之則稱為噪音。如果想知道音樂是如何產生,以及如何有音調、音量、音色上的變化,可以參考這裡的文章:
https://magiclen.org/tag/%E9%9F%B3%E6%A8%82%E5%90%88%E6%88%90/
接下來才是本篇文章的重頭戲,筆者將會使用一個取樣深度24位元,取樣頻率96kHz,長度為3分36秒,檔案大小為124.9MB的WAV音樂檔來實際對MP3、Ogg、AAC、HE-AAC、HE-AACv2和Opus格式進行轉檔測試。
這個測試用的WAV音樂檔案來自於這個網站,可以透過以下連結下載:
https://file.magiclen.org/index.php?file=32346269742d39366b2d73616d706c652d726172352e726172
為了編碼出不同格式的檔案,筆者使用了多種不同的編碼器。列表如下:
為了比較音樂檔案的音質之間的差異,筆者使用了一些軟體來描繪出它們的頻譜圖,使我們可以直接從頻譜圖來比較音質差異。以下列出筆者所使用的工具:
原始取樣深度24位元,取樣頻率96kHz的WAV檔案頻譜如下:
在開始進行有損壓縮之前,我們先使用FFmpeg轉出不同取樣深度和取樣頻率的WAV檔案來比較看看。
將原始的聲音訊號保留原先的取樣頻率,但是將其取樣深度從24位元降到16位元。轉換後得到83.2MB的WAV檔案,其頻譜如下:
使用ImageDifferencer,比較16bit, 96kHz的頻譜圖跟原始聲音訊號頻譜圖的差異,得到以下的結果:
從上圖的烏漆墨黑可以發現,將取樣深度從24位元降到16位元對頻譜完全沒有影響,更不用說有聽出其中的音質差異的可能了。
將原始的聲音訊號保留原先的取樣深度,但是將其取樣頻率從96kHz降到48kHz。轉換後得到62.4MB的WAV檔案,其頻譜如下:
由於取樣頻率不同,所以只好再將其升頻回96kHz與原始聲音訊號的頻譜比較,得到以下的結果:
從上圖可以看出來,重新取樣只是把高頻的訊號丟掉,低頻的訊號被完美地保留住了。
將原始的聲音訊號的取樣深度從24位元降到16位元,取樣頻率從96kHz降到48kHz。轉換後得到41.6MB的WAV檔案,其頻譜如下:
和24bit, 48kHz聲音訊號的頻譜比較,得到以下的結果:
從上圖的烏漆墨黑可以發現,將取樣深度從24位元降到16位元依然對頻譜完全沒有影響。這個取樣深度16位元,取樣頻率48kHz的WAV檔案也會被用在之後的有損壓縮格式的測試中。
將原始的聲音訊號的取樣深度從24位元降到8位元,取樣頻率從96kHz降到48kHz。轉換後得到20.8MB的WAV檔案,其頻譜如下:
從以上的頻譜圖中可以發現頻譜已經有了劇烈的改變,和24bit, 48kHz聲音訊號的頻譜比較,得到以下的結果:
會導致高頻訊號差異頗大的原因在於,8bit, 48kHz的聲音訊號將原本不一樣但聲音強度接近的聲音近似成相同強度的聲音,類似的波形重複太多次,而導致轉換成頻譜後出現原本不存在的高頻音,實際聽起來也的確嚴重影響到音質。
48kHz是MP3、Ogg、AAC、HE-AAC、HE-AACv2和Opus都支援的取樣頻率,也是目前較常見的取樣頻率。底下將實際轉檔測試在不同位元率下時,這些格式的頻譜及音質表現。
將Opus Tools的opusenc,設置最大的變動位元率參數「--bitrate 500」可以轉出其所能支援的最高音質。轉換出來的Opus檔案之平均變動位元率為491kbps,檔案大小為13.4MB,頻譜如下:
同樣使用ImageDifferencer,比較跟原始的聲音訊號頻譜的差異,得到以下的結果:
從上圖可以看出,雖然Opus把20.1kHz以上的聲音訊號完全過濾掉,但它近乎完美地把低於20.1kHz以下的聲音訊號保留住了!
將Vorbis Tools的oggenc,設置最大的變動位元率參數「-b 500」可以轉出其所能支援的最高音質。轉換出來的Ogg檔案之平均變動位元率為490kbps,檔案大小為13.3MB,頻譜如下:
比較跟原始的聲音訊號頻譜的差異,得到以下的結果:
從上圖可以看到,雖然Ogg格式保留了20.1kHz到23kHz的聲音訊號,但它在20.1kHz以下的聲音訊號依然如同491kbps的Opus一樣好。雖然音質聽不出差異,但以頻譜的結果來說,490kbps的Ogg是比491kbps的Opus還好一點點的。
將FAAC設置最大的品質參數「-q 700」可以轉出其所能支援的最高音質。轉換出來的AAC檔案之平均變動位元率為340kbps,檔案大小為9.3MB,頻譜如下:
將Opus Tools的opusenc,設置變動位元率參數「--bitrate 328」。轉換出來的Opus檔案之平均變動位元率為340kbps,頻譜如下:
將Vorbis Tools的oggenc,設置變動位元率參數「--b 327」。轉換出來的Ogg檔案之平均變動位元率為340kbps,頻譜如下:
比較以上同樣為340kbps的AAC、Opus和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,Opus的表現和在491kbps與340kbps下幾乎沒有差異,都很完美地保留住20.1kHz以下的聲音訊號。Ogg在490kbps與340kbps下,高頻的訊號則有明顯的差異,但較低頻的訊號依然是完美保留。然而,340kbps的AAC雖然在20.1kHz以上高頻的聲音訊號部份表現要來的比Opus和Ogg都要好上很多,但是它在20.1kHz以下的訊號表現就比Opus和Ogg要來的差了。由於人類耳朵對20kHz以上的超音波幾乎感受不到,雖然音質聽不出差異,但以頻譜的結果來說,在340kbps下,音質的排序是,Opus>Ogg>AAC。
Opus在491kbps與340kbps下,頻譜的差異如下:
Ogg在490kbps與340kbps下,頻譜的差異如下:
將LAME設置最大的固定位元率參數「-b 320」可以轉出其所能支援的最高音質。轉換出來的MP3檔案之固定位元率為320kbps,檔案大小為8.7MB,頻譜如下:
將FAAC的品質參數設置為「-q 580」。轉換出來的AAC檔案之平均變動位元率為320kbps,頻譜如下:
將Opus Tools的opusenc,設置變動位元率參數「--bitrate 307」。轉換出來的Opus檔案之平均變動位元率為320kbps,頻譜如下:
將Vorbis Tools的oggenc,設置變動位元率參數「--b 318」。轉換出來的Ogg檔案之平均變動位元率為320kbps,頻譜如下:
比較以上同樣為320kbps的MP3、AAC、Opus和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,Opus的表現和在491kbps與320kbps下幾乎沒有差異,都很完美地保留住20.1kHz以下的聲音訊號。Ogg在340kbps與320kbps下,高頻的訊號有一點點的差異,但其餘的訊號依然接近完美保留。AAC在340kbps與320kbps下,所有頻率的訊號皆有不明顯的差異,超過20.1kHz的高頻部份表現依然比Opus和Ogg好很多。MP3在320kbps最高位元率下所有頻率的訊號皆和原始的訊號差異頗大,表現輸Opus、Ogg和AAC一大截。雖然四者音質皆聽不出什麼差異,但以頻譜的結果來說,在320kbps下,音質的排序是,Opus>Ogg>AAC>MP3。
Opus在491kbps與320kbps下,頻譜的差異如下:
Ogg在340kbps與320kbps下,頻譜的差異如下:
AAC在340kbps與320kbps下,頻譜的差異如下:
將LAME設置最大的變動位元率等級參數「-V 0」可以轉出其在變動位元率下所能支援的最高音質。轉換出來的MP3檔案之平均變動位元率為258kbps,檔案大小為7.0MB,頻譜如下:
將FAAC的品質參數設置為「-q 325」。轉換出來的AAC檔案之平均變動位元率為258kbps,頻譜如下:
將fdkaac的變動位元率等級參數設置為最高的「-m 5」,並將規格參數設置為「-p 2」(AAC),可以輸出fdkaac所能支援在變動位元率下的最高音質。轉換出來的AAC檔案之平均變動位元率為258kbps,頻譜如下:
將Opus Tools的opusenc,設置變動位元率參數「--bitrate 245」。轉換出來的Opus檔案之平均變動位元率為258kbps,頻譜如下:
將Vorbis Tools的oggenc,設置變動位元率參數「--b 263」。轉換出來的Ogg檔案之平均變動位元率為258kbps,頻譜如下:
比較以上同樣為258kbps的MP3、AAC、Opus和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,Opus的表現和在491kbps與258kbps下的差異微乎其微,都很完美地保留住20.1kHz以下的聲音訊號。Ogg在340kbps與258kbps下,高頻至低頻的訊號皆有差異,尤其是高頻的差異很明顯,使得258kbps的Ogg和原始聲音訊號的頻譜差異更多了。FAAC轉出來的AAC在340kbps與258kbps下,所有頻率的訊號皆有很平均的差異,但超過20.1kHz的高頻部份表現依然比Opus和Ogg好很多。fdkaac轉出來的AAC在所有頻率下比FAAC轉出來的AAC結果都還要更差,有些低頻表現甚至還略輸於MP3。MP3在258kbps的變動位元率下保留的高頻訊號範圍比320kbps的還要多,但並未保留的比320kbps還要完整,所有頻率的訊號皆和原始的訊號差異頗大,表現輸Opus、Ogg和AAC(FAAC)一大截,略遜於fdkaac轉出來的AAC。雖然五者音質皆聽不出什麼差異,但以頻譜的結果來說,在258kbps下,音質的排序是,Opus>Ogg>AAC(FLAC)>AAC(fdkaac)>MP3。
FDK AAC是比FAAC還要新的編碼器,但FDK AAC轉出來的AAC品質卻比FAAC還差。對於這樣的結果筆者感到很疑惑,還好FDK AAC有支援HE-AAC及HE-AACv2,看它能不能藉由新格式來扳回一城。
Opus在491kbps與258kbps下,頻譜的差異如下:
Ogg在340kbps與258kbps下,頻譜的差異如下:
AAC(FAAC)在340kbps與258kbps下,頻譜的差異如下:
將LAME的變動位元率等級參數設為「-V 3」。轉換出來的MP3檔案之平均變動位元率為171kbps,檔案大小為4.6MB,頻譜如下:
將FAAC的品質參數設置為「-q 134」。轉換出來的AAC檔案之平均變動位元率為171kbps,頻譜如下:
將Opus Tools的opusenc,設置變動位元率參數「--bitrate 158」。轉換出來的Opus檔案之平均變動位元率為171kbps,頻譜如下:
將Vorbis Tools的oggenc,設置變動位元率參數「--b 175」。轉換出來的Ogg檔案之平均變動位元率為171kbps,頻譜如下:
比較以上同樣為171kbps的MP3、AAC、Opus和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,Opus的表現和在491kbps與171kbps下的差異不多,所有頻率都很平均,20.1kHz以下的聲音訊號保留的還算完整。Ogg在340kbps與171kbps下,高頻至低頻的訊號皆有差異,尤其是高頻的差異很明顯,使得171kbps的Ogg和原始聲音訊號的頻譜差異更多了。AAC在340kbps與171kbps下,高頻至低頻的訊號皆有差異,尤其是高頻的差異很明顯,使得171kbps的AAC和原始聲音訊號的頻譜差異更多了。MP3在171kbps的變動位元率下,已經把高於18.2kHz以上的訊號都濾儲掉,其餘所有頻率的訊號皆和原始的訊號差異頗大,表現輸Opus、Ogg和AAC一大截。在171kbps下,音質的排序是,Opus>Ogg>AAC>MP3。Opus和Ogg幾乎聽不出差異,而MP3的音質明顯比其它三者還要來的差。
Opus在491kbps與171kbps下,頻譜的差異如下:
Ogg在340kbps與171kbps下,頻譜的差異如下:
AAC在340kbps與171kbps下,頻譜的差異如下:
將LAME的變動位元率等級參數設為「-V 5」。轉換出來的MP3檔案之平均變動位元率為122kbps,檔案大小為3.3MB,頻譜如下:
將FAAC的品質參數設置為「-q 95」。轉換出來的AAC檔案之平均變動位元率為122kbps,頻譜如下:
將fdkaac的變動位元率等級參數設置為最高的「-m 5」,並將規格參數設置為「-p 5」(HE-AAC),可以輸出fdkaac所能支援在變動位元率下HE-AAC的最高音質。轉換出來的HE-AAC檔案之平均變動位元率為120kbps,檔案大小為3.3MB,頻譜如下:
將Opus Tools的opusenc,設置變動位元率參數「--bitrate 111」。轉換出來的Opus檔案之平均變動位元率為122kbps,頻譜如下:
將Vorbis Tools的oggenc,設置變動位元率參數「--b 114」。轉換出來的Ogg檔案之平均變動位元率為122kbps,頻譜如下:
比較以上同樣為120kbps~122kbps的MP3、AAC、HE-AAC、Opus和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,121kbps的Opus最接近原始聲音訊號的頻譜。Ogg在121kbps下中低頻的表現也不錯,但高頻則無法和Opus相比擬。121kbps的AAC無論在高頻至低頻的表現都不如Ogg。121kbps的MP3無論在高頻至低頻的表現都不如AAC。HE-AAC的頻譜從高頻至低頻皆和原始聲音訊號差異很大,但它有保留住高頻的訊號,整體來說較MP3好一些。在120kbps~122kbps範圍內,音質的排序是,Opus>Ogg>AAC>HE-AAC>MP3。
FDK AAC的HE-AAC表現似乎沒有想像中的好,也有可能是因為FAAC的AAC(AAC-LC)表現太好了才會有這樣的結果。
將LAME的變動位元率等級參數設為「-V 9」。轉換出來的MP3檔案之平均變動位元率為72kbps,檔案大小為2.0MB,頻譜如下:
將FAAC的品質參數設置為「-q 48」。轉換出來的AAC檔案之平均變動位元率為74kbps,檔案大小為2.0MB,頻譜如下:
將fdkaac的變動位元率等級參數設置為「-m 2」,並將規格參數設置為「-p 5」(HE-AAC)。轉換出來的HE-AAC檔案之平均變動位元率為78kbps,檔案大小為2.1MB,頻譜如下:
將Opus Tools的opusenc,設置變動位元率參數「--bitrate 65」。轉換出來的Opus檔案之平均變動位元率為72kbps,頻譜如下:
將Vorbis Tools的oggenc,設置變動位元率參數「--b 79」。轉換出來的Ogg檔案之平均變動位元率為71kbps,檔案大小為1.9MB,,頻譜如下:
比較以上同樣為71kbps~78kbps的MP3、AAC、HE-AAC、Opus和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,72kbps的MP3將低頻保留的最好,因為它直接將原始聲音重新使用22050Hz取樣,只保留了11025Hz以下的訊號,因此在有限的儲存空間內可以存比其他格式還要多的訊號,但由於大於11025Hz以上的訊號都被過濾掉,因此聲音聽起來有很嚴重的壓縮感。74kbps的AAC將10.9kHz以上的訊號都過濾掉,但10.9kHz以下的訊號也保留的不是很好,音質比MP3還要差。71kbps的Ogg犧牲掉15.9kHz以上的訊號,將15.9kHz以下的訊號保留在一個程度,音質略比MP3要來的好。78kbps的HE-AAC頻譜從高頻至低頻皆和原始聲音訊號差異很大,但它有保留住高頻的訊號,整體來說較MP3和AAC好一些。72kbps的Opus,將20.1kHz以下的訊號保留在一個程度,整體音質遠勝於其它格式。在71kbps~78kbps範圍內,音質的排序是,Opus>Ogg>HE-AAC>MP3>AAC。
將FAAC的品質參數設置為「-q 28」。轉換出來的AAC檔案之平均變動位元率為50kbps,檔案大小為1.4MB,頻譜如下:
將fdkaac的變動位元率等級參數設置為「-m 1」,並將規格參數設置為「-p 5」(HE-AAC)。轉換出來的HE-AAC檔案之平均變動位元率為51kbps,檔案大小為1.4MB,頻譜如下:
將fdkaac的變動位元率等級參數設置為「-m 4」,並將規格參數設置為「-p 29」(HE-AACv2)。轉換出來的HE-AAv2C檔案之平均變動位元率為50kbps,檔案大小為1.4MB,頻譜如下:
將Opus Tools的opusenc,設置變動位元率參數「--bitrate 47」。轉換出來的Opus檔案之平均變動位元率為50kbps,頻譜如下:
將Vorbis Tools的oggenc,設置變動位元率參數「--b 63」。轉換出來的Ogg檔案之平均變動位元率為43kbps,檔案大小為1.3MB,,頻譜如下:
比較以上同樣為49kbps~51kbps的AAC、HE-AAC、HE-AACv2、Opus和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,50kbps的AAC將8.4kHz以上的訊號都過濾掉,但8.4kHz以下的訊號也保留的不是很好,音質非常的差。49kbps的Ogg犧牲掉14.9kHz以上的訊號,將14.9kHz以下的訊號保留在一個程度。51kbps的HE-AAC頻譜從高頻至低頻皆和原始聲音訊號差異很大,但它有保留住高頻的訊號,比AAC好很多,比Ogg稍微好一點。50kbps的HE-AACv2頻譜從高頻至低頻皆和原始聲音訊號差異很大,但它有保留住更高頻的訊號,比HE-AAC還要更好。50kbps的Opus,將20.1kHz以下的訊號保留在一個程度,整體音質遠勝於其它格式。在49kbps~51kbps範圍內,音質的排序是,Opus>HE-AACv2>HE-AAC>Ogg>AAC。
高位元率時,最接近原始聲音訊號頻譜的格式為Ogg,因此在這個測試中,可以認為音質最好的有損格式為Ogg。但是,當位元率在340kbps以下時,Opus格式的表現都比其它格式要來的好,它充分地將人耳聽得到的聲音訊號平均地保留住,不會跟MP3和Ogg一樣為了保留低頻而丟了高頻,也不會跟AAC、HE-AAC和HE-AACv2一樣為了保留高頻而丟了低頻。然而,Opus只支援48kHz的取樣頻率,如果聲音訊號本身的取樣頻率就低於48kHz,重新取樣後,Opus會多花一些儲存空間來儲存聲音訊號。同樣地,如果聲音訊號本身的取樣頻率高於48kHz,重新取樣後,Opus就會把高頻的部份整個過濾掉。
許多人認為AAC的音質比Ogg來的好,但筆者的測試結果是Ogg比AAC還要來得好。也許可能有人會質疑筆者使用的FAAC編碼器品質不好,其實不然,筆者試過FDK AAC和Nero AAC Codec,它們在AAC-LC
的表現都不如FAAC。至於iTunes和QAAC轉AAC-LC的效果就不知道有沒有比FAAC好了,筆者手邊沒有MAC OS X和Windows系統能做測試。
Ogg和AAC各有擅長的位元率和頻率範圍,在高位元率下,Ogg較重視人耳聽力範圍內的頻率,AAC則較重視所有頻率的保留,因此AAC會為了保留高頻超音波,而丟失真正聽得到的聲音訊號,以致於在聽感上,Ogg會比AAC要來得好。在中低位元率下,Ogg要比AAC還要保留更多的聲音訊號。
HE-AAC和HE-AACv2只適合在低位元率下使用,可以用來取代低位元率下音質甚至會比MP3還要來的差的AAC(AAC-LC)。
如果要用位元率,在48kHz取樣頻率的條件下來選擇適當的有損壓縮格式的話,可以這樣選:
大於340kbps:Ogg
小於或等於340kbps:Opus
懶得選擇的話,通通都用Opus也可以。
只有Ogg、AAC、HE-AAC和HE-AACv2能支援96kHz的取樣頻率。底下將實際轉檔測試在不同位元率下時,這些格式的頻譜及音質表現。
將FAAC設置最大的品質參數「-q 700」可以轉出其所能支援的最高音質。轉換出來的AAC檔案之平均變動位元率為609kbps,檔案大小為16.6MB,頻譜如下:
使用ImageDifferencer,比較跟原始的聲音訊號頻譜的差異,得到以下的結果:
從上圖可以看出,AAC從高頻到低頻的表現都十分平均。
將FAAC的品質參數設置為「-q 481」。轉換出來的AAC檔案之平均變動位元率為531kbps,檔案大小為14.4MB,頻譜如下:
將Vorbis Tools的oggenc,設置最大的品質參數「-q 10」可以轉出其所能支援的最高音質。轉換出來的Ogg檔案之平均變動位元率為531kbps,頻譜如下:
比較以上同樣為531kbps的AAC和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,AAC從高頻到低頻的表現都十分平均,609kbps和531kbps的AAC差異不大。531kbps的Ogg雖然將25.5kHz以上的訊號完全過濾掉,但是25.5kHz以下的訊號幾乎被完全保留。由於人類耳朵對20kHz以上的超音波幾乎感受不到,雖然音質聽不出差異,但以頻譜的結果來說,在531kbps下,音質的排序是,Ogg>AAC。
AAC在609kbps與531kbps下,頻譜的差異如下:
將FAAC的品質參數設置為「-q 212」。轉換出來的AAC檔案之平均變動位元率為375kbps,檔案大小為10.2MB,頻譜如下:
將Vorbis Tools的oggenc,設置其品質參數為「-q 9」。轉換出來的Ogg檔案之平均變動位元率為375kbps,頻譜如下:
比較以上同樣為375kbps的AAC和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,AAC從高頻到低頻的表現都十分平均,609kbps和375kbps的AAC差異只有一點點。531kbps和375kbps的Ogg差異只在高頻的部份,375kbps的Ogg雖然將24.2kHz以上的訊號完全過濾掉,但是24.2kHz以下的訊號幾乎被完全保留。由於人類耳朵對20kHz以上的超音波幾乎感受不到,雖然音質聽不出差異,但以頻譜的結果來說,在375kbps下,音質的排序是,Ogg>AAC。
AAC在609kbps與375kbps下,頻譜的差異如下:
Ogg在531kbps與375kbps下,頻譜的差異如下:
將FAAC的品質參數設置為「-q 93」。轉換出來的AAC檔案之平均變動位元率為211kbps,檔案大小為5.8MB,頻譜如下:
將fdkaac的變動位元率等級參數設置為最高的「-m 5」,並將規格參數設置為「-p 5」(HE-AAC),可以輸出fdkaac所能支援在變動位元率下HE-AAC的最高音質。轉換出來的HE-AAC檔案之平均變動位元率為200kbps,檔案大小為5.5MB,頻譜如下:
將Vorbis Tools的oggenc,設置其品質參數為「-q 6」。轉換出來的Ogg檔案之平均變動位元率為211kbps,頻譜如下:
比較以上同樣為200kbps~211kbps的AAC、HE-AAC和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,211kbps的AAC與原始聲音訊號的頻譜差異從高頻到低頻都還算平均。HE-AAC的頻譜從高頻至低頻皆和原始聲音訊號差異很大,它雖然有保留住高頻的訊號,但它保留住的訊號屬於超音波的範圍,對音質影響不大,反倒為了要保留高頻訊號而使得中低頻的訊號差異很大。這裡轉出來211kbps的Ogg似乎遇到了一些問題,聲音訊號的頻譜和原始聲音訊號差異極大,失去參考價值。
事實上,在測試的過程中,筆者轉出了不只一種像此次一樣頻譜嚴重偏掉的Ogg,發生條件不明,在任何取樣頻率下都有可能會發生,但只要稍微增加或減少位元率即可避免掉這個情況,懷疑是Ogg的編碼器有些bug。為了替Ogg打抱不平,筆者另轉了200kbps的Ogg(-q 5.78)來與原始訊號的頻譜做比較,差異如下圖:
200kbps的Ogg雖然將22.5kHz以上的訊號完全過濾掉,但是22.5kHz以下的訊號幾乎被完全保留。以頻譜的結果來說,在200~211kbps下,音質的排序是,Ogg>AAC>HE-AAC。
將FAAC的品質參數設置為「-q 25」。轉換出來的AAC檔案之平均變動位元率為96kbps,檔案大小為2.7MB,頻譜如下:
將fdkaac的變動位元率等級參數設置為最高的「-m 3」,並將規格參數設置為「-p 5」(HE-AAC)。轉換出來的HE-AAC檔案之平均變動位元率為98kbps,檔案大小為2.7MB,頻譜如下:
將fdkaac的變動位元率等級參數設置為最高的「-m 4」,並將規格參數設置為「-p 29」(HE-AACv2)。轉換出來的HE-AAC檔案之平均變動位元率為93kbps,檔案大小為2.6MB,頻譜如下:
將Vorbis Tools的oggenc,設置其品質參數為「-q 1」。轉換出來的Ogg檔案之平均變動位元率為95kbps,檔案大小為2.6MB,頻譜如下:
比較以上同樣為93kbps~98kbps的AAC、HE-AAC、HE-AACv2和Ogg格式的聲音訊號跟原始的聲音訊號頻譜的差異,得到以下的結果:
從以上幾張頻譜差異圖可以得知,96kbps的AAC將15.5kHz以上的訊號完全過濾掉,15.5kHz以下的訊號也沒有保留的很好。95kbps的Ogg雖然也將15.5kHz以上的訊號完全過濾掉,但是15.5kHz以下的訊號保留的程度比AAC要好很多。98kbps的HE-AAC頻譜從高頻至低頻皆和原始聲音訊號差異很大,它雖然有保留住高頻的訊號,但保留的程度並不高,對音質提升影響有限。93kbps的HE-AACv2頻譜從高頻至低頻皆和原始聲音訊號差異很大,它雖然有保留住比HE-AAC更高頻的訊號,但保留的程度並不高,多保留的部份多屬超音波,對音質提升沒有幫助,反倒使得中低頻的訊號差異更大了。以頻譜的結果來說,在93kbps~98kbps下,音質的排序是,HE-AAC>Ogg>HE-AACv2>AAC。
高位元率時,最接近原始聲音訊號頻譜的格式為AAC,但是AAC保留太多無用的超音波,對音質完全沒有幫助,反而導致人耳聽得到的中低頻部份和原始聲音訊號有所差異。而Ogg的頻譜雖然看起來和原始聲音訊號的頻譜差異很大,但它卻完美保留住人耳聽的到的頻率範圍,因此在這個測試中,可以認為音質最好的有損格式為Ogg。這樣的情形一直在下降至200kbps以上都還是一樣,音質方面Ogg都是比AAC還要來的好。
但是到了低位元率時,Ogg和AAC就會開始完全過濾掉人耳聽得到聲音頻率,此時著重於保留高頻訊號的HE-AAC的音質就要好很多。HE-AACv2雖然比HE-AAC還能保留更高頻率的信號,但由於採樣率大於40kHz很多的關係,HE-AACv2保留到的只是人耳聽不到的超音波,對提升音質沒有幫助,反而因為要拿一部份的儲存空間來存放高頻訊號,而導致人耳聽得到的中低頻訊號差異更大,音質不如在中低頻穩紮穩打的Ogg來得好。
如果要用位元率,在96kHz取樣頻率的條件下來選擇適當的有損壓縮格式的話,可以這樣選:
大於或等於200kbps:Ogg
大於98kbps且小於200kbps:Ogg或HE-AAC
小於或等於98kbps:HE-AAC
Ogg可以說是在這個不同取樣頻率的測驗中音質最好的有損音訊壓縮格式。
很多人可能會覺得應該要是AAC奪冠才對,網路上的資料不是都說AAC才是最好的有損音訊壓縮格式嗎?其實網路上對於AAC的評價也不能說是錯誤的,畢竟筆者沒有使用iTunes或是QAAC這兩個號稱是最強的AAC編碼器來進行AAC編碼的測試。但從這篇文章的測試過程來看,AAC的頻譜看起來算是很漂亮的沒錯,但是它實在是保留太多的無用的超音波了,在同樣的位元率(或是說儲存空間)下,實際聽起來的音質就是會比著重於保留人耳聽力頻率範圍的格式來得差。
Ogg格式固然很好,它的取樣頻率也還可以支援到192kHz,比AAC的96kHz上限還多了兩倍。可惜的是,Ogg在編碼的時候有時會遇到如96kHz測試中211kbps的編碼結果,編碼出來的Ogg聲音訊號頻譜會和原始的聲音訊號頻譜差異極大。由於Ogg編碼器存在著這個問題,所以每次在編碼Ogg格式之後,都要看一下它的頻譜正不正常,多了一道麻煩的手續。
另外,新穎的Opus格式在48kHz的取樣頻率中表現非常優異,完全沒有儲存超音波的問題,位元的使用率極高。故能在中低位元率的時候,音質遠勝其它有損壓縮格式。