H264,H265編碼概念 壓縮方法
一、什么是H264編碼
H.264,同時(shí)也是MPEG-4第十部分,是由ITU-T視頻編碼專(zhuān)家組(VCEG)和ISO/IEC動(dòng)態(tài)圖像專(zhuān)家組(MPEG)聯(lián)合組成的聯(lián)合視頻組(JVT,Joint Video Team)提出的高度壓縮數(shù)字視頻編解碼器標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)通常被稱(chēng)之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4AVC或MPEG-4/H.264 AVC,Advanced Video Coding高級(jí)視頻編碼)。
H.264因其是藍(lán)光光盤(pán)的一種編解碼標(biāo)準(zhǔn)而著名,所有藍(lán)光播放器都必須能解碼H.264。更重要的是,因?yàn)樘O(píng)果公司當(dāng)初毅然決然拋棄了Adobe的VP6編碼,選擇了H.264,這個(gè)標(biāo)準(zhǔn)也就隨著數(shù)億臺(tái)iPad和iPhone走入了千家萬(wàn)戶(hù),成為了目前視頻編碼領(lǐng)域的絕對(duì)霸主,占有超過(guò)80%的份額。H.264也被廣泛用于網(wǎng)絡(luò)流媒體數(shù)據(jù)、各種高清晰度電視廣播以及衛(wèi)星電視廣播等領(lǐng)域。H.264相較于以前的編碼標(biāo)準(zhǔn)有著一些新特性,如多參考幀的運(yùn)動(dòng)補(bǔ)償、變塊尺寸運(yùn)動(dòng)補(bǔ)償、幀內(nèi)預(yù)測(cè)編碼等,通過(guò)利用這些新特性,H.264比其他編碼標(biāo)準(zhǔn)有著更高的視頻質(zhì)量和更低的碼率,也因此受到了人們的認(rèn)可,而被廣泛應(yīng)用。
H.264最大的優(yōu)勢(shì)是具有很高的數(shù)據(jù)壓縮比率,在同等圖像質(zhì)量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。低碼率(Low Bit Rate)對(duì)H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4ASP等壓縮技術(shù)相比,H.264壓縮技術(shù)將大大節(jié)省用戶(hù)的下載時(shí)間和數(shù)據(jù)流量收費(fèi)。尤其值得一提的是,H.264在具有高壓縮比的同時(shí)還擁有高質(zhì)量流暢的圖像,正因?yàn)槿绱?,?jīng)過(guò)H.264壓縮的視頻數(shù)據(jù),在網(wǎng)絡(luò)傳輸過(guò)程中所需要的帶寬更少,也更加經(jīng)濟(jì)。
H264是新一代的編碼標(biāo)準(zhǔn),以高壓縮高質(zhì)量和支持多種網(wǎng)絡(luò)的流媒體傳輸著稱(chēng),在編碼方面,參照一段時(shí)間內(nèi)圖像的統(tǒng)計(jì)結(jié)果表明,在相鄰幾幅圖像畫(huà)面中,一般有差別的像素只有10%以?xún)?nèi)的點(diǎn),亮度差值變化不超過(guò)2%,而色度差值的變化只有1%以?xún)?nèi)。所以對(duì)于一段變化不大圖像畫(huà)面,我們可以先編碼出一個(gè)完整的圖像幀A,隨后的B幀就不編碼全部圖像,只寫(xiě)入與A幀的差別,這樣B幀的大小就只有完整幀的1/10或更?。幀之后的C幀如果變化不大,我們可以繼續(xù)以參考B的方式編碼C幀,這樣循環(huán)下去。這段圖像我們稱(chēng)為一個(gè)序列(序列就是有相同特點(diǎn)的一段數(shù)據(jù)),當(dāng)某個(gè)圖像與之前的圖像變化很大,無(wú)法參考前面的幀來(lái)生成,那我們就結(jié)束上一個(gè)序列,開(kāi)始下一段序列,也就是對(duì)這個(gè)圖像生成一個(gè)完整幀A1,隨后的圖像就參考A1生成,只寫(xiě)入與A1的差別內(nèi)容。
二、什么是I幀P幀B幀
在H264協(xié)議里定義了三種幀,完整編碼的幀叫I幀,參考之前的I幀生成的只包含差異部分編碼的幀叫P幀,還有一種參考前后的幀編碼的幀叫B幀。
H264采用的核心算法是幀內(nèi)壓縮和幀間壓縮,幀內(nèi)壓縮是生成I幀的算法,幀間壓縮是生成B幀和P幀的算法。
在H264中圖像以序列為單位進(jìn)行組織,一個(gè)序列是一段圖像編碼后的數(shù)據(jù)流,以I幀開(kāi)始,到下一個(gè)I幀結(jié)束。
一個(gè)序列的第一個(gè)圖像叫做 IDR 圖像(立即刷新圖像),IDR 圖像都是 I 幀圖像。H.264 引入 IDR 圖像是為了解碼的重同步,當(dāng)解碼器解碼到 IDR 圖像時(shí),立即將參考幀隊(duì)列清空,將已解碼的數(shù)據(jù)全部輸出或拋棄,重新查找參數(shù)集,開(kāi)始一個(gè)新的序列。這樣,如果前一個(gè)序列出現(xiàn)重大錯(cuò)誤,在這里可以獲得重新同步的機(jī)會(huì)。IDR圖像之后的圖像永遠(yuǎn)不會(huì)使用IDR之前的圖像的數(shù)據(jù)來(lái)解碼。
一個(gè)序列就是一段內(nèi)容差異不太大的圖像編碼后生成的一串?dāng)?shù)據(jù)流。當(dāng)運(yùn)動(dòng)變化比較少時(shí),一個(gè)序列可以很長(zhǎng),因?yàn)檫\(yùn)動(dòng)變化少就代表圖像畫(huà)面的內(nèi)容變動(dòng)很小,所以就可以編一個(gè)I幀,然后一直P(pán)幀、B幀了。當(dāng)運(yùn)動(dòng)變化多時(shí),可能一個(gè)序列就比較短了,比如就包含一個(gè)I幀和3、4個(gè)P幀。
對(duì)三種幀的介紹
I幀
幀內(nèi)編碼幀 ,I幀表示關(guān)鍵幀,你可以理解為這一幀畫(huà)面的完整保留;解碼時(shí)只需要本幀數(shù)據(jù)就可以完成(因?yàn)榘暾?huà)面)。
特點(diǎn)
它是一個(gè)全幀壓縮編碼幀。它將全幀圖像信息進(jìn)行JPEG壓縮編碼及傳輸
解碼時(shí)僅用I幀的數(shù)據(jù)就可重構(gòu)完整圖像
I幀描述了圖像背景和運(yùn)動(dòng)主體的詳情
I幀不需要參考其他畫(huà)面而生成
I幀是P幀和B幀的參考幀(其質(zhì)量直接影響到同組中以后各幀的質(zhì)量)
I幀是幀組GOP的基礎(chǔ)幀(第一幀),在一組中只有一個(gè)I幀
I幀不需要考慮運(yùn)動(dòng)矢量
I幀所占數(shù)據(jù)的信息量比較大
P幀
前向預(yù)測(cè)編碼幀。P幀表示的是這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別,解碼時(shí)需要用之前緩存的畫(huà)面疊加上本幀定義的差別,生成最終畫(huà)面。(也就是差別幀,P幀沒(méi)有完整畫(huà)面數(shù)據(jù),只有與前一幀的畫(huà)面差別的數(shù)據(jù)),通過(guò)充分將低于圖像序列中前面已編碼幀的時(shí)間冗余信息來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像,也叫預(yù)測(cè)幀
P幀的預(yù)測(cè)與重構(gòu):P幀是以I幀為參考幀,在I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值和運(yùn)動(dòng)矢量,取預(yù)測(cè)差值和運(yùn)動(dòng)矢量一起傳送。在接收端根據(jù)運(yùn)動(dòng)矢量從I幀中找出P幀“某點(diǎn)”的預(yù)測(cè)值并與差值相加以得到P幀“某點(diǎn)”樣值,從而可得到完整的P幀。
特點(diǎn):
P幀是I幀后面相隔1~2幀的編碼幀
P幀采用運(yùn)動(dòng)補(bǔ)償?shù)姆椒▊魉退c前面的I或P幀的差值及運(yùn)動(dòng)矢量(預(yù)測(cè)誤差)
解碼時(shí)必須將I幀中的預(yù)測(cè)值與預(yù)測(cè)誤差求和后才能重構(gòu)完整的P幀圖像
P幀屬于前向預(yù)測(cè)的幀間編碼。它只參考前面最靠近它的I幀或P幀
P幀可以是其后面P幀的參考幀,也可以是其前后的B幀的參考幀
由于P幀是參考幀,它可能造成解碼錯(cuò)誤的擴(kuò)散
由于是差值傳送,P幀的壓縮比較高
B幀
雙向預(yù)測(cè)內(nèi)插編碼幀。B幀是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別(具體比較復(fù)雜,有4種情況,但我這樣說(shuō)簡(jiǎn)單些),換言之,要解碼B幀,不僅要取得之前的緩存畫(huà)面,還要解碼之后的畫(huà)面,通過(guò)前后畫(huà)面的與本幀數(shù)據(jù)的疊加取得最終的畫(huà)面。B幀壓縮率高,但是解碼時(shí)CPU會(huì)比較累。
B幀的預(yù)測(cè)與重構(gòu):B幀以前面的I或P幀和后面的P幀為參考幀,“找出”B幀“某點(diǎn)”的預(yù)測(cè)值和兩個(gè)運(yùn)動(dòng)矢量,并取預(yù)測(cè)差值和運(yùn)動(dòng)矢量傳送。接收端根據(jù)運(yùn)動(dòng)矢量在兩個(gè)參考幀中“找出(算出)”預(yù)測(cè)值并與差值求和,得到B幀“某點(diǎn)”樣值,從而可得到完整的B幀。
特點(diǎn):
B幀是由前面的I或P幀和后面的P幀來(lái)進(jìn)行預(yù)測(cè)的
B幀傳送的是它與前面的I或P幀和后面的P幀之間的預(yù)測(cè)誤差及運(yùn)動(dòng)矢量
B幀是雙向預(yù)測(cè)編碼幀
B幀壓縮比最高,因?yàn)樗环从潮麉⒖紟g運(yùn)動(dòng)主體的變化情況,預(yù)測(cè)比較準(zhǔn)確
B幀不是參考幀,不會(huì)造成解碼錯(cuò)誤的擴(kuò)散
I、B、P各幀是根據(jù)壓縮算法的需要,是人為定義的,它們都是實(shí)實(shí)在在的物理幀。一般來(lái)說(shuō),I幀的壓縮率是7(跟JPG差不多),P幀是20,B幀可以達(dá)到50??梢?jiàn)使用B幀能節(jié)省大量空間,節(jié)省出來(lái)的空間可以用來(lái)保存多一些I幀,這樣在相同碼率下,可以提供更好的畫(huà)質(zhì)。
三、H264、H265壓縮方法
H.265又稱(chēng)為HEVC(全稱(chēng)High Efficiency Video Coding,高效率視頻編碼,本文統(tǒng)稱(chēng)為H.265),是ITU-T H.264/MPEG-4 AVC標(biāo)準(zhǔn)的繼任者。2004年由ISO/IEC Moving Picture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)作為ISO/IEC 23008-2 MPEG-H Part 2或稱(chēng)作ITU-T H.265開(kāi)始制定。第一版的HEVC/H.265視頻壓縮標(biāo)準(zhǔn)在2013年4月13日被接受為國(guó)際電信聯(lián)盟(ITU-T)的正式標(biāo)準(zhǔn)。
H265/HEVC的編碼架構(gòu)大致上和H.264/AVC的架構(gòu)相似,也主要包含:幀內(nèi)預(yù)測(cè)(intra prediction)、幀間預(yù)測(cè)(inter prediction)、轉(zhuǎn)換(transform)、量化(quantization)、去區(qū)塊濾波器(deblocking filter)、熵編碼(entropy coding)等模塊。但在HEVC編碼架構(gòu)中,整體被分為了三個(gè)基本單位,分別是:編碼單位(coding unit,CU)、預(yù)測(cè)單位(predict unit,PU)和轉(zhuǎn)換單位(transform unit,TU)。
分組:把幾幀圖像分為一組(GOP,也就是一個(gè)序列),為防止運(yùn)動(dòng)變化,幀數(shù)不宜取多。
定義幀:將每組內(nèi)各幀圖像定義為三種類(lèi)型,即I幀、B幀和P幀;
預(yù)測(cè)幀:以I幀做為基礎(chǔ)幀,以I幀預(yù)測(cè)P幀,再由I幀和P幀預(yù)測(cè)B幀;
數(shù)據(jù)傳輸:最后將I幀數(shù)據(jù)與預(yù)測(cè)的差值信息進(jìn)行存儲(chǔ)和傳輸。
幀內(nèi)(Intraframe)壓縮也稱(chēng)為空間壓縮(Spatial compression)。
當(dāng)壓縮一幀圖像時(shí),僅考慮本幀的數(shù)據(jù)而不考慮相鄰幀之間的冗余信息,這實(shí)際上與靜態(tài)圖像壓縮類(lèi)似。幀內(nèi)一般采用有損壓縮算法,由于幀內(nèi)壓縮是編碼一個(gè)完整的圖像,所以可以獨(dú)立的解碼、顯示。幀內(nèi)壓縮一般達(dá)不到很高的壓縮,跟編碼jpeg差不多。
幀間(Interframe)壓縮
相鄰幾幀的數(shù)據(jù)有很大的相關(guān)性,或者說(shuō)前后兩幀信息變化很小的特點(diǎn)。也即連續(xù)的視頻其相鄰幀之間具有冗余信息,根據(jù)這一特性,壓縮相鄰幀之間的冗余量就可以進(jìn)一步提高壓縮量,減小壓縮比。幀間壓縮也稱(chēng)為時(shí)間壓縮(Temporal compression),它通過(guò)比較時(shí)間軸上不同幀之間的數(shù)據(jù)進(jìn)行壓縮。幀間壓縮一般是無(wú)損的。幀差值(Frame differencing)算法是一種典型的時(shí)間壓縮法,它通過(guò)比較本幀與相鄰幀之間的差異,僅記錄本幀與其相鄰幀的差值,這樣可以大大減少數(shù)據(jù)量。
有損(Lossy )壓縮和無(wú)損(Lossy less)壓縮。
無(wú)損壓縮也即壓縮前和解壓縮后的數(shù)據(jù)完全一致。多數(shù)的無(wú)損壓縮都采用RLE行程編碼算法。
有損壓縮意味著解壓縮后的數(shù)據(jù)與壓縮前的數(shù)據(jù)不一致。在壓縮的過(guò)程中要丟失一些人眼和人耳所不敏感的圖像或音頻信息,而且丟失的信息不可恢復(fù)。幾乎所有高壓縮的算法都采用有損壓縮,這樣才能達(dá)到低數(shù)據(jù)率的目標(biāo)。丟失的數(shù)據(jù)率與壓縮比有關(guān),壓縮比越小,丟失的數(shù)據(jù)越多,解壓縮后的效果一般越差。此外,某些有損壓縮算法采用多次重復(fù)壓縮的方式,這樣還會(huì)引起額外的數(shù)據(jù)丟失。
比起H.264/AVC,H.265/HEVC提供了更多不同的工具來(lái)降低碼率,以編碼單位來(lái)說(shuō), 最小的8x8到最大的64x64。信息量不多的區(qū)域(顏色變化不明顯,比如車(chē)體的紅色部分和地面的灰色部分)劃分的宏塊較大,編碼后的碼字較少,而細(xì)節(jié)多的地方(輪胎)劃分的宏塊就相應(yīng)的小和多一些,編碼后的碼字較多,這樣就相當(dāng)于對(duì)圖像進(jìn)行了有重點(diǎn)的編碼,從而降低了整體的碼率,編碼效率就相應(yīng)提高了。同時(shí),H.265的幀內(nèi)預(yù)測(cè)模式支持33種方向(H.264只支持8種),并且提供了更好的運(yùn)動(dòng)補(bǔ)償處理和矢量預(yù)測(cè)方法。
目前的HEVC標(biāo)準(zhǔn)共有三種模式:Main、Main10和Main Still Picture。Main模式支持8bit色深(即紅綠藍(lán)三色各有256個(gè)色度,共1670萬(wàn)色),Main10模式支持10bit色深,將會(huì)用于超高清電視(UHDTV)上。前兩者都將色度采樣格式限制為4:2:0。預(yù)期將在2014年對(duì)標(biāo)準(zhǔn)有所擴(kuò)展,將會(huì)支持4:2:2和4:4:4采樣格式(即提供了更高的色彩還原度)和多視圖編碼(例如3D立體視頻編碼)。
H.265標(biāo)準(zhǔn)的誕生是在有限帶寬下傳輸更高質(zhì)量的網(wǎng)絡(luò)視頻。對(duì)于大多數(shù)專(zhuān)業(yè)人士來(lái)說(shuō),H.265編碼標(biāo)準(zhǔn)并不陌生,其是ITU-TVCEG繼H.264之后所制定的視頻編碼標(biāo)準(zhǔn)。H.265標(biāo)準(zhǔn)主要是圍繞著現(xiàn)有的視頻編碼標(biāo)準(zhǔn)H.264,在保留了原有的某些技術(shù)外,增加了能夠改善碼流、編碼質(zhì)量、延時(shí)及算法復(fù)雜度之間的關(guān)系等相關(guān)的技術(shù)。H.265研究的主要內(nèi)容包括,提高壓縮效率、提高魯棒性和錯(cuò)誤恢復(fù)能力、減少實(shí)時(shí)的時(shí)延、減少信道獲取時(shí)間和隨機(jī)接入時(shí)延、降低復(fù)雜度。
H.265重新利用了H.264中定義的很多概念。兩者都是基于塊的視頻編碼技術(shù),所以它們有著相同的根源,和相近的編碼方式,包括:歡迎加 q 群 384170753 一起學(xué)習(xí)交流
1、以宏塊來(lái)細(xì)分圖片,并最終以塊來(lái)細(xì)分。
2、使用幀內(nèi)壓縮技術(shù)減少空間冗余。
3、使用幀間壓縮技術(shù)減少時(shí)間冗余(運(yùn)動(dòng)估計(jì)和補(bǔ)償)。
4、使用轉(zhuǎn)換和量化來(lái)進(jìn)行殘留數(shù)據(jù)壓縮。
5、使用熵編碼減少殘留和運(yùn)動(dòng)矢量傳輸和信號(hào)發(fā)送中的最后冗余。
事實(shí)上,視頻編解碼從MPEG-1誕生至今都沒(méi)有根本性改進(jìn),H.265也只是H.264在一些關(guān)鍵性能上的更強(qiáng)進(jìn)化以及簡(jiǎn)單化。