本發(fā)明屬于圖像處理技術(shù)領(lǐng)域,尤其涉及一種基于h.264視頻壓縮標(biāo)準(zhǔn)的碼率控制方法,可用于對視頻圖像進(jìn)行壓縮編碼。
背景技術(shù):
視頻傳輸作為現(xiàn)代生活中的一個重要應(yīng)用,與網(wǎng)絡(luò)帶寬、視頻編解碼等技術(shù)息息相關(guān)。在帶寬受限的網(wǎng)絡(luò)環(huán)境中進(jìn)行視頻傳輸,必須對視頻信息進(jìn)行壓縮,而對于變化多樣的畫面,視頻編碼器輸出碼流的比特率變化較大,在信道環(huán)境不佳的情況下,容易導(dǎo)致視頻輸出的質(zhì)量差。為了充分利用網(wǎng)絡(luò)資源,并保證用戶獲得最優(yōu)的視頻質(zhì)量,視頻通信系統(tǒng)中需要引入碼率控制技術(shù)來獲得在質(zhì)量和帶寬利用上的最佳平衡,即允許的最大帶寬下的最優(yōu)視頻質(zhì)量。
h.264標(biāo)準(zhǔn)提出用流量往返模型來分配每個基本單元目標(biāo)比特數(shù),并在宏塊層編碼采用二次率失真函數(shù)計算量化參數(shù),用此量化參數(shù)來進(jìn)行模式選擇和編碼。盡管這種算法可以達(dá)到目標(biāo)碼率而且圖像的編碼比特流也沒有明顯波動,但是對一個宏塊二次率失真計算的時間復(fù)雜度是難以接受的,并且對于實(shí)時編碼來說更是難以容忍的。
而x264作為h.264標(biāo)準(zhǔn)的一種實(shí)用模型被廣泛使用,x264是網(wǎng)上自由組織聯(lián)合開發(fā)的兼容h.264標(biāo)準(zhǔn)的碼流的編碼器。它注重實(shí)用,在不明顯降低編碼性能的前提下,努力降低編碼的計算復(fù)雜度,因而x264摒棄了h.264標(biāo)準(zhǔn)中一些對編碼性能貢獻(xiàn)微小但計算復(fù)雜度極高的新特性,如多參考幀、幀間預(yù)測中不必要的塊模式等。x264源于實(shí)際的經(jīng)驗,在實(shí)現(xiàn)時更注重于碼率控制的靈活性、實(shí)時性和高效性,所以它更加符合實(shí)時的視頻傳輸系統(tǒng)。
x264的碼率控制模式主要分為單次編碼和多次編碼,其中單次編碼主要分為以下四種:固定量化參數(shù)(constantquantizerparameter,cqp)、固定碼率控制因子(constantrate-factor,crf)、平均比特率(averagebit-rate,abr)和虛擬緩存限制比特率(vbv-constantbit-rate,vbv-cbr)。其中單次編碼平均比特率abr模式在帶寬有限的無線網(wǎng)絡(luò)實(shí)時傳輸系統(tǒng)中是最適合采取的碼率控制模式,但是單次編碼平均比特率abr算法在實(shí)現(xiàn)的過程中并沒有考慮未編碼幀的相關(guān)信息,在根據(jù)碼率值自適應(yīng)網(wǎng)絡(luò)帶寬的視頻傳輸場景中,容易導(dǎo)致視頻傳輸?shù)牟涣鲿?;并且單次編碼平均比特率abr在幀層得到量化參數(shù)(quantizerparameter,qp)后,屬于該幀的所有宏塊均用這個統(tǒng)一的量化參數(shù)進(jìn)行量化,并沒有任何精細(xì)化的宏塊層碼率控制機(jī)制。并且x264的碼率控制模式是將當(dāng)前圖像下采樣后(半精度幀)的圖像復(fù)雜度作為當(dāng)前編碼圖像的復(fù)雜度,即在真正的編碼開始前,需要對圖像進(jìn)行一次額外的預(yù)測但不實(shí)現(xiàn)編碼,這對于實(shí)時編碼系統(tǒng)來說既增加了計算復(fù)雜度又增加了壓縮編碼的時間,得不償失。
技術(shù)實(shí)現(xiàn)要素:
針對上述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種基于h.264視頻壓縮標(biāo)準(zhǔn)的碼率控制方法,解決了現(xiàn)有技術(shù)中碼率控制實(shí)現(xiàn)過程中運(yùn)算量太大,未進(jìn)行宏塊層調(diào)控、復(fù)雜度計算耗時長的問題。
為達(dá)到上述目的,本發(fā)明采用如下技術(shù)方案予以實(shí)現(xiàn)。
一種基于h.264視頻壓縮標(biāo)準(zhǔn)的碼率控制方法,用于視頻信號處理器,所述方法包括如下步驟:
步驟1,獲取需要進(jìn)行壓縮編碼的視頻序列,所述視頻序列包含q幀視頻圖像,每幀視頻圖像包含p個宏塊;
其中,所述視頻信號處理器的視頻序列輸入速率為每秒n幀,所述視頻序列的輸入碼率為每秒m兆;所述視頻信號處理器的視頻序列的期望輸出碼率為每秒b兆;n<q,b<m,且q、p、n、m分別為正整數(shù);
步驟2,設(shè)定第一幀視頻圖像中每個宏塊的量化參數(shù)為初始參數(shù)值,根據(jù)所述初始參數(shù)值對所述第一幀視頻圖像的每個宏塊進(jìn)行壓縮編碼,從而得到壓縮編碼后的第一幀視頻圖像,并確定所述壓縮編碼后的第一幀視頻圖像的復(fù)雜度和壓縮編碼后的第一幀視頻圖像的實(shí)際編碼比特數(shù);
步驟3,對于第i幀視頻圖像,根據(jù)壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度和壓縮編碼后的第i-1幀視頻圖像的實(shí)際編碼比特數(shù),確定第i幀視頻圖像中第一個宏塊的量化參數(shù)t0;i的初值為2,i=2,...,q;
步驟4,對于第i幀視頻圖像中的第j個宏塊,按照下式確定第j個宏塊的量化參數(shù)tj-1:根據(jù)所述第j個宏塊的量化參數(shù)tj-1對第j個宏塊進(jìn)行壓縮編碼,得到第j個宏塊的實(shí)際編碼比特數(shù);j的初值為2,j=2,...,p;
其中,macro_factor為第j-1個宏塊的實(shí)際編碼比特數(shù)占每一幀視頻圖像的期望比特數(shù)的比例,每一幀視頻圖像的期望比特數(shù)為
步驟5,令j的值加1,并重復(fù)執(zhí)行步驟4,直到j(luò)>p,從而完成第i幀視頻圖像所有宏塊的壓縮編碼,得到壓縮編碼后的第i幀視頻圖像;并確定壓縮編碼后的第i幀視頻圖像的復(fù)雜度和壓縮編碼后的第i視頻圖像的實(shí)際編碼比特數(shù);
步驟6,令i的值加1,并重復(fù)執(zhí)行步驟3至步驟5,直到i>q,得到壓縮編碼后的q幀視頻圖像,所述壓縮編碼后的q幀視頻圖像組成壓縮編碼后的視頻序列。
本發(fā)明技術(shù)方案的特點(diǎn)和進(jìn)一步的改進(jìn)為:
(1)步驟3中,
所述壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度c是指:壓縮編碼后的第i-1幀視頻圖像中各宏塊每個像素的預(yù)測值與未進(jìn)行壓縮編碼前第i-1幀視頻圖像中各宏塊原像素值相減得到編碼的殘差值,所述殘差值經(jīng)hadamard變換后進(jìn)行絕對值求和得到所述壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度c,具體公式為:
m表示每個宏塊中像素點(diǎn)的序號,d表示每個宏塊中包含的像素總個數(shù),yjm表示壓縮編碼后的第i-1幀視頻圖像中第j個宏塊中第m個像素的預(yù)測值,xjm表示未進(jìn)行壓縮編碼前第i-1幀視頻圖像中第j個宏塊中第m個像素的原像素值,hadamard(·)表示hadamard變換;
壓縮編碼后的第i-1幀視頻圖像的實(shí)際編碼比特數(shù)f是指:壓縮編碼后的第i-1幀視頻圖像中各宏塊每個像素的預(yù)測值與未進(jìn)行壓縮編碼前第i-1幀視頻圖像中各宏塊原像素值相減得到編碼的殘差值,所述殘差值進(jìn)行熵編碼后的比特數(shù)進(jìn)行求和得到壓縮編碼后的第i-1幀視頻圖像的實(shí)際編碼比特數(shù)f,具體公式為:
其中,code(·)表示熵編碼過程。
(2)步驟3中,確定第i幀視頻圖像中第一個宏塊的量化參數(shù)t0,由以下公式計算得到:
其中,qcomp為線性量化控制參數(shù),c為壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度,qscale為第i幀視頻圖像中第一個宏塊的量化參數(shù)t0對應(yīng)的量化系數(shù),rate_factor為壓縮編碼后的前i-1幀視頻圖像的實(shí)際編碼比特數(shù)與前i-1幀視頻圖像的期望比特數(shù)的比值,且前i-1幀視頻圖像的期望比特數(shù)為
(3)步驟4中,第j-1個宏塊的實(shí)際編碼比特數(shù)占每一幀視頻圖像的期望比特數(shù)的比例macro_factor表示為:
其中,macro_size為第i幀視頻圖像的第j-1個宏塊根據(jù)其對應(yīng)的量化參數(shù)編碼后得到的實(shí)際編碼比特數(shù),frame_wanted為每一幀視頻圖像的期望比特數(shù)。
本發(fā)明采用前一幀視頻圖像的復(fù)雜度作為當(dāng)前編碼視頻圖像的復(fù)雜度,避開了為計算當(dāng)前圖像復(fù)雜度耗時較長的問題;本發(fā)明采取在每一個宏塊間通過比例系數(shù)微調(diào)控制量化參數(shù)的方法不僅在碼率控制的實(shí)現(xiàn)過程中考慮到了未編碼幀的信息,又對未編碼幀宏塊的量化參數(shù)進(jìn)行精細(xì)調(diào)控,使得壓縮編碼后的圖像具有較高的質(zhì)量。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種基于h.264視頻壓縮標(biāo)準(zhǔn)的碼率控制方法的流程示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供一種基于h.264視頻壓縮標(biāo)準(zhǔn)的碼率控制方法,用于視頻信號處理器,如圖1所示,所述方法包括如下步驟:
步驟1,獲取需要進(jìn)行壓縮編碼的視頻序列,所述視頻序列包含q幀視頻圖像,每幀視頻圖像包含p個宏塊;
其中,所述視頻信號處理器的視頻序列輸入速率為每秒n幀,所述視頻序列的輸入碼率為每秒m兆;所述視頻信號處理器的視頻序列的期望輸出碼率為每秒b兆;n<q,b<m,且q、p、n、m分別為正整數(shù)。
步驟2,設(shè)定第一幀視頻圖像中每個宏塊的量化參數(shù)為初始參數(shù)值,根據(jù)所述初始參數(shù)值對所述第一幀視頻圖像的每個宏塊進(jìn)行壓縮編碼,從而得到壓縮編碼后的第一幀視頻圖像,并確定所述壓縮編碼后的第一幀視頻圖像的復(fù)雜度和壓縮編碼后的第一幀視頻圖像的實(shí)際編碼比特數(shù)。
步驟3,對于第i幀視頻圖像,根據(jù)壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度和壓縮編碼后的第i-1幀視頻圖像的實(shí)際編碼比特數(shù),確定第i幀視頻圖像中第一個宏塊的量化參數(shù)t0;i的初值為2,i=2,...,q。
所述壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度c是指:壓縮編碼后的第i-1幀視頻圖像中各宏塊每個像素的預(yù)測值與未進(jìn)行壓縮編碼前第i-1幀視頻圖像中各宏塊原像素值相減得到編碼的殘差值,所述殘差值經(jīng)hadamard變換后進(jìn)行絕對值求和得到所述壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度c,具體公式為:
m表示每個宏塊中像素點(diǎn)的序號,d表示每個宏塊中包含的像素總個數(shù),yjm表示壓縮編碼后的第i-1幀視頻圖像中第j個宏塊中第m個像素的預(yù)測值,xjm表示未進(jìn)行壓縮編碼前第i-1幀視頻圖像中第j個宏塊中第m個像素的原像素值,hadamard(·)表示hadamard變換;
壓縮編碼后的第i-1幀視頻圖像的實(shí)際編碼比特數(shù)f是指:壓縮編碼后的第i-1幀視頻圖像中各宏塊每個像素的預(yù)測值與未進(jìn)行壓縮編碼前第i-1幀視頻圖像中各宏塊原像素值相減得到編碼的殘差值,所述殘差值進(jìn)行熵編碼后的比特數(shù)進(jìn)行求和得到壓縮編碼后的第i-1幀視頻圖像的實(shí)際編碼比特數(shù)f,具體公式為:
其中,code(·)表示熵編碼過程。
需要補(bǔ)充的是,原像素值是指未壓縮編碼前視頻圖像的像素值,沒有經(jīng)過任何處理。關(guān)于各宏塊每個像素的預(yù)測值的預(yù)測方法,主要分為幀內(nèi)預(yù)測和幀間預(yù)測,具體的實(shí)現(xiàn)方法可以參考2005年9月出版的《itu-th.264建議書》。
步驟3中,確定第i幀視頻圖像中第一個宏塊的量化參數(shù)t0,由以下公式計算得到:
其中,qcomp為線性量化控制參數(shù),c為壓縮編碼后的第i-1幀視頻圖像的復(fù)雜度,qscale為第i幀視頻圖像中第一個宏塊的量化參數(shù)t0對應(yīng)的量化系數(shù),rate_factor為壓縮編碼后的前i-1幀視頻圖像的實(shí)際編碼比特數(shù)與前i-1幀視頻圖像的期望比特數(shù)的比值,且前i-1幀視頻圖像的期望比特數(shù)為
步驟4,對于第i幀視頻圖像中的第j個宏塊,按照下式確定第j個宏塊的量化參數(shù)tj-1:根據(jù)所述第j個宏塊的量化參數(shù)tj-1對第j個宏塊進(jìn)行壓縮編碼,得到第j個宏塊的實(shí)際編碼比特數(shù);j的初值為2,j=2,...,p;
其中,macro_factor為第j-1個宏塊的實(shí)際編碼比特數(shù)占每一幀視頻圖像的期望比特數(shù)的比例,每一幀視頻圖像的期望比特數(shù)為
第j-1個宏塊的實(shí)際編碼比特數(shù)占每一幀視頻圖像的期望比特數(shù)的比例macro_factor表示為:
其中,macro_size為第i幀視頻圖像的第j-1個宏塊根據(jù)其對應(yīng)的量化參數(shù)編碼后得到的實(shí)際編碼比特數(shù),frame_wanted為每一幀視頻圖像的期望比特數(shù)。
需要補(bǔ)充的是,本發(fā)明實(shí)施例中對宏塊級的量化參數(shù)進(jìn)行微調(diào)即是對未編碼幀信息的考慮。
步驟5,令j的值加1,并重復(fù)執(zhí)行步驟4,直到j(luò)>p,從而完成第i幀視頻圖像所有宏塊的壓縮編碼,得到壓縮編碼后的第i幀視頻圖像;并確定壓縮編碼后的第i幀視頻圖像的復(fù)雜度和壓縮編碼后的第i視頻圖像的實(shí)際編碼比特數(shù)。
步驟6,令i的值加1,并重復(fù)執(zhí)行步驟3至步驟5,直到i>q,得到壓縮編碼后的q幀視頻圖像,所述壓縮編碼后的q幀視頻圖像組成壓縮編碼后的視頻序列。
本發(fā)明技術(shù)方案的效果可以通過下列的實(shí)驗數(shù)據(jù)作進(jìn)一步說明。
選擇實(shí)現(xiàn)的硬件平臺:本發(fā)明實(shí)施例選擇xilinxartix7(xc7a200tfbg484-2)開發(fā)板作為實(shí)現(xiàn)碼率控制優(yōu)化算法的硬件平臺,嵌入式軟核為microblaze9.4,軟件開發(fā)環(huán)境為vivado2016.2、sdk2016.2。
選擇實(shí)現(xiàn)的視頻序列:本發(fā)明實(shí)施例選擇bus_cif.yuv(352x288)視頻序列,視頻的輸入速率是每秒鐘25幀,即視頻的輸入碼率為29mbit/s,期望的目標(biāo)碼率是1mbit/s。
將當(dāng)前的視頻序列送入h.264編碼模塊,視頻序列輸入的當(dāng)前幀數(shù)據(jù)與下一幀數(shù)據(jù)之間是有時間間隔的,在這個時間間隔內(nèi)完成對每一幀視頻圖像的初始量化參數(shù)控制,在處理當(dāng)前宏塊與下一個宏塊之間完成每一個宏塊的量化參數(shù)控制,根據(jù)這兩個部分的調(diào)控完成整個視頻序列的碼率控制,幀與幀之間的數(shù)據(jù)無效期間完成視頻序列的碼率控制,對于第一幀的視頻圖像,采取的初始量化值為21,每一幀視頻圖像的期望比特數(shù)
對于視頻序列bus_cif.yuv采用原始的碼率控制實(shí)現(xiàn)方案,即未采用本發(fā)明方法的平均量化參數(shù)值為40,信噪比為36.499,而采用本發(fā)明方法的平均量化參數(shù)值為38,且信噪比為37.065。由此可見本發(fā)明提供的碼流控制方法不僅信噪比較高,而且量化系數(shù)較低,即優(yōu)化后視頻圖像的質(zhì)量較好、損失較小。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲介質(zhì)包括:rom、ram、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。