何德龍
(瑞芯微電子股份有限公司,福建 福州350001)
21 世紀(jì)是數(shù)字化時(shí)代,數(shù)字化布局世界各個(gè)角落,改善了人類的生活質(zhì)量,提升了人類的工作效率。信息化的核心特征為多媒體技術(shù)的廣泛應(yīng)用,不斷拓展多媒體技術(shù)業(yè)務(wù)成為當(dāng)今學(xué)術(shù)界和工業(yè)界長(zhǎng)期的熱點(diǎn)。與此同時(shí),隨著數(shù)字信號(hào)處理技術(shù)、超大規(guī)模集成電路技術(shù)、有線和無(wú)線網(wǎng)絡(luò)技術(shù)、雙通道VRAM的快速發(fā)展,極大推動(dòng)了數(shù)字視頻處理器結(jié)構(gòu)的改進(jìn)和數(shù)字視頻壓縮算法,使多媒體技術(shù)的快速布局、應(yīng)用成為了可能。
視頻通信系統(tǒng)基本采用運(yùn)動(dòng)MC-DPCM/DCT 的視頻壓縮策略,因此編碼得到每一幀的碼率彼此之間波動(dòng)較大,如果保持壓縮過(guò)程中的量化參數(shù)不變,幀與幀之間編碼消耗比特會(huì)明顯不同,然而,這種變碼率的碼流不適合存儲(chǔ)或網(wǎng)絡(luò)傳輸。
視頻傳輸過(guò)程有各種不同的渠道,歸納起來(lái)分為有線傳輸和無(wú)線傳輸兩大類,不論是有線傳輸還是無(wú)線傳輸帶寬都有上限,超過(guò)帶寬上限,視頻信息在傳輸過(guò)程會(huì)有丟包現(xiàn)象,一旦丟包會(huì)破壞視頻的完整性。因此,在傳輸碼流之前所有的碼率波動(dòng)需要經(jīng)過(guò)有效的控制,穩(wěn)定后的碼流才能在實(shí)際的有線/無(wú)線網(wǎng)絡(luò)上傳輸,所有的視頻系列在編碼過(guò)程要對(duì)碼率進(jìn)行穩(wěn)定性調(diào)節(jié)從而滿足存儲(chǔ)、網(wǎng)絡(luò)帶寬的需求[1-5]。
本文針對(duì)CBR 的要求,在普通做法的基礎(chǔ)上,增加兩幀之間的相似性判斷,按區(qū)域進(jìn)行合理的碼率分配,即使得每幀的碼率波動(dòng)更小,從而得到視頻質(zhì)量更好、碼率更穩(wěn)定的碼率控制方案。仿真結(jié)果表明了這種方法的有效性。
普通CBR 的做法[8],主要看一幀內(nèi)碼率控制調(diào)整的區(qū)域大小,有些可以允許調(diào)整到每個(gè)宏塊(MB)/編碼樹(shù)單元(CTU),有些則按多個(gè)MB/CTU 進(jìn)行調(diào)整,本文介紹每個(gè)MB/CTU 都調(diào)整的CBR 方案,其中圖1 介紹到幀級(jí)為止碼率控制流程:
圖1 中介紹,首先由整體目標(biāo)碼率,如在1080p 30fps 規(guī)格下,碼率為1000kps,確定圖像組(GOP)級(jí)的目標(biāo)碼率即確定GOP 級(jí)的qp,接著編碼完成每幀獲得實(shí)際碼率后計(jì)算當(dāng)前GOP還剩下多少碼率,確定下一幀的幀級(jí)delta 值(frame_delta_qp),下一幀的frame_qp 由式(1)確定:
圖1 碼率控制的整體流程
圖2 介紹宏塊級(jí)碼率控制的流程,用于跟本文提出的改進(jìn)算法進(jìn)行比較。首先需要計(jì)算單幀的目標(biāo)碼率會(huì)根據(jù)用戶配置碼率平攤到每幀,再計(jì)算每幀內(nèi)的MB/CTU 個(gè)數(shù)從而得到每個(gè)MB/CTU 的目標(biāo)碼率,編碼過(guò)程中,接著根據(jù)到當(dāng)前MB/CTU(包括當(dāng)前MB/CTU)的目標(biāo)碼率總和,減去到當(dāng)前MB/CTU 為止(不包括當(dāng)前MB/CTU)實(shí)際碼率的總和得到碼率差值,由碼率差值查找事先調(diào)試好的表格確定當(dāng)前MB/CTU 的delta_qp0,其它方式(包括但不局限于)根據(jù)當(dāng)前MB/CTU 的紋理特性查找得到delta_qp1,當(dāng)前MB/CTU 的qp,block_qp 由式(2)確定:
圖2 幀內(nèi)碼率控制的流程
經(jīng)過(guò)分析,普通CBR 中的delta_qp0 環(huán)節(jié)對(duì)整個(gè)碼率的穩(wěn)定性影響較大,可以調(diào)整delta_qp0 從而提升單幀內(nèi)的碼率控制的穩(wěn)定性,具體流程如圖3 所示:
圖3 改進(jìn)的delta_qp0 計(jì)算方案
其中,multi_a + multi_b = 1、multi_a 和multi_b 取值[0,1],且multi_b 會(huì)根據(jù)當(dāng)前幀跟參考幀相似性強(qiáng)弱進(jìn)行調(diào)整,當(dāng)前幀和參考幀相似性可以用該兩幀的原始幀進(jìn)行幀差計(jì)算絕對(duì)值并累加得到frame_sad,根據(jù)frame_sad 值的大小進(jìn)行判斷multi_b 的取值,默認(rèn)值multi_b 取0.2。
分別對(duì)HEVC/AVC 的普通CBR 和本文改進(jìn)的CBR 進(jìn)行實(shí)驗(yàn),四組實(shí)驗(yàn)都對(duì)10 個(gè)標(biāo)準(zhǔn)測(cè)試源[6][7]進(jìn)行測(cè)試,HEVC 按1080p 30fps 2000kbps 作為目標(biāo)碼率,AVC 按1080p 30fps 4000kbps 作為目標(biāo)碼率,實(shí)際測(cè)試得到普通CBR 和本文改進(jìn)的CBR,圖4 為HEVC 測(cè)試結(jié)果。
圖5 為AVC 的測(cè)試結(jié)果。
從圖4、圖5 兩圖可以看出,不論是HEVC 還是AVC,改進(jìn)后的CBR 都比普通CBR 更穩(wěn)定,且改進(jìn)后的CBR 碼率波動(dòng)嚴(yán)格控制在5%以內(nèi),對(duì)有線/無(wú)線的傳輸更友好。
圖4 普通CBR vs 本文改進(jìn)CBR
圖5 普通CBR vs 本文改進(jìn)CBR
本文針對(duì)普通CBR 中,增加前面參考幀的幀內(nèi)碼率分布的參考,作為另一個(gè)穩(wěn)定性的參考,改進(jìn)的CBR 可以有效的提升穩(wěn)定性,把碼率波動(dòng)嚴(yán)格的控制在目標(biāo)碼率的5%以內(nèi),對(duì)有線/無(wú)線傳輸更友好。下一步的工作將進(jìn)一步分析其它方式調(diào)整幀內(nèi)碼率分配的機(jī)制,也可以考慮增加深度學(xué)習(xí)的方式穩(wěn)定碼率,同時(shí)結(jié)合GOP 級(jí)、幀級(jí)、幀內(nèi)碼率控制一起考慮,整體上提升碼率控制的穩(wěn)定性。