趙海國(guó)
(湖南理工學(xué)院 數(shù)學(xué)學(xué)院, 湖南 岳陽(yáng) 414006)
視頻信息因具有直觀性、可信性等一系列優(yōu)點(diǎn)而深受大眾喜愛(ài). 人類有 70%的信息是通過(guò)視覺(jué)獲取的. 然而, 未經(jīng)壓縮的視頻圖像數(shù)據(jù)量非常大, 4:1:1格式分辨率為720×576的PAL視頻每秒數(shù)據(jù)量可達(dá)124.4Mbit, 一張600MB的CD.ROM只能存儲(chǔ)大約38秒的視頻圖像. 為了節(jié)約存儲(chǔ)空間, 動(dòng)態(tài)視頻圖像必須進(jìn)行大幅度的壓縮. 近年來(lái), 新的視頻圖像壓縮國(guó)際標(biāo)準(zhǔn)不斷出現(xiàn): 有用于電視會(huì)議的 ITU-T H.261標(biāo)準(zhǔn), 用于可視電話的ITU-T H.263 標(biāo)準(zhǔn), 用于動(dòng)態(tài)視頻圖像的MPEG-1、MPEG-2 和MPEG-4 等視頻標(biāo)準(zhǔn), 目前最新的視頻壓縮標(biāo)準(zhǔn)為H.264標(biāo)準(zhǔn).
H.264 作為新一代的視頻壓縮標(biāo)準(zhǔn), 是由ITU 和ISO/IEC 兩大國(guó)際標(biāo)準(zhǔn)組織共同制定的, 該標(biāo)準(zhǔn)最大的優(yōu)勢(shì)是具有很高的數(shù)據(jù)壓縮比率, 且能夠很好的適應(yīng)當(dāng)前復(fù)雜的網(wǎng)絡(luò)環(huán)境, 但H.264編碼復(fù)雜度也是最高的[1]. 所以, 掌握H.264視頻壓縮標(biāo)準(zhǔn)的編碼原理及關(guān)鍵技術(shù), 努力提高其編碼質(zhì)量和編碼速度是值得研究的問(wèn)題.
H.264是在MPEG-4技術(shù)的基礎(chǔ)之上建立起來(lái)的[2], 其編解碼流程主要包括5個(gè)部分: 幀間和幀內(nèi)預(yù)測(cè)、變換和反變換、量化和反量化、環(huán)路濾波以及熵編碼. H.264標(biāo)準(zhǔn)的具體編碼框架如圖1 所示.
與以往的視頻標(biāo)準(zhǔn)類似, H.264的編碼框架同樣是基于混合編碼的框架: 先將待編碼宏塊通過(guò)運(yùn)動(dòng)估計(jì)算法搜索幀內(nèi)或幀間的相匹配宏塊, 再將匹配宏塊和待編碼宏塊的圖像差值經(jīng)過(guò)DCT 變換、量化等處理. H.264 標(biāo)準(zhǔn)通過(guò)改進(jìn)技術(shù)方案大大提高了視頻壓縮效率, 并應(yīng)用新的算法使視頻編碼性能在各個(gè)部分也得到了提升.
圖1 H.264 視頻編碼基本框圖
H.264視頻壓縮的關(guān)鍵技術(shù)[3]主要包括: 基于塊的多種幀內(nèi)預(yù)測(cè), 樹狀結(jié)構(gòu)的運(yùn)動(dòng)估計(jì), 4×4 DCT整數(shù)變換, UVLC和CABAC熵編碼模式.
H.264引入了多種幀內(nèi)預(yù)測(cè)來(lái)提高壓縮效率. 幀內(nèi)預(yù)測(cè)編碼就是使用周圍鄰近的像素值來(lái)預(yù)測(cè)當(dāng)前的像素值, 然后對(duì)預(yù)測(cè)誤差進(jìn)行編碼. H.264幀內(nèi)預(yù)測(cè)是基于塊的: 對(duì)于亮度分量, 塊的大小可以在 16×16和 4×4 之間選擇, 16 ×16 塊有 4 種預(yù)測(cè)模式, 4×4 塊有 9 種預(yù)測(cè)模式; 對(duì)于色度分量, 預(yù)測(cè)是對(duì)整個(gè)8×8 塊進(jìn)行的, 有 4 種預(yù)測(cè)模式. 在給定幀中充分利用相鄰宏塊的空間相關(guān)性. 在對(duì)一給定宏塊編碼時(shí), 首先可以根據(jù)周圍的宏塊預(yù)測(cè), 然后對(duì)預(yù)測(cè)值與實(shí)際值的差值進(jìn)行編碼, 相對(duì)于直接對(duì)該幀編碼而言, 可以大大減小碼率. H.264在幀內(nèi)預(yù)測(cè)過(guò)程中, 只有預(yù)測(cè)塊和實(shí)際塊的殘差才被編碼傳輸,若對(duì)于變化平坦、存在大量空間冗余的視頻對(duì)象, 利用幀內(nèi)預(yù)測(cè)可以大大減少編碼所需的比特?cái)?shù), 取得較高的編碼效率. 可見(jiàn), H.264使用幀內(nèi)預(yù)測(cè)編碼主要是縮減圖像的空間冗余.
幀間預(yù)測(cè)編碼是利用圖像序列中相鄰幀之間的相關(guān)性, 消除幀間的重復(fù)信息. H.264幀間預(yù)測(cè)涉及到的核心技術(shù)主要是運(yùn)動(dòng)估計(jì)與補(bǔ)償[4]. H.264的運(yùn)動(dòng)估計(jì)采用樹狀結(jié)構(gòu)運(yùn)動(dòng)估計(jì), 在運(yùn)動(dòng)估計(jì)模塊中采用16×16、8×16、16×8、8×8、4×8、8×4、4×4 七種塊分割模式, 這種樹狀結(jié)構(gòu)比以往的視頻標(biāo)準(zhǔn)中的單一結(jié)構(gòu)更科學(xué), 對(duì)于小尺寸的宏塊適合表現(xiàn)細(xì)節(jié)豐富的圖像區(qū)域, 對(duì)于大尺寸的宏塊適合表現(xiàn)圖像內(nèi)比較平坦的區(qū)域, 從而使得在同樣碼率的情況下, 視頻圖像質(zhì)量得到提高. H.264的運(yùn)動(dòng)補(bǔ)償相對(duì)于以往的視頻編碼添加了更多的功能, 除了支持 P幀、B幀外, 還支持一種新的流間傳送幀——SP幀. 碼流中包含SP幀后, 能在有類似內(nèi)容但有不同碼率的碼流之間快速切換, 同時(shí)支持隨機(jī)接入和快速回放模式. 可見(jiàn),H.264幀間預(yù)測(cè)主要是應(yīng)用樹狀結(jié)構(gòu)運(yùn)動(dòng)估計(jì)和補(bǔ)償縮減連續(xù)幀之間的時(shí)間冗余.
變換編碼技術(shù)能夠進(jìn)一步提高視頻壓縮率. H.264 編碼器對(duì)幀內(nèi)預(yù)測(cè)所得到的殘差結(jié)果, 使用4×4DCT整數(shù)變換. H.264 編碼器使用的4×4DCT整數(shù)變換與其他編解碼器采用的8×8 DCT 浮點(diǎn)數(shù)變換不同, 該變換方法不僅可在編碼器和解碼器中使用相同精度的變換和反變換, 而且有利于使用定點(diǎn)運(yùn)算方式, 避免了浮點(diǎn)操作帶來(lái)的四舍五入誤差, 對(duì)信噪比的影響也小于 0.022dB. 另外, 該變換因?yàn)槭褂玫?×4塊比較小, 大大降低了圖像的塊效應(yīng), 還極大的減少了運(yùn)算量.
H.264中采用了兩種不同的熵編碼方法: 通用可變長(zhǎng)編碼(UVLC)和基于文本的自適應(yīng)二進(jìn)制算術(shù)編碼(CABAC). 在H.263等標(biāo)準(zhǔn)中, 根據(jù)要編碼的數(shù)據(jù)類型如變換系數(shù)、運(yùn)動(dòng)矢量等, 采用不同的VLC碼表.H.264中的UVLC碼表提供了一個(gè)簡(jiǎn)單的方法, 不管符號(hào)表述什么類型的數(shù)據(jù), 都使用統(tǒng)一變字長(zhǎng)編碼表.CABAC是一種效率很高的編碼方法, 為了提高算術(shù)編碼的效率, CABAC通過(guò)內(nèi)容建模的過(guò)程, 使基本概率模型能適應(yīng)隨視頻幀而改變的統(tǒng)計(jì)特性.
H.264標(biāo)準(zhǔn)雖然壓縮效率是最高的, 但其運(yùn)算量也是所有壓縮標(biāo)準(zhǔn)中最高的, 故其編碼效率相對(duì)較低. 為了提高編碼效率, 需要尋找一種有效的方法實(shí)現(xiàn)編碼過(guò)程中耗時(shí)最長(zhǎng)(占60%到80%)的模塊——運(yùn)動(dòng)估計(jì)模塊. GPU 就是一種很好的選擇: GPU有著高度并行的計(jì)算特性、強(qiáng)大的浮點(diǎn)計(jì)算能力和很高的存儲(chǔ)帶寬[5,6], 將其應(yīng)用到H.264的編解碼中和CPU并行工作, 必將極大的提高視頻編解碼的效率, 于是便出現(xiàn)了基于GPU的H.264并行編碼器. 基于GPU的并行解碼器在充分利用GPU的并行特性的同時(shí)要處理好CPU和GPU這兩個(gè)處理器的關(guān)系. 其解決方案為: I幀的編碼完全由CPU負(fù)責(zé), 而對(duì)于P幀,GPU負(fù)責(zé)每一個(gè)宏塊的運(yùn)動(dòng)估計(jì), 將求得的最佳運(yùn)動(dòng)向量值返回給CPU, CPU然后進(jìn)行整數(shù)變換(ICD)、量化(Q)、反量化(IQ)、反整數(shù)變換(IICT)、運(yùn)動(dòng)補(bǔ)償(MC)、重構(gòu)和環(huán)路濾波. 這時(shí)CPU必須等待GPU處理完每一個(gè)宏塊后才能進(jìn)行后續(xù)的編碼工作, 加速比取決于GPU的處理速度和回傳數(shù)據(jù)時(shí)間與原先運(yùn)動(dòng)估計(jì)時(shí)間. 該方案中GPU的運(yùn)動(dòng)估計(jì)可將16×16的宏塊分成16個(gè)4×4塊, 然后計(jì)算出每個(gè)4×4塊運(yùn)動(dòng)估計(jì)的代價(jià)并通過(guò)多次渲染將它們相加[7]; 進(jìn)一步考慮到每個(gè) 4×4塊先后存在著相關(guān)性, 可重新排列 4×4編碼順序?qū)崿F(xiàn)4×4塊的運(yùn)動(dòng)估計(jì), 克服了相鄰塊之間的相關(guān)性問(wèn)題; 還可將整個(gè)幀放入GPU中進(jìn)行幀級(jí)別的運(yùn)動(dòng)估計(jì), 引入更高效的搜索算法: 如適用于常見(jiàn)視頻標(biāo)準(zhǔn)的16×16宏塊單參考幀全搜索運(yùn)動(dòng)估計(jì)算法, 適合H.264標(biāo)準(zhǔn)的16×16宏塊整像素和分像素多參考幀全搜索運(yùn)動(dòng)估計(jì)算法, 小鉆石搜索模板的快速搜索算法[8]等等, 進(jìn)一步減少了計(jì)算時(shí)間, 提高編碼的效率.
基于GPU的并行解碼器利用了GPU的并行特性, 但每次只對(duì)宏塊進(jìn)行并行處理, CPU和GPU必須實(shí)時(shí)交換小塊的數(shù)據(jù), 可能出現(xiàn) CPU和 GPU相互等待的局面, 影響了編碼的速度. 于是提出改進(jìn)的CPU+GPU并行方案: 新的H.264編碼器架構(gòu)采用了兩條并行流水線, 一條是CPU, 另一條是GPU. GPU上的流水線由于只負(fù)責(zé)運(yùn)動(dòng)估計(jì)(ME), 計(jì)算速度和I/O操作有關(guān), 而不受CPU流水線影響. CPU之上的流水線不僅與I/O操作有關(guān), 還需要使用GPU產(chǎn)生的7種可變尺寸塊的最佳運(yùn)動(dòng)向量(MV)值. 為了減少CPU等待GPU產(chǎn)生MV值的時(shí)間, 同時(shí)也充分發(fā)揮GPU的并行計(jì)算能力, 開辟了一個(gè)共享緩沖區(qū), 用來(lái)存放GPU求得的7種模式的最佳MV值. 這種CPU+GPU的H.264編碼器并行架構(gòu), 使得CPU和GPU無(wú)須相互等待, 從而更高效的實(shí)現(xiàn)了CPU和GPU的并行工作.
視頻壓縮技術(shù)不斷在發(fā)展, H.264標(biāo)準(zhǔn)在數(shù)據(jù)壓縮過(guò)程中采用一系列最新的壓縮技術(shù), 提高了壓縮比率. 但同時(shí)也增加了算法的復(fù)雜度, 致使壓縮效率大幅度降低. 論文引入了基于GPU的并行解碼器, 充分利用 GPU的并行計(jì)算能力來(lái)實(shí)現(xiàn)編碼過(guò)程中耗時(shí)最長(zhǎng)的運(yùn)動(dòng)估計(jì)模塊, 提高了編碼效率. 為了減少并行過(guò)程中CPU和GPU相互等待的時(shí)間, 提出改進(jìn)的CPU+GPU并行方案, 更高效地實(shí)現(xiàn)了CPU和GPU的并行工作, 有效地提高了視頻編碼的效率.
[1]劉 峰. 視頻圖像編碼技術(shù)及國(guó)際標(biāo)準(zhǔn)[M].北京: 北京郵電大學(xué)出版社, 2005
[2]畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)[M].北京: 人民郵電出版社, 2005
[3]丁媛媛. H.264的視頻編碼關(guān)鍵技術(shù)研究[D]. 長(zhǎng)春: 吉林大學(xué)通信工程學(xué)院博士學(xué)位論文, 2009, 6
[4]鄭兆青. 基于H.264視頻編碼的運(yùn)動(dòng)估計(jì)VLSI結(jié)構(gòu)研究[D]. 武漢: 華中科技大學(xué)圖像識(shí)別與人工智能研究所博士學(xué)位論文, 2007, 2
[5]譚久宏, 周維超, 吳欽章.基于GPU的數(shù)字圖像處理[J].科教文匯, 2006, 4: 178~179
[6]房 波.基于通用可編程GPU的視頻編解碼器架構(gòu)、算法與實(shí)現(xiàn)[D].杭州: 浙江大學(xué)信息與電子工程學(xué)系碩士學(xué)位論文, 2005
[7]HO C W, AU 0 C,CHAN Get a1. Motion Estimation for H.264/AVC using Programmable Graphics Hardware[C].IEEE International Conference on Multimedia and Expo,2006
[8]LEE C Y,LIN Y C,WU C Let a1. Multi-Pass and Frame Parallel Algorithms of Motion Estimation in H.264/AVC for Generic GPU[C].IEEE International Conference on Multimedia and Expo, 2007: 1603~1606