關於X264比較好流程的介紹(GOP分法)

來源:互聯網
上載者:User
關於X264比較好流程的介紹(GOP分法)  
轉載自:http://www.nmm-hd.org/bbs/thread-1014-1-2.html
由於x264最近引入了weightp,雖然weighted p-prediction早已是H.264標準中規定的內容了,但由於其本身的難以實現,知道最近x264才加入對其的支援。那麼我就從GOP開始理清下這堆讓人煩惱的關係吧:

GOP:GOP的概念並非是獨一的,比如我們在談論Scalable Video Coding(可裁剪編碼)時,會常常把GOP說成相鄰IP之間的這麼一組幀集合,所以早上大蝦問我時我毫不猶豫的用了SVC中的定義。不過在X264 中,由於它本身尚不支援SVC,GOP被定義為IDR幀之間的距離,至於IDR是什麼我在下面即會介紹,而x264中和GOP相關的參數主要有二,其一是 –keyint,控制的是GOP的最大可能距離;另一個是–min-keyint,控制的是允許最小的GOP距離。

IDR:即時可解碼幀的縮寫,所謂即時可解碼無非就是本幀內所有的MB都採用的是Intra-prediction方式編碼的,這樣不需要任何其它幀的資訊就能解碼顯示此幀的全部內容了。在x264中,IDR幀是I幀的一個子集,而和IDR有關的參數除了上面GOP設定的兩個基本參數外,還有一個 –scenecut,它控制了如何自適應的通過判斷情境的變化加入IDR幀,以override之前的判斷。其具體做法是通過計算本幀和前一幀之間 visual difference在根據scenecut和minkeyint的設定值形成判據,判定此處是否存在scenechange,判據成立的話則將本幀判定為IDR幀,反之則有可能為I幀(判據的前半成立)或者BP。同時,x264中也限制了被兩個IDR幀包括的區間之間,是沒有任何資訊的“交流”的,亦即不允許分屬於不同IDR幀區間內的兩幀互為參考關係。從這層意義上看,IDR即決定了GOP的size。

I Frame:Intra-predicted Frame,嗯,這個估計都知道,不過由於IDR的存在,使得x264的GOP內也可以存在I幀。

ref frames:首先,這是一個針對Sub-MB level而言的參數,而不是一個從Frame角度說的參數。假定在b-pyramid關掉的前提下,ref frames控制的是p幀內的每個P sub-macroblock(8×8),他可以選擇的前向已編碼P/I幀的最大值,已編碼幀一般放在decoded picture buffer(DPB)中,而DPB的允許大小由Level控制,這也是不同解析度下DXVA Compatible Profile中ref設定的參照標準。在編碼過程中,P Frame中每個P的8×8 sub-MB,都會在ref規定的DPB中尋找最合適(比如difference最小)的某一幀的某一位置作為它的參考塊。在沒有weightp引入的前提下,對每一個P Sub-MB而言,最終作為參考的對象只可能有一個。

weightp:好,我們來看weightp下的情況(依然關閉b-pyramid),為了方便說明,我把當前待編碼幀用n表示,比如ref frames此時是4,那麼DPB能最多可能有4個之前已編碼的I或者P幀,假設他們的標號分別是n0~n3。再規定,我現在編碼到第m個sub-MB。在沒有weightp的情況下,m只可能選擇n0~n3中某一幀內的m’為參考對象;而weightp的引入,使得 m = a0*m’_n0 + a1*m’_n1 + a2*m’_n2 + a3*m’_n3 成為了可能。

編碼順序:在理清楚了上面的所有概念後,編碼器在工作時到底是怎麼一樣的處理順序,以及H.264引以為傲的編解碼順序和播放順序分離的原理,就很容易理解了。
此處我們回到最基本的無weightp下,站在frame level的角度說下編碼的順序是怎樣的,同時假設我們處理的第一幀是IDR幀,此處所有的“向後”指的是回放順序時間增長的方向:
1、編碼IDR幀。
2、根據scenecut和min-keyint的設定,向後移動min-keyint距離,開始判定是否為scenechange,直到判定滿足,或者到達keyint設定值的距離時停止。同時記錄判定條件不完全滿足時的位置。
3、編碼找到的位置幀,亦為IDR幀,GOP形成。
4、根據2步中得到的判定條件不完全滿足時的位置,將對應幀按時間順序用I幀編碼。
5、找到最頭上IDR和離其最近的I幀形成的sub-GOP(嚴格意義上說此處並非GOP因為GOP之間不能交換資訊),結合bframes的設定大小,推斷P幀出現的位置。具體而言,按時間順序走每一幀,比較該幀用P編碼和B編碼時的視覺誤差和複雜度何者更大,根據某些公式推匯出此處應該用何種框架類型,再向後移一幀;如果直到bframes規定的值都未出現P,則強制插入一幀P。這樣就決定了每個sub-GOP內P幀的位置。
6、最後一步,根據I/IDR/P形成的子區間,按時間順序編碼各幀為B幀。

舉個偽例來說 比如100-120幀這樣的一段視頻
第一步結束後編碼完 100幀
第二三步結束後可能編碼完 120幀和110幀(IDR) 同時找出了104 108 115幀應該編碼為I
第四步結束後編碼完 104 108 115幀為I
第五步對 100-104 104-108 108-110 110-115 115-120五個子區間,判斷P幀出現的位置並編碼
有可能判斷出 102 113 118為P幀
最後一步在編碼之間的部分為B幀。
於是,編解碼過程輸出幀的順序其實是
100 110 104 108 102 101 103 105 106 109 …



個人總結:
1.GOP被定義為IDR幀之間的距離,並且每個GOP之間是沒有通訊的。
2.IDR:即時可解碼幀的縮寫,所謂即時可解碼無非就是本幀內所有的MB都採用的是Intra-prediction方式編碼的,這樣不需要任何其它幀的資訊就能解碼顯示此幀的全部內容了。IDR幀是I幀的子集;
怎麼樣判斷一個GOP的距離或者說設定一幀為IDR,在X264中有一個變數scenecut,通過計算本幀和前一幀之間visual difference在根據scenecut和minkeyint的設定值形成判據,判定此處是否存在scenechange,判據成立的話則將本幀判定為IDR幀,反之則有可能為I幀(判據的前半成立)或者BP

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.