2024年3月31日发(作者:)

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

对于H.264(MPEG-4 AVC)而言,级别(Level)是与档次(Profile)同等重要的参

数。但很多文章说的很简略,只是说标清视频一般用3.1,高清用4,具体含义语焉不详。

于是我做了一番研究。

一、级别详表

级别(Level)是用来约束分辨率、帧率和码率的。详细信息请看表格——

Max macroblocks

Level

per

second

1,485

1,485

per frame

99

99

Max video bit rate (kbit/s)

BP, XP,

MP

64

128

HiP

80

160

Hi10P

192

384

Hi422P,

Hi444PP

256

512

Examples for high resolution @

frame rate (max stored frames)

128×96@30.9 (8)

176×144@15.0 (4)

128×96@30.9 (8)

176×144@15.0 (4)

1

1b

1.1 3,000 396 192 240 576

176×144@30.3 (9)

768 320×240@10.0 (3)

352×288@7.5 (2)

1,536

3,072

8,000

16,000

320×240@20.0 (7)

352×288@15.2 (6)

320×240@36.0 (7)

352×288@30.0 (6)

320×240@36.0 (7)

352×288@30.0 (6)

352×480@30.0 (7)

352×576@25.0 (6)

1.2

1.3

2

2.1

6,000

11,880

11,880

19,800

396

396

396

792

384

768

2,000

4,000

480

960

2,500

5,000

1,152

2,304

6,000

12,000

2.2 20,250 1,620 4,000 5,000 12,000

352×480@30.7(10)

352×576@25.6 (7)

16,000

720×480@15.0 (6)

720×576@12.5 (5)

352×480@61.4 (12)

352×576@51.1 (10)

40,000

720×480@30.0 (6)

720×576@25.0 (5)

56,000

720×480@80.0 (13)

720×576@66.7 (11)

3 40,500 1,620 10,000 12,500 30,000

3.1 108,000 3,600 14,000 17,500 42,000

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

1,280×720@68.3 (9)

80,000 1,920×1,080@30.1 (4)

2,048×1,024@30.0 (4)

1,280×720@68.3 (9)

200,000 1,920×1,080@30.1 (4)

2,048×1,024@30.0 (4)

200,000

1,920×1,080@64.0 (4)

2,048×1,080@60.0 (4)

4.1 245,760 8,192 50,000 62,500 150,000

4.2 522,240 8,704 50,000 62,500 150,000

5 589,824 22,080 135,000 168,750 405,000

1,920×1,080@72.3 (13)

2,048×1,024@72.0 (13)

540,000 2,048×1,080@67.8 (12)

2,560×1,920@30.7 (5)

3,680×1,536@26.7 (5)

1,920×1,080@120.5 (16)

960,000 4,096×2,048@30.0 (5)

4,096×2,304@26.7 (5)

5.1 983,040 36,864 240,000 300,000 720,000

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)

三、最大存储帧数、DPB 与MaxDpbMbs

在前面的级别详表中,还有一个神秘的字段——最大存储帧数(max stored frames)。

它是从何而来的呢?

最大存储帧数与DPB有关——DPB:decoded picture buffer,解码图片缓存区。在做

视频解码时,需要将最近的若干幅参考帧缓存起来,这个缓冲区就叫做DPB。所以最大存

储帧数也是最大参考帧数(ref)。DPB一般以宏块数为单位(DpbMbs),计算公式为——

DpbMbs = ref(参考帧数) * PicWidthInMbs(水平宏块数) * FrameHeightInMbs(垂直

宏块数)

在不同的级别(Level)下,最大的解码图片缓存区宏块数(MaxDpbMbs)是不同的——

Level

1

1b

1.1

1.2

1.3

2

2.1

2.2

3

3.1

3.2

4

4.1

4.2

5

5.1

MaxDpbMbs

396

396

900

2,376

2,376

2,376

4,752

8,100

8,100

18,000

20,480

32,768

32,768

34,816

110,400

184,320

我们可根据MaxDpbMbs约束倒推出最大的参考帧数——

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

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

注2:因参考帧数(ref)最大只能为16。