H.264編碼原理以及I幀B幀P幀

前言

H264是新一代的編碼標準讳嘱,以高壓縮高質量和支持多種網(wǎng)絡的流媒體傳輸著稱柱嫌,在編碼方面推掸,我理解的他的理論依據(jù)是:參照一段時間內圖像的統(tǒng)計結果表明沽甥,在相鄰幾幅圖像畫面中声邦, 一般有差別的像素只有10%以內的點,亮度差值變化不超過2%,而色度差值的變化只有1%以內摆舟。所以對于一段變化不大圖像畫面翔忽,我們可以先編碼出一個完整 的圖像幀A英融,隨后的B幀就不編碼全部圖像,只寫入與A幀的差別歇式,這樣B幀的大小就只有完整幀的1/10或更小胡野!B幀之后的C幀如果變化不大材失,我們可以繼續(xù) 以參考B的方式編碼C幀,這樣循環(huán)下去硫豆。這段圖像我們稱為一個序列(序列就是有相同特點的一段數(shù)據(jù))龙巨,當某個圖像與之前的圖像變化很大,無法參考前面的幀 來生成熊响,那我們就結束上一個序列旨别,開始下一段序列,也就是對這個圖像生成一個完整幀A1汗茄,隨后的圖像就參考A1生成秸弛,只寫入與A1的差別內容。

在H264協(xié)議里定義了三種幀洪碳,完整編碼的幀叫I幀递览,參考之前的I幀生成的只包含差異部分編碼的幀叫P幀,還有一種參考前后的幀編碼的幀叫B幀瞳腌。

H264采用的核心算法是幀內壓縮和幀間壓縮绞铃,幀內壓縮是生成I幀的算法,幀間壓縮是生成B幀和P幀的算法嫂侍。

序列的說明

在H264中圖像以序列為單位進行組織儿捧,一個序列是一段圖像編碼后的數(shù)據(jù)流,以I幀開始挑宠,到下一個I幀結束菲盾。

一個序列的第一個圖像叫做 IDR 圖像(立即刷新圖像),IDR 圖像都是 I 幀圖像痹栖。H.264 引入 IDR 圖像是為了解碼的重同步亿汞,當解碼器解碼到 IDR 圖像時,立即將參考幀隊列清空揪阿,將已解碼的數(shù)據(jù)全部輸出或拋棄疗我,重新查找參數(shù)集,開始一個新的序列南捂。這樣吴裤,如果前一個序列出現(xiàn)重大錯誤,在這里可以獲得重新同步的機會溺健。IDR圖像之后的圖像永遠不會使用IDR之前的圖像的數(shù)據(jù)來解碼麦牺。

一個序列就是一段內容差異不太大的圖像編碼后生成的一串數(shù)據(jù)流。當運動變化比較少時,一個序列可以很長剖膳,因為運動變化少就代表圖像畫面的內容變動很小魏颓,所 以就可以編一個I幀,然后一直P幀吱晒、B幀了甸饱。當運動變化多時,可能一個序列就比較短了仑濒,比如就包含一個I幀和3叹话、4個P幀。

三種幀的說明

  • I幀:幀內編碼幀 墩瞳,I幀表示關鍵幀驼壶,你可以理解為這一幀畫面的完整保留;解碼時只需要本幀數(shù)據(jù)就可以完成(因為包含完整畫面)
  • I幀特點:
    1.它是一個全幀壓縮編碼幀喉酌。它將全幀圖像信息進行JPEG壓縮編碼及傳輸;
    2.解碼時僅用I幀的數(shù)據(jù)就可重構完整圖像;
    3.I幀描述了圖像背景和運動主體的詳情;
    4.I幀不需要參考其他畫面而生成;
    5.I幀是P幀和B幀的參考幀(其質量直接影響到同組中以后各幀的質量);
    6.I幀是幀組GOP的基礎幀(第一幀),在一組中只有一個I幀;
    7.I幀不需要考慮運動矢量;
    8.I幀所占數(shù)據(jù)的信息量比較大热凹。
  • P幀:前向預測編碼幀。P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別瞭吃,解碼時需要用之前緩存的畫面疊加上本幀定義的差別碌嘀,生成最終畫面。(也就是差別幀歪架,P幀沒有完整畫面數(shù)據(jù)股冗,只有與前一幀的畫面差別的數(shù)據(jù))
  • P幀的預測與重構: P幀是以I幀為參考幀,在I幀中找出P幀“某點”的預測值和運動矢量,取預測差值和運動矢量一起傳送。在接收端根據(jù)運動矢量從I幀中找出P幀“某點”的預測值并與差值相加以得到P幀“某點”樣值,從而可得到完整的P幀和蚪。

  • P幀特點:
    1.P幀是I幀后面相隔1~2幀的編碼幀;
    2.P幀采用運動補償?shù)姆椒▊魉退c前面的I或P幀的差值及運動矢量(預測誤差);
    3.解碼時必須將I幀中的預測值與預測誤差求和后才能重構完整的P幀圖像;
    4.P幀屬于前向預測的幀間編碼止状。它只參考前面最靠近它的I幀或P幀;
    5.P幀可以是其后面P幀的參考幀,也可以是其前后的B幀的參考幀;
    6.由于P幀是參考幀,它可能造成解碼錯誤的擴散;
    7.由于是差值傳送,P幀的壓縮比較高。

  • B幀:雙向預測內插編碼幀攒霹。B幀是雙向差別幀怯疤,也就是B幀記錄的是本幀與前后幀的差別(具體比較復雜,有4種情況催束,但我這樣說簡單些)集峦,換言之,要解碼B 幀抠刺,不僅要取得之前的緩存畫面塔淤,還要解碼之后的畫面,通過前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面速妖。B幀壓縮率高高蜂,但是解碼時CPU會比較累。

  • B幀的預測與重構
    B幀以前面的I或P幀和后面的P幀為參考幀,“找出”B幀“某點”的預測值和兩個運動矢量,并取預測差值和運動矢量傳送罕容。接收端根據(jù)運動矢量在兩個參考幀中“找出(算出)”預測值并與差值求和,得到B幀“某點”樣值,從而可得到完整的B幀备恤。

  • B幀特點
    1.B幀是由前面的I或P幀和后面的P幀來進行預測的;
    2.B幀傳送的是它與前面的I或P幀和后面的P幀之間的預測誤差及運動矢量;
    3.B幀是雙向預測編碼幀;
    4.B幀壓縮比最高,因為它只反映丙參考幀間運動主體的變化情況,預測比較準確;
    5.B幀不是參考幀,不會造成解碼錯誤的擴散稿饰。

注: I、B露泊、P各幀是根據(jù)壓縮算法的需要喉镰,是人為定義的,它們都是實實在在的物理幀。一般來說滤淳,I幀的壓縮率是7(跟JPG差不多)梧喷,P幀是20,B幀可 以達到50脖咐。可見使用B幀能節(jié)省大量空間汇歹,節(jié)省出來的空間可以用來保存多一些I幀屁擅,這樣在相同碼率下,可以提供更好的畫質产弹。

壓縮算法的說明

h264的壓縮方法:

1.分組:把幾幀圖像分為一組(GOP派歌,也就是一個序列),為防止運動變化,幀數(shù)不宜取多。
2.定義幀:將每組內各幀圖像定義為三種類型,即I幀痰哨、B幀和P幀;
3.預測幀:以I幀做為基礎幀,以I幀預測P幀,再由I幀和P幀預測B幀;
4.數(shù)據(jù)傳輸:最后將I幀數(shù)據(jù)與預測的差值信息進行存儲和傳輸胶果。

幀內(Intraframe)壓縮也稱為空間壓縮(Spatial compression)。當壓縮一幀圖像時斤斧,僅考慮本幀的數(shù)據(jù)而不考慮相鄰幀之間的冗余信息早抠,這實際上與靜態(tài)圖像壓縮類似。幀內一般采用有損壓縮算法撬讽,由于幀內壓縮是編碼一個完整的圖像蕊连,所以可以獨立的解碼、顯示游昼。幀內壓縮一般達不到很高的壓縮甘苍,跟編碼jpeg差不多。

幀間(Interframe)壓縮的原理是:相鄰幾幀的數(shù)據(jù)有很大的相關性烘豌,或者說前后兩幀信息變化很小的特點载庭。也即連續(xù)的視頻其相鄰幀之間具有冗余信 息,根據(jù)這一特性,壓縮相鄰幀之間的冗余量就可以進一步提高壓縮量廊佩,減小壓縮比囚聚。幀間壓縮也稱為時間壓縮(Temporal compression),它通過比較時間軸上不同幀之間的數(shù)據(jù)進行壓縮罐寨。幀間壓縮一般是無損的靡挥。幀差值(Frame differencing)算法是一種典型的時間壓縮法,它通過比較本幀與相鄰幀之間的差異鸯绿,僅記錄本幀與其相鄰幀的差值跋破,這樣可以大大減少數(shù)據(jù)量簸淀。

順便說下有損(Lossy )壓縮和無損(Lossy less)壓縮。無損壓縮也即壓縮前和解壓縮后的數(shù)據(jù)完全一致毒返。多數(shù)的無損壓縮都采用RLE行程編碼算法租幕。有損壓縮意味著解壓縮后的數(shù)據(jù)與壓縮前的數(shù)據(jù)不 一致。在壓縮的過程中要丟失一些人眼和人耳所不敏感的圖像或音頻信息,而且丟失的信息不可恢復拧簸。幾乎所有高壓縮的算法都采用有損壓縮,這樣才能達到低數(shù)據(jù) 率的目標劲绪。丟失的數(shù)據(jù)率與壓縮比有關,壓縮比越小,丟失的數(shù)據(jù)越多,解壓縮后的效果一般越差盆赤。此外,某些有損壓縮算法采用多次重復壓縮的方式,這樣還會引 起額外的數(shù)據(jù)丟失

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末贾富,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牺六,更是在濱河造成了極大的恐慌颤枪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淑际,死亡現(xiàn)場離奇詭異畏纲,居然都是意外死亡,警方通過查閱死者的電腦和手機春缕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門盗胀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锄贼,你說我怎么就攤上這事票灰。” “怎么了咱娶?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵米间,是天一觀的道長。 經(jīng)常有香客問我膘侮,道長屈糊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任琼了,我火速辦了婚禮逻锐,結果婚禮上,老公的妹妹穿的比我還像新娘雕薪。我一直安慰自己昧诱,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布所袁。 她就那樣靜靜地躺著盏档,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燥爷。 梳的紋絲不亂的頭發(fā)上蜈亩,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天懦窘,我揣著相機與錄音,去河邊找鬼稚配。 笑死畅涂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的道川。 我是一名探鬼主播午衰,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冒萄!你這毒婦竟也來了?” 一聲冷哼從身側響起尊流,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奠旺,沒想到半個月后施流,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體响疚,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年瞪醋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银受。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宾巍,靈堂內的尸體忽然破棺而出咕幻,到底是詐尸還是另有隱情,我是刑警寧澤顶霞,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布肄程,位于F島的核電站,受9級特大地震影響蓝厌,放射性物質發(fā)生泄漏。R本人自食惡果不足惜拓提,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一隧膘、第九天 我趴在偏房一處隱蔽的房頂上張望代态。 院中可真熱鬧,春花似錦胆数、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽判莉。三九已至,卻和暖如春券盅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锰镀。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留憾筏,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓氧腰,卻偏偏與公主長得像刨肃,于是被迫代替她去往敵國和親古拴。 傳聞我的和親對象是個殘疾皇子真友,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容