Opus編碼詳解
Opus的內(nèi)核包含兩種編碼方式,分別是CELT和SILK,它會根據(jù)不同的信號類型(語音、音樂)來采用不同的音頻壓縮方式。CELT與MP3功能類似,負(fù)責(zé)音樂存儲,而SILK會在編碼之前優(yōu)化語音信號。
音樂和語音
CELT編碼可以實(shí)時壓縮音樂。為了達(dá)到該目標(biāo),它將數(shù)據(jù)打包為小的音頻幀,從而保證只有2.5ms的延遲。
SILK編碼首先降低采用頻率到16kHz,然后才開始真正的編碼過程。
語音編碼
語音信號在正式編碼之前,首先要經(jīng)過SILK編碼器的詳細(xì)分解。
語音識別 將語音與周圍環(huán)境噪音分隔開。
音高分析 降低語音幀的采樣率。
噪聲分析 優(yōu)化噪聲到相應(yīng)的比特率。
預(yù)過濾器 調(diào)整信號,然后將其轉(zhuǎn)移到編碼區(qū)。
音高預(yù)測 通過目前的音頻幀計算未來的音頻幀變化。
頻率量化 使傳輸?shù)囊舾咦兊闷椒€(wěn)。
失真優(yōu)化 確保在可接受的語音失真內(nèi)采用最低比特率。
噪音量化 調(diào)整預(yù)過濾的噪聲與已編碼的語音幀。
區(qū)域編碼 處理每一個已編碼的音頻幀信號。
音頻編碼對比
與其他的音頻編碼方式相比,Opus在低延遲情況下覆蓋了所有的比特率。手機(jī)的語音編碼相對是快的,但是很難達(dá)到較高的通話質(zhì)量,而傳統(tǒng)的音頻編碼則在實(shí)時性上有欠缺。
新的音頻編碼標(biāo)準(zhǔn)Opus比傳統(tǒng)的MP3和AAC編碼更高效,尤其適用于網(wǎng)絡(luò)音頻傳輸。更重要的是,它是一個完全開放的標(biāo)準(zhǔn)。
包括VoIP、在線音樂、有聲讀物和播客(Podcasts)等在內(nèi),網(wǎng)絡(luò)流量中相當(dāng)大的一部分貢獻(xiàn)給了音頻傳輸。上面提到的這幾項(xiàng)操作,在快速的DSL線路上可以流暢地進(jìn)行。但如果使用的是蜂窩數(shù)據(jù)連接,VoIP通話就難免會產(chǎn)生令人不爽的延遲,在線音樂也會變得時斷時續(xù)。不過,現(xiàn)在已經(jīng)有一種名為Opus的音頻編碼會解決這些問題。它的最大優(yōu)勢是可以利用更小的帶寬帶來更高質(zhì)量的音頻,而且可以實(shí)時進(jìn)行。除此之外,Opus本身的編碼是完全開源的,開發(fā)者不需要擔(dān)心任何專利授權(quán)的問題。
從一開始,Opus編碼就是為交互式音頻傳輸而開發(fā)的。這意味著Opus編碼不僅適用于音樂,而且支持雙向音頻傳輸,例如為視頻電話和VoIP通話做了充分的優(yōu)化。2012年9月初,IETF(互聯(lián)網(wǎng)工程任務(wù)組)將其提升為正式的官方標(biāo)準(zhǔn),也就是說它事實(shí)上已經(jīng)成為了HTML標(biāo)準(zhǔn)的一部分。Opus音頻編碼是由非盈利的Xiph.org基金會、Skype和Mozilla等共同主導(dǎo)開發(fā)的。像MP3一樣,Opus也是一種有損音頻編碼,這意味著在傳輸過程中內(nèi)容會被壓縮。低延遲是它的最大特色,也就是說,它的信號延遲非常小,數(shù)據(jù)包會在20ms之內(nèi)被處理。相比之下, MP3文件的延遲是它的10倍。
高度的靈活性
Opus的開發(fā)者在靈活性上付出了很大的心血,從而保證了Opus的比特率可以從6Kb/s到510Kb/s,采樣率可以在8kHz到48kHz之間搖擺,音頻信號幀可以從2.5ms到60ms。從內(nèi)部結(jié)構(gòu)來看,Opus是開發(fā)者利用已經(jīng)存在的音頻編碼進(jìn)行優(yōu)化后組合而成的所謂混合編碼。Opus聯(lián)合了CELT(Constrained Energy Lapped Transform)和SILK編碼,并且對兩者進(jìn)行了改良。CELT編碼由于“實(shí)時”的特性,已經(jīng)被作為OGG家族的一部分。最初來自Skype的SILK編碼,從Skype 4.0開始已經(jīng)作為語音編碼的方式被引入。
大體上,Opus編碼器的結(jié)構(gòu)和功能都非常簡單。首先,輸入信號被以最高達(dá)48kHz的采樣率進(jìn)行采樣。因?yàn)槿说亩湟呀?jīng)很難分辨更高采樣率音頻的更多細(xì)節(jié)了。然后,根據(jù)頻率的不同,使數(shù)據(jù)流通過CELT或者SILK編碼器。如果最終需要的是高品質(zhì)的音樂,那么CELT編碼器是首選。而利用SILK,人們可以使用最優(yōu)化的帶寬來傳輸音頻。為了這個目標(biāo),SILK編碼必須做一些與之前的編碼不一樣的事情。
對話中的語音分析
SILK編碼適合采樣率不超過16kHz的低頻信號,一個典型的場景就是語音通話。因此,在Opus編碼中,所有低于16kHz采樣率的音頻內(nèi)容都由SILK編碼。SILK編碼器包含一系列組件,在這里將它們總結(jié)為4個部分:分析、預(yù)過濾、編碼和輸出。其中,音頻分析的背后其實(shí)是語音識別。首先,將音頻信號分為語音和環(huán)境噪音兩部分。將語音幀根據(jù)頻率分解為更小的音頻碎片,SILK編碼器過濾掉延遲信息,識別出有效語音信號的特點(diǎn)。第二項(xiàng)優(yōu)化是噪聲分析,它將周圍環(huán)境中重復(fù)的噪音打包為越小越好的音頻子幀(sub-frames),使其占用更小的帶寬。利用分析階段獲得的信息,SILK編碼器就可以進(jìn)行音高預(yù)測和頻率量化。例如,如果在一段對話中,音高(pitch)沒有大的變化,那么只需要傳輸變化部分的信息就可以了。這一步的目標(biāo)是讓數(shù)據(jù)流在保證質(zhì)量的同時,越少越好。噪聲的量化是另一種達(dá)成目標(biāo)的方法。在這個例子中,SILK編碼可以確保不進(jìn)行不必要的優(yōu)化,而且不可避免的噪聲沒有消耗過多的比特率。
所有的高頻信號,也就是頻率最高達(dá)20kHz的信號,都采用CELT編碼器處理。與MP3和AAC編碼一樣,它通過修改后的離散余弦變換(DCF)將頻率轉(zhuǎn)換為系數(shù),從而消減在隨后的量化中難以覆蓋或者人耳很難感知的頻率。開發(fā)者為Opus定義了3個模式,使得SILK和CELT也能夠同時工作:純SILK模式負(fù)責(zé)低帶寬下的語音傳輸;混合模式負(fù)責(zé)高質(zhì)量的語音傳輸;純CELT模式負(fù)責(zé)音樂傳輸。Firefox用戶從第15版開始可以在不安裝插件的情況下,直接播放Opus文件。視頻播放器VLC Media Player也將集成Opus編解碼?,F(xiàn)在打開opus-codec.org/examples網(wǎng)站就可以立即試聽采用Opus編碼的音頻文件樣例。