元宵節(jié)將近,意味著“年”就要過完了。趁春晚的余溫未過,我們再來回味下支撐這場“文化年夜飯”現(xiàn)場直播的技術(shù):超高清淺壓縮。這技術(shù)一看就是處理視頻的,那么它到底有何神奇之處呢?“超高清”好理解,無非就是說視頻畫面的清晰度高,分辨率達(dá)到4K乃至8K。
那這里的“淺壓縮”又是什么意思呢?我們先從視頻的一些基礎(chǔ)概念說起。
視頻的一些基本概念
視頻在本質(zhì)上將一幅一幅獨(dú)立的畫面快速地連續(xù)播放,利用眼睛的視覺暫留效應(yīng)讓人產(chǎn)生“動(dòng)”的感覺。視頻中每一幅畫面稱作一“幀(frame)”,每秒鐘播放的畫面數(shù)量被稱作“幀率”,單位為FPS,即Frame Per Second。一般來說,如果眼睛所看到的畫面幀率高于每秒約10至12張的時(shí)候,就會認(rèn)為是連貫的。為得到更為細(xì)膩的效果,電影制作常用24FPS、25FPS、30FPS等幀率。
更高的幀率,比如60FPS 和 120FPS 用于錄制視頻以慢動(dòng)作播放。每一秒都要連續(xù)播放這么多畫面,視頻的大小一般來說都遠(yuǎn)大于圖片,在線流暢播放占用的帶寬也要大得多。如果不做任何處理,理論上要在線播放分辨率為4K,幀率為30FPS的視頻,需要占用的帶寬接近6Gbps。這簡直就是流量饕餮。采用有線還能近距離傳輸還能扛住,用無線的方式就可太難了,即使強(qiáng)如5G也捉襟見肘。因此,我們需要對視頻進(jìn)行壓縮。
視頻的深度壓縮
為什么視頻可以被壓縮呢?是因?yàn)槊恳粠膬?nèi)部,以及多個(gè)幀間存在著大量的冗余信息。首先,在每一幀畫面內(nèi),一幅圖像之內(nèi)相鄰像素的顏色相關(guān)性很強(qiáng),紋理大概率是連續(xù)變化的,背景還可能有大量重復(fù)的顏色。如果采用適當(dāng)?shù)乃惴?,就可以去除冗余,使?shù)據(jù)量得以壓縮。然后,在多幀的畫面之間,如果沒有場景切換,相鄰幀之間絕大部分畫面是一樣的:比如一只蝴蝶在花叢中飛行,多幀畫面之間除了蝴蝶的姿態(tài)變化,其余都是不變的,數(shù)據(jù)自然就可以被壓縮。
因此,視頻的壓縮有“幀內(nèi)預(yù)測壓縮”和“幀間預(yù)測壓縮”兩種方式,將視頻分解為多個(gè)像素塊,再結(jié)合當(dāng)前幀和前后幀的內(nèi)容進(jìn)行壓縮。
幀內(nèi)預(yù)測的主要思想是:畫面紋理是連續(xù)的,存在大量的“空間冗余”,因此可以使用相鄰的已解碼的像素預(yù)測未知像素。實(shí)際編碼時(shí)只需對原始塊減去預(yù)測塊之后剩下的殘差塊進(jìn)行操作,這樣數(shù)據(jù)量可以有效減少。
幀間預(yù)測的主要思想是:既然相鄰幀之間存在極強(qiáng)的相關(guān)性,存在大量的“時(shí)間冗余”,那么就只要找到當(dāng)前塊在參考幀中的位置,計(jì)算對應(yīng)的位移并得出兩幀之間的殘差,然后只發(fā)送這個(gè)數(shù)據(jù)量很小的殘差幀就可以了。
這樣一來,壓縮算法就把視頻內(nèi)容編碼為I幀以及P幀。其中I幀作為關(guān)鍵幀,必須能夠完全獨(dú)立解碼,因此只能使用幀內(nèi)預(yù)測;P幀作為預(yù)測幀,僅反映上一個(gè)I幀變化的部分,既可以使用幀內(nèi)預(yù)測,也可以使用幀間預(yù)測,但離開了I幀就無法解碼。除了I幀和P幀之外,還有一種B幀(雙向幀)。B幀的編解碼可同時(shí)參考左右的幀,需要傳輸?shù)臄?shù)據(jù)量更小。
由于視頻內(nèi)容是連續(xù)的,往往時(shí)域的相關(guān)性更大,所以一般而言幀間預(yù)測的壓縮效率更高,因此P/B幀一般都遠(yuǎn)小于I幀。這種幀內(nèi)預(yù)測壓縮和幀間預(yù)測壓縮雙管齊下的效果非常好,可以在畫質(zhì)基本沒有損耗的前提下將原視頻壓縮得非常小,因此也叫做“深度壓縮”。
以目前主流的壓縮編碼標(biāo)準(zhǔn)H.264 舉例,1080P分辨率,60FPS的視頻,經(jīng)過壓縮編碼,僅需4Mbps的網(wǎng)絡(luò)帶寬,在手機(jī)上就有不錯(cuò)體驗(yàn)。
深度壓縮的不足
然而,萬事萬物都有兩面性。深度壓縮的代價(jià)是什么呢?
最容易想到的就是:直播的播放延時(shí)。
前面已經(jīng)說過,P幀和B幀的解碼需要依賴其他幀,當(dāng)終端觀看直播時(shí),極有可能接入的時(shí)間點(diǎn)是不能獨(dú)立解碼的預(yù)測幀,那么播放程序必須要等到關(guān)鍵幀后,才能正常解碼播放,這就不可避免地導(dǎo)致了時(shí)延。
想象一下,如果兩個(gè)I幀之間的間隔被設(shè)置為2秒,那么如果運(yùn)氣不好,接入直播后就有可能要等2秒后才能看到畫面。
上述播放的接入時(shí)延其實(shí)還算小問題,深度壓縮對視頻制播的影響才是不可接受的。眾所周知,在視頻制播時(shí),導(dǎo)播臺的作用十分關(guān)鍵。導(dǎo)播臺主要作用是將多機(jī)位的視頻信號整合到一起,根據(jù)現(xiàn)場需求,由導(dǎo)播人員進(jìn)行實(shí)時(shí)切換。
讓我們把視線聚焦到上圖的左側(cè)。假設(shè)在春晚舞臺上,藝術(shù)家正引亢高歌,多個(gè)機(jī)位拍攝不同角度的畫面?zhèn)骰貙?dǎo)播臺進(jìn)行制播處理,進(jìn)行切換、分屏、疊加元素等。但由于這些視頻流采用了深度壓縮,極有可能導(dǎo)播員在將直播畫面由機(jī)位1切換到機(jī)位2時(shí),剛好趕上了不可解碼的非關(guān)鍵幀,這下可好,所有觀眾的屏幕都卡住了。
因此,在這種場景下,使用深度壓縮是不合適的。再說了,從機(jī)位到導(dǎo)播臺的距離一般都不遠(yuǎn),用超大帶寬的有線傳輸就行,也不需要節(jié)省帶寬,自然也沒必要那么極致的壓縮,采用“淺壓縮”技術(shù)就夠了。
為什么需要淺壓縮
所謂淺壓縮,其實(shí)就是舍棄掉會產(chǎn)生P幀或者B幀的幀間預(yù)測編碼,全部采用幀內(nèi)預(yù)測編碼,這樣生成的視頻就全部都是I幀,每一幀都可以完全獨(dú)立解碼,雖然視頻的數(shù)據(jù)量大幅增加,但也消除了深度壓縮的不足之處。
既然淺壓縮技術(shù)如此順理成章,為什么還是在春晚直播時(shí)產(chǎn)生了轟動(dòng)呢?
這是因?yàn)?G的引入。
傳統(tǒng)的拍攝,要么使用固定拍攝機(jī)位,要么使用拖著線纜的可移動(dòng)拍攝機(jī)位。這是因?yàn)閭鬏敎\壓縮視頻需要的帶寬大,如果壓縮率為1/8,每路4K視頻也需要1Gbps的帶寬,同時(shí)時(shí)延還要低,普通的無線方式難以滿足。但5G可以。5G-A搭建的視頻制播專網(wǎng)可實(shí)現(xiàn)10Gbps以上的帶寬,自然可以實(shí)現(xiàn)“5G超高清淺壓縮制播”了。由于時(shí)延低,無線機(jī)位和有線機(jī)位所拍攝的畫面還可以實(shí)現(xiàn)絲滑混切。最后我們來總結(jié)一下。
淺壓縮的主要用于場景是顯示接口和專業(yè)的視頻制播,信道的帶寬非常充裕,要求的是無損的畫質(zhì)和低時(shí)延,壓縮率一般就是1/8。普通用戶一般情況下接觸不到淺壓縮,因此叫做ToB壓縮。深度壓縮主要是面向用戶的,因此也叫做ToC壓縮。視頻從導(dǎo)播臺制播完成之后,即采用深度壓縮之后進(jìn)行分發(fā),壓縮率能達(dá)到1/200甚至1/500。這樣一來,不但可以最大化節(jié)省傳輸帶寬,觀眾看起來也流暢。
非常感謝能看到最后。