如果你這週傳過語音訊息、參加過視訊通話、或在 YouTube 上看過任何東西,你就用過 Opus。以串流數量算,它大概是世界上使用最多的音訊編解碼器,而音訊工程圈以外幾乎沒人聽過它——一部分因為它能用,一部分因為它通常藏在一個叫別的名字的檔案裡。
音訊壓縮以前是兩件分開的工作,由兩個分開的編解碼器家族負責。
語音編解碼器是為電話設計的。它們在低位元率下效率極高,因為它們專門對人聲建模——但把音樂丟進去,出來會是一團顫抖的爛泥,因為音樂跟人聲一點都不像。
音樂編解碼器像 MP3 和 AAC 是為錄音設計的。它們什麼都能處理,但需要更多資料,而且關鍵是它們會造成延遲:MP3 編碼器以大約 26 毫秒的區塊工作而且需要前瞻,所以等聲音從另一端出來,已經過了足夠讓即時對話變得尷尬的時間。
所以一個兩者都要承載的應用——一通有音樂在播的通話、一個在講話和歌曲之間切換的串流——只能要嘛挑一個然後做得很爛,要嘛在串流中途換編解碼器。
Opus 用一個編解碼器同時做到兩件事,而且會隨著內容改變自動在它的語音模式和音樂模式之間切換。它贏的原因就是這個。
Opus 做對的第二件事是延遲。它的畫格可以短到 2.5 毫秒,典型的即時設定端到端大約 20 毫秒——低到兩個人可以自然地打斷彼此,而那才是一通語音通話感覺活不活的真正測試。
它也降得很漂亮。在真實網路上封包一直在掉,而 Opus 可以重建短的空隙,並隨著連線變化即時調整位元率。一通在某人走出 Wi-Fi 範圍時還聽得懂的通話,就是在做這件事。
好得有意義,而且差距在最要緊的地方最大——低位元率。
它免權利金,而且是開放的 IETF 標準,這是它擴散的另一半解釋:一個通訊軟體可以直接附帶它,不必談授權。
這就是 Opus 從隱形的成功變成實際麻煩的地方。
Opus 是編解碼器,不是檔案格式——這個區分解釋了大部分的播放失敗。它必須住在一個容器裡,而它通常住在這幾個之一:
.opus——裝著 Opus 軌的 Ogg 容器。匯出的語音訊息通常就是這個。.ogg——同一個容器,較舊的副檔名。.caf——Apple 的容器,某些 iOS 語音錄音會用。結果就是那個熟悉的煩惱:你匯出一則語音訊息、拿到一個 .opus 檔,而你的播放器拒收——但同一段音訊在通訊軟體裡播得好好的,因為它自己帶了解碼器。那個檔案沒有壞。播放器只是不認得 Opus。
把 Opus 轉成 MP3 是相容性決定,不是品質決定。Opus 本身已經是有損的,所以重新編成 MP3 等於先解碼再壓一次——第二次只能損失更多。結果永遠不會比你手上的 Opus 好,而如果你挑了低位元率的 MP3,它會明顯更差。
所以非轉不可時再轉——要交檔案給用舊軟體的人、要匯進讀不了它的剪輯軟體、要上傳到拒收這個格式的地方——而且轉的時候用寬鬆的位元率,音樂就 192 kbps 以上。多出來的檔案大小,跟你救不回來的聽得見的損傷比起來什麼都不是。
如果你只是要聽,用一個原生支援 Opus 的播放器,就完全避開了這個損失。
誠實的總結:技術上 Opus 幾乎到哪都是比較好的選擇,而當你管不到誰會打開那個檔案時,MP3 仍然是比較安全的那個。
.opus、.ogg、WebM、MKV 或 .caf 裡——編解碼器不等於副檔名