馮振
摘要:H.264作為新一代視頻編碼標(biāo)準(zhǔn),因其具有優(yōu)異的壓縮性能和良好的網(wǎng)絡(luò)親和性成為時(shí)下最重要的視頻編碼標(biāo)準(zhǔn),是視頻通信系統(tǒng)應(yīng)用中必不可少的組成部分。本文研究了H.264/AVC的GOP層、幀層和基本單元層碼率控制算法,并介紹了H.264算法的一些改進(jìn)模型。
關(guān)鍵詞:碼率控制;碼率分配;編碼模式中圖分類號:G633.34文獻(xiàn)標(biāo)識碼:B文章編號:1672-1578(2016)08-0393-011.引言
H.264/AVC是新一代視頻編碼標(biāo)準(zhǔn),它充分考慮了編碼效率和網(wǎng)絡(luò)傳輸,采用了整型DCT變換、先進(jìn)的幀內(nèi)預(yù)測、基于上下文的自適應(yīng)算術(shù)編碼、1/4象素精度的運(yùn)動估計(jì)、7種不同尺寸的塊匹配模式等先進(jìn)技術(shù),使H.264具有很高的編碼效率,特別適合于帶寬受限或存儲容量受限的視頻應(yīng)用系統(tǒng)。碼率控制的目的是使碼率滿足信道和存儲媒體要求,并盡可能地提高視頻質(zhì)量。
一般在視頻標(biāo)準(zhǔn)產(chǎn)生后,碼率控制都會得到廣泛的研究,如針對MPEG-2、MPEG-4、H.263等標(biāo)準(zhǔn)分別提出的TM5、VM8、TMN8碼率控制算法。然而,這些算法都不能直接應(yīng)用于H.264標(biāo)準(zhǔn),這是因?yàn)镠.264標(biāo)準(zhǔn)在碼率控制算法以及率失真優(yōu)化(Rate Control Optimization,RDO)中都使用了量化參數(shù),這就導(dǎo)致了在進(jìn)行碼率控制時(shí)出現(xiàn)了蛋雞悖論:對當(dāng)前幀的宏塊進(jìn)行率失真優(yōu)化時(shí),需要先通過當(dāng)前幀或當(dāng)前宏塊的平均絕對差(Mean Absolute Difference,MAD)決定每個(gè)宏塊的量化參數(shù),而當(dāng)前幀或宏塊的MAD僅在率失真優(yōu)化后才能得到。H.264的提案JVT-G012提出用流量往返模型來給每個(gè)基本單元分配目標(biāo)比特?cái)?shù),并在宏塊層編碼采用二次率失真函數(shù)計(jì)算量化參數(shù)的算法,用此量化參數(shù)來進(jìn)行模式選擇和編碼。
2.H.264碼率控制算法
JVT-G012采用了TM5的比特分配方案和VM8可擴(kuò)展的碼率控制思想,由圖像組(GOP)層、幀層、基本單元層3部分組成,采用適合于低比特率視頻應(yīng)用的流量控制模型,首先計(jì)算出目標(biāo)比特?cái)?shù),進(jìn)而調(diào)整量化參數(shù)。
2.1GOP層碼率控制:
首先分配當(dāng)前GOP 的目標(biāo)比特:
式中 Bc(ni,j)代表編碼第i個(gè)GOP第j幀后的虛擬緩存器占有情況,Ngop代表GOP幀數(shù),ni,j (i =1,2...., j= 1,2,...,Ngop)表示第i個(gè)GOP的第j幀,A(ni,j)是編碼第i個(gè)GOP的第j幀產(chǎn)生的比特?cái)?shù), 是幀率,ni,j表示第i個(gè)GOP的第j幀時(shí)的信道帶寬。
設(shè)第i個(gè)GOP開始時(shí)分配的比特?cái)?shù)為:
考慮到帶寬的波動, 在每一幀圖像編碼后,GOP中剩余幀的目標(biāo)比特?cái)?shù)由下式更新:
然后確定I幀和第1個(gè)P幀的QP(可以憑經(jīng)驗(yàn)給定,也可根據(jù)每個(gè)像素需要的比特?cái)?shù)計(jì)算) 。最后就是不斷循環(huán)幀層的碼率控制,直到這個(gè)GOP 結(jié)束。
2.2幀層碼率控制。幀層的比特?cái)?shù)分配是根據(jù)GOP 的結(jié)構(gòu)和幀類型來進(jìn)行的。一般來說,I幀分配最多的比特?cái)?shù),P幀分配次多的比特?cái)?shù),B幀分配較少的比特?cái)?shù)。使用線性跟蹤理論,分配給第i個(gè)GOP的第j幀的目標(biāo)比特?cái)?shù)f(ni,j)是由目標(biāo)緩沖區(qū)滿溢程度、幀率、可用信道帶寬和實(shí)際緩沖區(qū)占用程度定義的。得到當(dāng)前P幀的目標(biāo)比特?cái)?shù)后,利用二次率失真模型和MAD線性預(yù)測模型計(jì)算出的,為了獲取連續(xù)幀之間的平滑視覺效果還需要對進(jìn)行校正,量化參數(shù)用于計(jì)算當(dāng)前幀中每個(gè)宏塊的RDO,通過下式得到編碼模式
該階段主要完成三個(gè)任務(wù):更新MAD線性預(yù)測模型中的a1和a2,二次R-D模型參數(shù)和確定是否有需要跳幀。編完一幀后,更新MAD線性預(yù)測模型中的a1和a2和二次R-D模型參數(shù)。在編碼完一幀后,實(shí)際生成的比特?cái)?shù)a(ni,j)加入到當(dāng)前Buffer。
2.3基本單元層碼率控制
這是 H.264/AVC中特有的步驟,只有當(dāng)基本單元不是幀時(shí),才會有這一步驟。
基本單元層碼率控制采用是是率失真模型,根據(jù)幀層碼率控制確定的該幀圖像的輸出比特?cái)?shù),給圖像各部分選擇合適的量化參數(shù)。
與幀層碼率控制類似,先給基本單元分配編碼比特?cái)?shù),由于未編碼的基本單元的MAD未知,所以平均分配剩余比特給未編碼基本單元?;締卧獙拥拇a率控制要選擇一幀中的所有基本單元的量化參數(shù)值,使產(chǎn)生的編碼比特?cái)?shù)接近幀的目標(biāo)比特?cái)?shù)f(ni,j),算法描述如下:首先確定當(dāng)前基本單元的紋理比特?cái)?shù),通過線性模型,利用先前幀相同位置基本單元的MAD預(yù)測當(dāng)前基本單元的MAD;然后通過二次R-D模型計(jì)算當(dāng)前基本單元的量化參數(shù),并對當(dāng)前基本單元的所有宏塊進(jìn)行率失真優(yōu)化;最后更新當(dāng)前幀的可用比特?cái)?shù)和當(dāng)前幀未編碼的基本單元數(shù);編碼完當(dāng)前幀,更新參數(shù),該參數(shù)為前一幀的所有基本單元的量化參數(shù)的平均值。
3.結(jié)束語
隨著H.264的不斷改進(jìn)和推廣,其碼率控制的算法也在不斷改進(jìn)更新。主要包括考慮編碼器端的編碼參數(shù)(如量化參數(shù)、編碼模式或直接影響比特流的參數(shù)等)的率失真控制模型,結(jié)合信源信道失真和緩沖狀態(tài)的碼率控制模型,考慮解碼端反饋信息的控制模型等。H.264采用了多種改進(jìn)編碼效率的技術(shù),針對不同的應(yīng)用可以選擇不同的技術(shù),其碼率控制模型的建立也應(yīng)該結(jié)合實(shí)際應(yīng)用做出調(diào)整,而不是一定要建立一個(gè)適應(yīng)各種場合的控制模型。
參考文獻(xiàn):
[1]胡旭.H.264碼率控制算法的研究[D]. 太原理工大學(xué) 2013
[2]韓崢,唐昆,崔慧娟.基于H.264的碼率控制算法[J].