在Linux上使用Opus Tools將音樂轉成Opus格式


Opus Tools包含了Opus編碼器(opusenc)、解碼器(opusdec)以及其它相關工具。Opus是比MP3OGG、AACHE-AAC(AAC+)還要新的音訊編碼格式,它整合了Skype開發的語音編碼格式─SILK,與超低延遲的CELT(Constrained Energy Lapped Transform)編碼格式,因此Opus非常適合用於即時地(Real-Time)的網路語音傳輸。雖然Opus算是專門用來進行語音編碼與傳輸的格式,但他在高音質音樂領域上,也絲毫不遜於其它如MP3OGG、AAC或是HE-AAC(AAC+)等常見的有損編碼格式。此外,OpusOgg一樣,都是開源、自由、免費的音訊編碼格式,沒有麻煩的專利授權問題。

Opus支援6kbps到512kbps位元率(每個聲道6kbps~256kbps),可使用固定位元率(CBR)和變動位元率(VBR),但它的取樣頻率固定為48kHz,因此不適合用於高頻聲音領域上。也同時因為降不下來的取樣頻率,有可能使得低位元率的時候,需要額外的位元來紀錄幾乎已被壓縮過濾掉的高頻訊號,導致音質不佳的情形。但在實際測試中,Opus在低位元率時的音訊頻譜表現也是不俗。

Opus官方網站:

https://www.opus-codec.org/

以下均以Linux Mint為例。

安裝Opus Tools

如果要安裝Opus Tools,可以在終端機下輸入以下指令:

sudo apt-get install opus-tools

linux-opus

Opus Tools包含什麼工具?

Opus Tools包含了以下幾種工具:

這篇文章將會著重介紹Opus編碼器(opusenc)的用法。

Opus編碼器opusenc

opusenc自帶文件

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

opusenc --help

linux-opus

從上圖中可以看到opusenc可以設定的參數有許多種,但我們其實只要使用「--bitrate」參數來調整輸出的Opus位元率,就已經足夠應付大部分的狀況。

opusenc調整變動位元率(--bitrate參數)

根據opusenc自帶的文件,我們可以知道opusenc支援三種編碼方式,分別是變動位元率(VBR)、約束的變動位元率(CVBR)和固定位元率(CBR)。固定位元率就是讓每個頁框,無論資料多大多小,都用固定的位元數量來記錄資料。變動位元率就是由Opus編碼器自行去計算每個頁框(frame)合適的位元率壓縮儲存資料,資料較多的頁框位元率較高、資料較少的頁框位元率較低,如此一來輸出的檔案大小在保有音質的條件下也可以比使用固定位元率要來的小。而約束的變動位元率則是儘量讓最後平均的位元率去逼近指定的位元率,輸出的檔案大小比較能夠確定,類似平均位元率(ABR),但結果比平均位元率要好。

音質和檔案體積比來說,當然是使用變動位元率最好,而opusenc預設也是使用變動位元率來進行編碼,因此我們只需要更動「--bitrate」參數即可控制輸出的Opus聲音品質。以下將會以擁有高於CD音質WAV檔案(16bit, 48000Hz, 約41.6MB)來使用不同的「--bitrate」參數值實際轉檔測試。

先來看看WAV檔的頻譜:

linux-opus

--bitrate 512

將參數「--bitrate」設置為512,可以輸出opusenc能夠支援的最高音質

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

linux-opus

從上圖可以發現將WAV轉換成「--bitrate 512」的Opus後,20.1kHz以上的頻率完全被過濾掉,但20kHz以下的頻譜完全沒有變動。這樣的結果有點像是用LAME「--preset insane」轉出的MP3檔案一樣,但MP3並未完全保留20kHz以下的頻譜形狀。到這裡我們可以知道Opus 491kbps音質大於MP3 320kbps

讓我們再稍微降低位元率看看。

--bitrate 307

將參數「--bitrate」設置為307,和上面設成512已經有不小的差距。

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

linux-opus

從上圖可以發現將WAV轉換成「--bitrate 307」的Opus後,頻譜跟用「--bitrate 512」轉出來的完全沒有差異(實際上一定有,但是從頻譜上肉眼看不出來,更別說聽得出差異了)。到這裡我們可以知道Opus 320kbps音質也大於MP3 320kbps

--bitrate 206

將參數「--bitrate」設置為206,再降100k位元試試看。

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

linux-opus

從上圖可以發現將WAV轉換成「--bitrate 206」的Opus後,頻譜在16kHz以上有了很細微的變化,但這個變化非常的小。到這裡我們可以知道Opus 219kbps音質還是略大於MP3 320kbps

--bitrate 175

將參數「--bitrate」設置為175試試看。

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

linux-opus

從上圖可以發現將WAV轉換成「--bitrate 175」的Opus後,頻譜在16kHz以下也有了很細微的變化,16kHz以上也有了很細微的變化。到這裡我們可以猜測Opus 188kbps音質MP3 320kbps差不多。Opus的檔案大小比原先的WAV檔案小了八倍到九倍。

--bitrate 111

將參數「--bitrate」設置為111試試看。

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

linux-opus

從上圖可以發現將WAV轉換成「--bitrate 111」的Opus後,頻譜在16kHz以下又有更多的細微的變化,在16kHz以上的變化卻十分明顯。如果是MP3或是AAC到了這個位元率,16kHz的訊號早就不知道被丟到哪去了,而Opus居然還硬把它留著,而且還可以同時保有中低頻的品質。此時Opus的檔案大小比原先的WAV檔案小了十二倍到十三倍,聲音實際播放起來才和原始的有點差異,但音質還算不錯。

--bitrate 65

最後將參數「--bitrate」設置為65試試看,來壓榨出Opus在低位元率時的實力。

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

linux-opus

從上圖可以發現將WAV轉換成「--bitrate 65」的Opus後,頻譜在16kHz以下有了明顯的變化,在16kHz以上的變化十分劇烈。72kbpsOpus音質雖然受到很大的影響,但不會像位元率低於128kbpsMP3音樂那樣缺乏16kHz以上的高頻音有壓縮感,聽久了也不會暈眩,是可以令人接受的聲音。此時Opus的檔案大小比原先的WAV檔案小了二十倍到二十一倍,非常適合用於低頻寬、低流量的網路傳輸。

使用--bitrate參數來轉檔

根據以上六種不同「--bitrate」參數值的測試,「--bitrate 512」是不用考慮的項目,用它轉換出來的Opus檔案大小和使用「--bitrate 307」轉換出來的Opus檔案大小差很多,頻譜幾乎沒有差異,音質可以說是相等的。而「--bitrate 307」、「--bitrate 206」和「--bitrate 175」的頻譜雖然有點差異,但是無法聽得出來的差距。所以說,如果是要收藏音樂的話,「--bitrate 175」是首選,它可以省下十二倍到十三倍的空間,又可以保留原始音質。當然,如果有高位元率情節的話,還是可以用「--bitrate 512」來收藏音樂,只是會多花將近二倍到三倍的儲存空間。如果有檔案傳輸需求的話,「--bitrate 175」也可以輕鬆勝任。

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

opusenc --bitrate 175 輸入檔案路徑 輸出檔案路徑

opusenc與其他解碼器合作

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

FLAC轉Opus

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

sudo apt-get install flac

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

flac -c -d 輸入檔案路徑 | opusenc --bitrate 175 - 輸出檔案路徑

APE(MAC)轉Opus

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

32位元版本64位元版本

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

mac 輸入檔案路徑 - -d | opusenc --bitrate 175 - 輸出檔案路徑

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

Ogg轉Opus

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

sudo apt-get install vorbis-tools

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

oggdec 輸入檔案路徑 -o "./oggtemp.wav" ; opusenc --bitrate 175 "./oggtemp.wav" 輸出檔案路徑 ; rm "./oggtemp.wav"

AAC轉Opus

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

sudo apt-get install faad

使用以下指令可以將AAC(M4A)格式的音樂檔案轉成Opus音樂檔

faad -o - 輸入檔案路徑 | opusenc --bitrate 175 - 輸出檔案路徑

MP3轉Opus

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

sudo apt-get install lame

使用以下指令可以將MP3格式的音樂檔案轉成Opus音樂檔

lame --decode 輸入檔案路徑 - | opusenc --bitrate 175 - 輸出檔案路徑

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章