FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group),為開源的影音多媒體處理框架,可以進行影音的解碼、編碼、編碼轉換、混合、抽取、串流和濾鏡,無論影音格式是從哪個地方出來的,從過去到現在的影音格式它幾乎都能夠支援。當然,它也可以利用Opus的官方開源Opus編碼器來進行Opus轉檔。



Opus的opusenc指令工具常用的轉檔參數不外乎就是控制變動位元率的--bitrate,其後面接的數值範圍在會跟聲道數量有關,每個聲道的位元率範圍是6 ~ 256 kbps,也就是說雙聲道的話,數值範圍在12 ~ 512之間。

有關於opusenc的詳細用法可以參考這篇文章:

https://magiclen.org/linux-opus/

Opus本身的指令工具固然好用,但它所支援的輸入格式有限。如果要更方便使用opusenc來進行Opus轉檔,甚至是直接將影片中的音軌轉成Opus格式的話,就要透過FFmpeg來完成了。不過FFmpeg有著自己的一套複雜的命令列介面(CLI),與opusenc的用法並不相同。

opusenc--bitrate參數會對應到FFmpeg的-b:a(-ab)參數。

透過FFmpeg輸出音質最高的Opus的指令如下(雙聲道):

ffmpeg -i 輸入的影音檔案路徑 -acodec libopus -b:a 512k 輸出的影音檔案路徑

不過Opus是強在中、低位元率,所以其實雙聲道用到--bitrate 175,聽起來就和原始音質差不多了。

ffmpeg -i 輸入的影音檔案路徑 -acodec libopus -b:a 175k 輸出的影音檔案路徑

CBR(固定位元率)和CVBR(約束的變動位元率)編碼

opusenc還有提供更能精確控制輸出位元率的編碼模式,當然愈固定的位元率,編碼效果愈差,不過我們就可以利用以下公式來預估編碼後的Opus檔案的大小:

#{{{
{ \text{固定或約束的變動位元率(Kbps, Kb/s)} \times \text{時間(s, 秒)} \over \text{8(b/B)} } = \text{Opus檔案的大小(KB)}
}}}#

使用FFmpeg來操作Opus官方編碼器時,若要使用CBR或CVBR編碼方式,可以傳入-vbr參數並在其後接上off(CBR)或是constrained(CVBR)。

例如以下指令可以輸出固定位元率為320kbps的Opus音訊:

ffmpeg -i 輸入的影音檔案路徑 -acodec libopus -b:a 320k -vbr off 輸出的影音檔案路徑

以下指令可以輸出約束的變動位元率為320kbps的Opus音訊:

ffmpeg -i 輸入的影音檔案路徑 -acodec libopus -b:a 320k -vbr constrained 輸出的影音檔案路徑