视频编码的码率控制
H264碼率控制為什么一定要MAD
最近一直在研究視頻編碼中打的碼率控制,有一個(gè)問(wèn)題一直沒(méi)想明白,就是:H264由于引入了率失真優(yōu)化模型,導(dǎo)致了碼率控制出現(xiàn)了蛋雞悖論的問(wèn)題,具體描述如下,H264的模式選擇需要用率失真優(yōu)化,率失真優(yōu)化需要確定QP值,而QP值是碼控確定的,碼控又需要MAD作為輸入,MAD又是模式選擇確定好模式后才能算出來(lái)。
放一張很多地方都會(huì)用來(lái)解釋的圖。這個(gè)過(guò)程大體都能理解,唯一不太明白的是,為啥碼率控制需要一定要用到MAD,是官方模型這樣子嗎?找了很多文章都沒(méi)有說(shuō)為什么,H264的提案相關(guān)文章也沒(méi)找到,只找到一些如何解決蛋雞悖論,進(jìn)行MAD預(yù)測(cè)的提案。只能自己分析下。
率失真模型到碼控模型
編碼的時(shí)候需要用到QP,我們先分析下碼控模塊如何進(jìn)行QP值的決策,首先你需要根據(jù)一些因素來(lái)決定給當(dāng)前幀/宏塊分配多少bits,然后根據(jù)RQ模型,也就是碼率和QP的函數(shù)關(guān)系來(lái)算出QP值,如果說(shuō)這個(gè)關(guān)系是一個(gè)很簡(jiǎn)單的二次模型(a假如是個(gè)常數(shù)),比如:
那么問(wèn)題就簡(jiǎn)單了,也不需要MAD了,啥蛋雞悖論根本就不存在。但實(shí)際是這個(gè)模型并不是這樣。我們往往需要先確定率失真模型即RD模型,然后再根據(jù)DQ模型是一個(gè)線性關(guān)系來(lái)決定RQ模型,至于DQ模型為啥是線性關(guān)系,這個(gè)是論文里面看到的。首先來(lái)看下H264的RD模型:
然后把DQ的線性關(guān)系代入,同時(shí)引入MAD作為衡量編碼復(fù)雜度的參數(shù),得到最終的H264 RQ模型:
其中H為各種碼流頭部消耗的bits數(shù),至此應(yīng)該就比較明顯了,根本原因在于H264考慮的復(fù)雜度這個(gè)影響因素。為啥要考慮這個(gè)呢,其實(shí)這和人眼的遮蔽效應(yīng)有關(guān),比如紋理復(fù)雜的區(qū)域,運(yùn)動(dòng)很快的區(qū)域,這時(shí)候即使碼率給的低一點(diǎn),肉眼也不太能分辨出來(lái)質(zhì)量損失。
總結(jié)
H264之所以存在蛋雞悖論,是因?yàn)榇a控需要用到MAD,MAD可以衡量一幀的編碼復(fù)雜度,MAD太大往往意味著預(yù)測(cè)殘差較大,此時(shí)要么是該幀的紋理復(fù)雜,要么是運(yùn)動(dòng)復(fù)雜,而人眼對(duì)這兩種情況的感知都不明顯,也就是可容忍的失真度較高,所以可以稍微少給一點(diǎn)碼率。從開(kāi)源項(xiàng)目x264、x265的代碼里面也可以發(fā)現(xiàn),x264/x265的碼率控制也是考慮了這個(gè)因素的,在項(xiàng)目里叫做模糊復(fù)雜度blurComplex。至于x264和x265的具體碼控實(shí)現(xiàn),除了通過(guò)這種考慮復(fù)雜度的幀級(jí)QP的決策,還有AQ和CUTree兩個(gè)技術(shù)來(lái)進(jìn)行宏塊級(jí)別的QP決策,后續(xù)再分析。
總結(jié)
- 上一篇: 有源淹没分析arcgis_基于DEM的有
- 下一篇: 胖男孩麦克正如我们所知的_正如我们所知,