H.264(MPEG-4 AVC)層級(Level)、DPB 與 MaxDpbMbs 詳解

來源:互聯網
上載者:User

  對於H.264(MPEG-4 AVC)而言,層級(Level)是與檔次(Profile)同等重要的參數。但很多文章說的很簡略,只是說標清視頻一般用3.1,高清用4,具體含義語焉不詳。於是我做了一番研究。

 

一、層級詳表

 

  層級(Level)是用來約束 解析度、幀率 和 碼率 的。詳細資料請看錶格——

Level Max macroblocks Max video bit rate (kbit/s) Examples for high resolution @ frame rate (max stored frames)
per
second
per frame BP, XP, MP HiP Hi10P Hi422P, Hi444PP
1 1,485 99 64 80 192 256 128×96@30.9 (8)
176×144@15.0 (4)
1b 1,485 99 128 160 384 512 128×96@30.9 (8)
176×144@15.0 (4)
1.1 3,000 396 192 240 576 768 176×144@30.3 (9)
320×240@10.0 (3)
352×288@7.5 (2)
1.2 6,000 396 384 480 1,152 1,536 320×240@20.0 (7)
352×288@15.2 (6)
1.3 11,880 396 768 960 2,304 3,072 320×240@36.0 (7)
352×288@30.0 (6)
2 11,880 396 2,000 2,500 6,000 8,000 320×240@36.0 (7)
352×288@30.0 (6)
2.1 19,800 792 4,000 5,000 12,000 16,000 352×480@30.0 (7)
352×576@25.0 (6)
2.2 20,250 1,620 4,000 5,000 12,000 16,000 352×480@30.7(10)
352×576@25.6 (7)
720×480@15.0 (6)
720×576@12.5 (5)
3 40,500 1,620 10,000 12,500 30,000 40,000 352×480@61.4 (12)
352×576@51.1 (10)
720×480@30.0 (6)
720×576@25.0 (5)
3.1 108,000 3,600 14,000 17,500 42,000 56,000 720×480@80.0 (13)
720×576@66.7 (11)
1280×720@30.0 (5)
3.2 216,000 5,120 20,000 25,000 60,000 80,000 1,280×720@60.0 (5)
1,280×1,024@42.2 (4)
4 245,760 8,192 20,000 25,000 60,000 80,000 1,280×720@68.3 (9)
1,920×1,080@30.1 (4)
2,048×1,024@30.0 (4)
4.1 245,760 8,192 50,000 62,500 150,000 200,000 1,280×720@68.3 (9)
1,920×1,080@30.1 (4)
2,048×1,024@30.0 (4)
4.2 522,240 8,704 50,000 62,500 150,000 200,000 1,920×1,080@64.0 (4)
2,048×1,080@60.0 (4)
5 589,824 22,080 135,000 168,750 405,000 540,000 1,920×1,080@72.3 (13)
2,048×1,024@72.0 (13)
2,048×1,080@67.8 (12)
2,560×1,920@30.7 (5)
3,680×1,536@26.7 (5)
5.1 983,040 36,864 240,000 300,000 720,000 960,000 1,920×1,080@120.5 (16)
4,096×2,048@30.0 (5)
4,096×2,304@26.7 (5)

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):範例:高解析度@幀率(最大儲存幀數)。

 

 

二、推算解析度與幀率

 

  在視頻壓制時,碼率的挑選是很容易判斷的。而解析度與幀率 和 層級 的關係,就沒那麼明顯了。所以我們需要找到計算方法。

 

  首先看看常見視頻解析度所配套的層級——

480P(800x480):若幀率低於13.5用2.2,若幀率在13.5至27之間就用3,幀率高於27時用3.1。

720P(1280x720):一般為3.1。

1080P(1920x1080):一般為4。

 

  可以看到480P(800x480)有點特殊,所以我以它為例來講解如何推算解析度與幀率。

 

  因宏塊尺寸是16x16的,我們根據此資訊計算出 水平宏塊數(PicWidthInMbs) 和 垂直宏塊數(FrameHeightInMbs)——

水平宏塊數 = ceil(視頻寬度 / 16) = ceil(800 / 16) = ceil(50.0) = 50

垂直宏塊數 = ceil(視頻高度 / 16) = ceil(480 / 16) = ceil(30.0) = 30

註:ceil(x)是向頂舍入函數,返回的是大於等於x的最小整數。

 

  然後計算每幀宏塊數(macroblocks per frame)——

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

 

  查上面的層級詳表,可知支援 每幀宏塊數1500 的最低層級是2.2。

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

  提高一個層級,層級3所允許的 每秒最大宏塊數 是 40500。40500 / 1500 = 27。即最高支援每秒27幀。

  再提高一個層級,層級3.1所允許的 每秒最大宏塊數 是 108000。108000 / 1500 = 72。即最高支援每秒72幀,夠用了。

 

  當宏塊數超過層級的約束時,x264會顯示這樣的警告資訊——

x264 [warning]: frame MB size (120x68) > level limit (5120)

 

  現在來做做練習題,鞏固一下所學知識吧——

1. 720P(1280x720)視頻在層級3.1下,最高支援每秒多少幀?

2. 1080P(1920x1080)視頻在層級4下,最高支援每秒多少幀?

 

 

三、最大儲存幀數、DPB 與 MaxDpbMbs

 

  在前面的層級詳表中,還有一個神秘的欄位——最大儲存幀數(max stored frames)。它是從何而來的呢?

 

  最大儲存幀數與DPB有關——DPB:decoded picture buffer,解碼圖片緩衝區。在做視頻解碼時,需要將最近的若干幅參考幀緩衝起來,這個緩衝區就叫做DPB。所以最大儲存幀數也是最大參考幀數(ref)。DPB一般以宏塊數為單位(DpbMbs),計算公式為——

DpbMbs = ref(參考幀數) * PicWidthInMbs(水平宏塊數) * FrameHeightInMbs(垂直宏塊數)

 

  在不同的層級(Level)下,最大的解碼圖片緩衝區宏塊數(MaxDpbMbs)是不同的——

Level MaxDpbMbs
1 396
1b 396
1.1 900
1.2 2,376
1.3 2,376
2 2,376
2.1 4,752
2.2 8,100
3 8,100
3.1 18,000
3.2 20,480
4 32,768
4.1 32,768
4.2 34,816
5 110,400
5.1 184,320

 

  我們可根據 MaxDpbMbs約束 反向推算出 最大的參考幀數——

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

注1:floor(x)是向底舍入函數,返回的是小於等於x的最大整數。

注2:因參考幀數(ref)最大隻能為16。

 

  練習題——

1. 720P(1280x720)視頻在層級3.1下,最高支援多少個參考幀(最大儲存幀數)?層級3.2、4 下呢?

2. 1080P(1920x1080)視頻在層級4下,最高支援多少個參考幀(最大儲存幀數)?層級5、5.1 下呢?

 

(完)

 

 

參考文獻

~~~~~~~~

 

http://en.wikipedia.org/wiki/H.264

H.264/MPEG-4 AVC

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.