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



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

Opus官方網站:

安裝Opus Tools

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

sudo apt install opus-tools

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

sudo dnf install opus-tools

Opus Tools包含什麼工具?

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

  • opusdec:Opus的解碼器。
  • opusenc:Opus的編碼器。
  • opusinfo:Opus檔案的資訊顯示器。
  • opusrtp:發送Opus音訊至RTP串流,或從RTP串流接收Opus音訊。

這篇文章將會著重介紹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檔案來使用不同的--bitrate參數值實際轉檔測試。

先來看看WAV檔的頻譜:

linux-lame

--bitrate 512

將參數--bitrate設置為512,可以輸出opusenc能夠支援的最高音質。(一個聲道最高為256,兩個聲道最高就是512)

將測試用的WAV檔使用--bitrate 512轉換後,得到的音樂檔的變動位元率平均為486kbps,檔案大小約為原先的35%,頻譜如下:

linux-opus

從上圖可以發現將WAV轉換成--bitrate 512的Opus後,20.1kHz以上的頻率完全被過濾掉,但20kHz以下的頻譜完全沒有變動。這樣的結果有點像是用LAME--preset insane轉出的MP3檔案一樣。實際播放來聽,聽不出與原始檔案的差異。

--bitrate 320

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

將測試用的WAV檔使用--bitrate 320轉換後,得到的音樂檔的變動位元率平均為317kbps,檔案大小約為原先的23%,頻譜如下:

linux-opus

從上圖可以發現將WAV轉換成--bitrate 320的Opus後,頻譜跟用--bitrate 512轉出來的幾乎沒有差異。想當然耳,實際播放來聽,也聽不出與原始檔案的差異。

--bitrate 256

將測試用的WAV檔使用--bitrate 256轉換後,得到的音樂檔的變動位元率平均為256kbps,檔案大小約為原先的18%,頻譜如下:

linux-opus

從上圖可以發現將WAV轉換成--bitrate 256的Opus後,頻譜跟用--bitrate 320轉出來的也是幾乎沒有差異,音質當然也是聽不出差異的。

--bitrate 192

將測試用的WAV檔使用--bitrate 192轉換後,得到的音樂檔的變動位元率平均為193kbps,檔案大小約為原先的14%,頻譜如下:

linux-opus

從上圖可以發現將WAV轉換成--bitrate 192的Opus後,頻譜有了細微的變化,但音質依然聽不出差異。到這裡我們可以稱Opus 192kbps的音質和MP3 320kbps差不多。

--bitrate 128

將測試用的WAV檔使用--bitrate 128轉換後,得到的音樂檔的變動位元率平均為130kbps,檔案大小約為原先的9%,頻譜如下:

linux-opus

從上圖可以發現將WAV轉換成--bitrate 128的Opus後,頻譜有了較明顯的變化。聲音實際播放起來和原始的有點差異,但音質還算不錯。

--bitrate 96

再來將參數--bitrate設置為96試試看,來壓榨出Opus在低位元率時的實力。

將測試用的WAV檔用--bitrate 96轉換後,得到的音樂檔的變動位元率平均為98kbps,檔案大小約為原先的7%,頻譜如下:

linux-opus

從上圖可以發現將WAV轉換成--bitrate 96的Opus後,頻譜在16kHz以下又有更多變化,在16kHz以上的變化卻十分明顯。實際播放出來聽,聲音音質還算可以。

--bitrate 64

最後將參數--bitrate設置為64試試看,來看看Opus在極低位元率時的實力。

將測試用的WAV檔用--bitrate 64轉換後,得到的音樂檔的變動位元率平均為65kbps,檔案大小約為原先的5%,頻譜如下:

linux-opus

從上圖可以發現將WAV轉換成--bitrate 64的Opus後,頻譜各個頻段皆有明顯變化。實際播放出來聽,聲音音質還可以接受。

使用--bitrate參數來轉檔

根據以上七種不同--bitrate參數值的測試,--bitrate 512是不用考慮的項目,用它轉換出來的Opus檔案大小和使用--bitrate 320轉換出來的Opus檔案大小差很多,頻譜幾乎沒有差異,音質可以說是相等的。而--bitrate 320--bitrate 256--bitrate 192的頻譜雖然有點差異,但是無法聽得出來的差距。所以說,如果是要收藏音樂的話,--bitrate 192是首選。如果有檔案傳輸需求的話,--bitrate 192同樣也可以輕鬆勝任。

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

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

opusenc與其他解碼器合作

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

FLAC轉Opus

必須要先有flac套件。

基於Debian的Linux發行版可以使用以下指令來安裝:

sudo apt install flac

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

sudo dnf install flac

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

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

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

APE(MAC)轉Opus

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

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

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

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

Ogg轉Opus

必須要先有vorbis-tools套件。

基於Debian的Linux發行版可以使用以下指令來安裝:

sudo apt install vorbis-tools

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

sudo dnf install vorbis-tools

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

oggdec 輸入檔案路徑 -o - | opusenc --bitrate 192 - 輸出檔案路徑

AAC(M4A)轉Opus

必須要先有faad套件。

基於Debian的Linux發行版可以使用以下指令來安裝:

sudo apt install faad

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

sudo dnf install faad2

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

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

MP3轉Opus

必須要先有lame套件。

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

sudo apt install lame

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

sudo dnf install lame

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

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