H.264 / MPEG-4 AVC & 巨集塊數

weixin_34249678發表於2018-05-16

一、IPCM巨集塊簡介

在H.264中,一個巨集塊包括16*16個畫素,I巨集塊有三種形式:

    1. 16個I4x4編碼方式組成的巨集塊(為了方便,簡稱I4x4方式的巨集塊);
    1. I16x16巨集塊;
    1. IPCM巨集塊(特殊)

分塊越細,就越準確,所以I4x4編碼方式適合編碼那些紋理比較複雜的巨集塊,而I16x16編碼方式就更加籠統,適合編碼那些比較平滑的區域。

最特別的是IPCM巨集塊,這種巨集塊的脾氣很古怪:不預測,沒殘差,不變換,無量化等操作,而是直接傳畫素值,直接將最原始的yuv資料寫入到碼流中,可見IPCM的資訊不會有任何損失,是完全無損的. 如果將視訊的所有巨集塊都編碼成IPCM巨集塊,那麼H.264就是一個無損編碼,當然,在現實中,很少有人這麼做。

視訊應用五類舉例:

  • 1、news(新聞):變化和運動的區域比較小(比如人臉,一般佔視訊畫面的15%),背景是靜止的。

  • 2、soccer(足球):包含大面積統一方向的運動。鏡頭通常會在一個統一顏色的背景下(綠色)跟蹤一個快速運動的物體(足球)。

  • 3、cartoon(卡通):主題在運動,背景是絕對靜止的。

  • 4、panorama(全景畫):包含大面積統一方向的運動,運動方向是一致的。

  • 5、rest(其他):除以上幾種之外的視訊都屬於這一類。通常包含大量雜亂的運動,或者有很多鏡頭切換。

二、級別詳表

8154321-69d24ba910c15d83.png
具有最大特性值的級別

High Profile的最大位元率是Base / Extended / Main Profile的1.25倍,Hi10P是3倍,Hi422P / Hi444PP是4倍。
亮度取樣的數量是巨集塊數量的16×16 = 256倍(並且每秒亮度取樣的數量是每秒巨集塊數量的256倍)

針對表格的一些講解說明:

Level:級別。

Max macroblocks:最大巨集塊數。注:巨集塊尺寸是16x16的。

per second:每秒(的最大巨集塊數)。可用於約束幀率。

per frame:每幀(的最大巨集塊數)。可用於約束解析度。

Max video bit rate (kbit/s):最大視訊位元速率。不同檔次(Profile)下會有區別。

BP:Baseline Profile,基線檔次。

XP:Extended Profile,進階檔次。

MP:Main Profile,主要檔次。

HiP:High Profile,高階檔次。

Hi10P:High 10 Profile,高階10位檔次。

Hi422P:High 4:2:2 Profile,高階4:2:2檔次。

Hi444PP:High 4:4:4 Predictive Profile,高階4:4:4(實驗性?)檔次。

Examples for high resolution @ frame rate (max stored frames):範例:高解析度@幀率(最大儲存幀數)。

三、解析度和幀率的計算

解碼圖片緩衝

H.264 / AVC編碼器使用先前編碼的圖片來預測其他圖片中樣本的值。這使編碼器能夠有效地決定對給定影象進行編碼的最佳方式。在解碼器處,這樣的圖片被儲存在虛擬解碼圖片緩衝器(DPB)中。DPB的最大容量,以幀(或場對)為單位,如上表右列中的括號所示,可以計算如下:

capacity = min(floor(MaxDpbMbs /(PicWidthInMbs * FrameHeightInMbs)),16)

注1:floor(x)是向向下取整。

其中MaxDpbMbs是下表中作為級數的函式提供的常數值,並且PicWidthInMbs和FrameHeightInMbs是編碼視訊資料的圖片寬度和幀高度,以巨集塊為單位表示(四捨五入為整數值並考慮裁剪和巨集塊配對時適用)。

這裡以巨集塊數1616,480P(800480)作為例子舉例:

水平巨集塊數(PicWidthInMbs )= ceil(視訊寬度 / 16) = ceil(480 / 16) = 30

垂直巨集塊數(FrameHeightInMbs)= ceil(視訊高度 / 16) = ceil( 800 / 16 ) = 50

注:ceil(x)為向上取整函式

每幀巨集塊數 = 水平巨集塊數 * 垂直巨集塊數 = 50 * 30 = 1500

查上面的級別詳表,可知支援 每幀巨集塊數1500 的最低階別是2.2。

級別2.2所允許的 每秒最大巨集塊數(Max macroblocks per second) 是 20250。20250 / 1500 = 13.5。即最高支援每秒13.5幀。

相關文章