搜索 社区服务 统计排行 帮助
  • 3370阅读
  • 0回复

H.264(MPEG-4 AVC)级别(Level)、DPB 与 MaxDpbMbs 详解

楼层直达
级别: 新手上路
注册时间:
2011-11-17
在线时间:
7小时
发帖:
11
cnblogs.com/zyl910/archive/2011/12/08/h264_level.html
H.264(MPEG-4 AVC)级别(Level)、DPB 与 MaxDpbMbs 详解

  对于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 下呢?

(完)


参考文献
~~~~~~~~

en.wikipedia.org/wiki/H.264
H.264/MPEG-4 AVC




作者:zyl910
出处:cnblogs.com/zyl910/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利


[ 此帖被zyl910在2011-12-08 00:53重新编辑 ]

x264编码参数测试: 549335
快速回复

限150 字节
上一个 下一个