01 Introduction:libaom AV1
我們先簡(jiǎn)單看一下AV1。AV1是由AOMedia(開(kāi)放多媒體聯(lián)盟)開(kāi)發(fā)的,就是由多家公司聯(lián)合起來(lái)開(kāi)發(fā)一種開(kāi)源且沒(méi)有版稅的視頻編碼格式,AV1就是其第一代編碼格式。
AV1于2018年完成,在那個(gè)時(shí)候,AV1的編碼器復(fù)雜程度是非常高的。
但是AV1與它的前身VP9相比,如果在同樣的視頻質(zhì)量條件下,它能夠提供超過(guò)30%的bitrate的節(jié)省,所以它的壓縮率還是非常高。
Libaom AV1是AV1的參考代碼,我把它的link放在了上圖,大家有興趣可以測(cè)試一下。
AV1增加了很多功能強(qiáng)大的壓縮工具,復(fù)雜性非常高,所以我們的目標(biāo)就是優(yōu)化AV1的編碼器,使得它能夠真正用在產(chǎn)品線(xiàn)上。
優(yōu)化工作著重于以下兩個(gè)應(yīng)用方面:
第一個(gè)是VOD的encoding。像YouTube這種編碼器一般都是離線(xiàn)進(jìn)行,所以它對(duì)編碼器的速度要求沒(méi)有那么高,但是它對(duì)壓縮率的要求非常高;
第二種就是實(shí)時(shí)通訊的編碼。大家都知道實(shí)時(shí)通訊中要求非常快的實(shí)時(shí)編碼器,而AV1的優(yōu)勢(shì)就在于它能夠允許在非常低的字節(jié)率的情況下進(jìn)行視頻通訊,比如說(shuō)Google的Duo是一個(gè)手機(jī)上面的視頻應(yīng)用程序,它可以在20-30kbps這么低的字節(jié)率情況下實(shí)現(xiàn)手機(jī)上的視頻通訊。
這對(duì)一些新興市場(chǎng)的用戶(hù)來(lái)說(shuō)是非常有用的,Duo在2020年就已經(jīng)開(kāi)始使用了。現(xiàn)在,我們下一個(gè)目標(biāo)是Google的Chrome。WebRTC也是開(kāi)源的,有興趣大家可以看一看。
02VOD encoding
第二部分我們介紹VOD的編碼。
這是一個(gè)簡(jiǎn)單的AV1編碼器概述,第一個(gè)是預(yù)處理階段,其主要目的是rate control,就是怎么選擇frame或者block的quantizer;第二個(gè)階段是真正的編碼階段。
主要任務(wù)就是決定每一個(gè)block要選擇用什么樣的partition,mode,以及transform 等等;之后會(huì)對(duì)frame進(jìn)行濾波,AV1支持三種In-loop的濾波器;最后一個(gè)階段要把Bitstream打包寫(xiě)到一個(gè)文件中。
編碼器的整個(gè)過(guò)程中,絕大多數(shù)的時(shí)間花在了編碼階段。下面,我們就主要講一下這個(gè)階段的技術(shù)優(yōu)化。
首先是Partition搜索。在A(yíng)V1中,最大的塊尺寸是128x128,最小塊的尺寸可以到4x4。對(duì)每一個(gè)尺寸的塊,可以選擇10種partition的類(lèi)型,例如:None,Split,Rectangular,及AB partition 類(lèi)型。
所以說(shuō)搜索空間是非常巨大的。我們主要用的方法是機(jī)器學(xué)習(xí),就是建立ML模型,對(duì)每一種partition的尺寸和類(lèi)型,我們可以決定是否要去評(píng)估它,還是可以略過(guò)它。
這樣就大大減少了搜索空間,達(dá)到非常好的優(yōu)化結(jié)果。
下一步就是我們提到的mode,即prediction mode的決策。在A(yíng)V1中,一個(gè)block的prediction mode選擇有超過(guò)150種。
理論上,評(píng)估一個(gè)mode的好壞要基于它的RD成本,成本越低則越好。mode決策,我們采用一個(gè)多級(jí)的方法。
在初始快速評(píng)估級(jí),因?yàn)镽D成本計(jì)算非常慢,我們就不去精確計(jì)算RD成本,而是用一個(gè)近似模型來(lái)估計(jì)出RD成本。
雖然RD成本的精度不高,也能夠快速排除一些非常不適合的mode。第二級(jí)評(píng)估中,我們進(jìn)行RD成本的簡(jiǎn)化計(jì)算,進(jìn)一步排除很大一部分不適合的mode。
所以,只有幾個(gè)候選mode留下來(lái)。在最后一級(jí),我們仔細(xì)評(píng)估每一個(gè)候選mode,最后通過(guò)它們的RD成本找出最好的mode。
AV1支持多種變換類(lèi)型。我們?cè)趦?yōu)化中間采用了機(jī)器學(xué)習(xí)的模型。基本思路是分析prediction之后的residue信號(hào),通過(guò)分析找到有用的feature。如果這些feature跟最后變換的類(lèi)型相關(guān)的話(huà),就可以利用它們估計(jì)哪一種變換類(lèi)型是比較適合的。通過(guò)這樣做優(yōu)化,達(dá)到一個(gè)加速的結(jié)果。
我們簡(jiǎn)單看一下AV1跟VP9的性能比較。對(duì)產(chǎn)品線(xiàn)上的應(yīng)用,我們推薦AV1用speed2 到speed6。對(duì)VP9,我們推薦用speed1到speed4。這些編碼速度足夠快,而且提供很好的速度與壓縮率之間的平衡。上表中給出了AV1的speed2跟VP9的speed1的比較。我們用不同分辨率的一些視頻來(lái)做測(cè)試,采用了四種指標(biāo),即:AVG PSNR,Overall PSNR,SSIM還有VMAF。可以看到AV1的speed2相比較于VP9的speed1,平均可以給到超過(guò)30%的BD-rate的節(jié)省,在所有四種指標(biāo)上都有這樣的表現(xiàn)。
在上圖中,我們把編碼器的速度也考慮進(jìn)來(lái),這里給出的數(shù)據(jù)都是單線(xiàn)程的結(jié)果。豎軸是BD-rate節(jié)省的百分?jǐn)?shù),是由前面提到的四種指標(biāo)平均得到的。而橫軸是相對(duì)的編碼器時(shí)間。可以看到,上面這條曲線(xiàn)是VP9的speed1到speed4,下面的曲線(xiàn)是AV1的speed2到speed6。AV1 speed2的BD-rate的節(jié)省超過(guò)30%,但它的編碼時(shí)間差不多是VP9 speed1的六倍多,比較慢。再來(lái)看AV1的speed 5,它跟VP9的speed2的編碼時(shí)間基本上是一樣的,而且比VP9 speed2提供22%的更多的BD-rate節(jié)省。從這點(diǎn)上也可以看到,相比于VP9來(lái)說(shuō),AV1潛力更大,它能夠帶來(lái)的BD-rate的節(jié)省更多。
在編碼器中,為了能夠更好地加速,多線(xiàn)程的支持也是必不可少的。現(xiàn)在A(yíng)V1編碼器中,我們有三級(jí)多線(xiàn)程的實(shí)現(xiàn)。首先,最直接的,是基于tile的多線(xiàn)程。在A(yíng)V1中,tile都可以獨(dú)立的編碼和解碼。每一個(gè)tile中間,我們還有基于行的多線(xiàn)程。行之間的編碼不是獨(dú)立的。比如說(shuō),下面一行中的塊要開(kāi)始的話(huà),它上面一行右邊的塊應(yīng)該先完成,所以有依賴(lài)性存在,在實(shí)現(xiàn)中要正確處理。上圖給出了一個(gè)簡(jiǎn)單的多線(xiàn)程例子,這幅圖里一共有兩個(gè)tile,每一個(gè)tile有四行。我們會(huì)建一個(gè)job queue,把所有job放進(jìn)來(lái)依次處理。“Tile+行”的多線(xiàn)程性能比單純只基于tile的多線(xiàn)程要好很多。
最近我們完成了frame并行處理 (FPMT)多線(xiàn)程。如果在“tile+行”的多線(xiàn)程之外,還有更多的線(xiàn)程可以用的時(shí)候,你可以再打開(kāi)FPMT,這樣可以達(dá)到更好的效果。要使用FPMT,用戶(hù)要在編碼命令設(shè)置中打開(kāi)它,即:“--fp-mt=1”。這樣,如果你設(shè)置的可使用線(xiàn)程足夠多的話(huà),它就會(huì)啟動(dòng)。
大家可能知道,在A(yíng)V1編碼中,一個(gè)編碼單元是一組frame(即:GOP)。FPMT實(shí)現(xiàn)是基于A(yíng)V1 GOP結(jié)構(gòu)。
比如,AV1里比較常用的就是16個(gè)frame一組的GOP或者32個(gè)frame一組的GOP。這里我給了一個(gè)GOP=16的例子,我們來(lái)看表中最下面的一行,從frame 0開(kāi)始,0是Key frame,下一幅是frame 16,叫做Alt-ref frame,然后再到frame 8、frame 4。
接下來(lái),我們稍微改變了一下編碼的順序。本來(lái)frame 2下來(lái)是frame 1,frame 3,然后,frame 6,frame 5,frame 7。現(xiàn)在為了能夠并行處理這些frame,我們把frame順序改成2,6然后再做1、3、5、7。因?yàn)?、3、5、7都是leaf frame,可以被設(shè)置為non-reference frame,即:這些frame不會(huì)被用來(lái)作為別的frame的參考frame,所以對(duì)它們的編碼質(zhì)量要求不高。
這樣的話(huà),這四個(gè)frame可以并行處理,然后下一層的2和6也可以拿來(lái)并行處理。這樣的順序調(diào)整允許更多frame的并行處理,達(dá)到的效果會(huì)更好。
這里我們給出一個(gè)應(yīng)用實(shí)例,來(lái)顯示編碼器多線(xiàn)程的scaling ratio。這是一個(gè)1080p和4K的視頻測(cè)試結(jié)果,我們用的tile是8個(gè)(2 rows x 4 columns)。對(duì)于4K視頻,可以看到,如果線(xiàn)程數(shù)足夠多,比如說(shuō)16或者24的時(shí)候,多線(xiàn)程的速度是單線(xiàn)程速度的10倍,達(dá)到了很好的加速效果。
如果沒(méi)有FPMT的話(huà),在線(xiàn)程到達(dá)一定數(shù)量的時(shí)候,scaling ratio就飽和了。有了FPMT,在有更多線(xiàn)程可以利用的時(shí)候,scaling ratio還可以提高。這就進(jìn)一步提高了多線(xiàn)程編碼器的性能。
03RTC encoding
下面我們看一下實(shí)時(shí)通訊中的AV1編碼。就像我們開(kāi)頭講的,在實(shí)時(shí)通訊的應(yīng)用中,為了保證正常的視頻通話(huà),編碼器的速度一定要非常快而且不能有延遲。所以,實(shí)時(shí)編碼不可能像VOD情況下可以用兩個(gè)甚至三個(gè)pass的編碼來(lái)達(dá)到好的壓縮效率,在這種時(shí)候,只能用一個(gè)pass的編碼,不能用任何lookahead frame,所以,基本上來(lái)一個(gè)frame就得立刻去處理它。
現(xiàn)在A(yíng)V1的實(shí)時(shí)編碼器的速度范圍是speed5 到10。Speed 5和6共用了一些VOD代碼,壓縮率高,但也復(fù)雜一點(diǎn)。Speed 7-10是專(zhuān)用的實(shí)時(shí)代碼,所以會(huì)更快一些。
在多線(xiàn)程的支持上,主要是基于tile和基于行的多線(xiàn)程。因?yàn)椴辉试S延遲,所以frame的并行在這里不實(shí)用。還有,AV1 RTC編碼器中支持scalable video coding(SVC),主要是spatial layers和temporal layers。 Rate control方面的話(huà),對(duì)于RTC來(lái)講,因?yàn)闆](méi)有太多關(guān)于視頻frame的信息,所以多用constant bitrate(CBR),而且在A(yíng)V1 RTC編碼器中還會(huì)支持一些adaptive quantization mode,比如:Background cyclic refreshing。
因?yàn)樵谝曨l通話(huà)中,為了保證通話(huà)的平穩(wěn),單一frame編碼后的bitstream size不應(yīng)該比平均frame bitstream size大太多。所以,這種情況下,我們采用了一個(gè)周期性的refreshing。比如,在每一個(gè)frame中選定某一個(gè)百分比的一些塊,而且這些塊會(huì)是后續(xù)的frame的參考。
這樣,我們就可以增加這些塊的bits,提高壓縮性能,但不會(huì)增大單一frame的bitstream size。這也是實(shí)時(shí)通訊編碼器與VOD編碼器設(shè)計(jì)上的不同。
這里給出AV1和VP9實(shí)時(shí)通訊編碼器的速度和BD-rate節(jié)省的一個(gè)比較。因?yàn)镚oogle Meet 使用了VP9 speed7,所以我們這里用VP9 speed7作為baseline。可以看到,AV1的speed6能夠提供37%的BD-rate節(jié)省,但是相應(yīng)的話(huà),它的編碼器的時(shí)間會(huì)到五倍多,比較慢。
AV1 speed9和10已經(jīng)跟VP9編碼器的時(shí)間類(lèi)似,而且還可以提供13%到16%的BD-rate節(jié)省,所以從這里也能夠看出AV1的潛力還是更大一些。
下面就是一個(gè)簡(jiǎn)短的總結(jié)。經(jīng)過(guò)這幾年的優(yōu)化,Libaom的AV1給VOD的應(yīng)用提供了一個(gè)非常優(yōu)秀的解決方案,希望我們的工作能夠促進(jìn)AV1的廣泛應(yīng)用,滿(mǎn)足用戶(hù)的所有需求。AV1 RTC編碼器優(yōu)化還在持續(xù)地進(jìn)行中,如果你對(duì)libaom AV1代碼熟悉的話(huà),應(yīng)該會(huì)看到最近編碼器性能有很大的提高。
審核編輯:劉清
-
編碼器
+關(guān)注
關(guān)注
45文章
3768瀏覽量
137032 -
VOD
+關(guān)注
關(guān)注
0文章
15瀏覽量
13585 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8488瀏覽量
134010 -
WebRTC
+關(guān)注
關(guān)注
0文章
57瀏覽量
11521
原文標(biāo)題:AV1編碼器的優(yōu)化及其在流媒體和實(shí)時(shí)通訊中的應(yīng)用
文章出處:【微信號(hào):livevideostack,微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
什么是流媒體服務(wù)器?
NGcodec談FPGA編碼在HEVC和AV1上現(xiàn)狀與未來(lái)
通過(guò)Top 500美拍短視頻看AV1性能

快訊:Libaom 2.0.0發(fā)布 對(duì)AV1的質(zhì)量和速度進(jìn)行了重大改進(jìn)
AV1硬件解碼將在Intel處理器上實(shí)現(xiàn)

谷歌正向智能電視制造商推廣 AV1視頻編碼格式
谷歌 YouTube 和 Netflix 未來(lái)將支持 AV1 硬件解碼
有關(guān)AV1的編碼器優(yōu)化技術(shù)

剖析AV1硬件的采用及未來(lái)發(fā)展
探究學(xué)術(shù)界AV1編碼優(yōu)化技術(shù)的進(jìn)展

FFmpeg獲得NVENC AV1編碼支持
硬解之后,NVIDIA Ada架構(gòu)GPU新增AV1編碼

高清視頻編碼器與流媒體平臺(tái)的完美結(jié)合

評(píng)論