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

转自:http://www.cnblogs.com/zyl910/archive/2011/12/08/h264_level.html

  对于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×[email protected] (8)
176×[email protected] (4)
1b 1,485 99 128 160 384 512 128×[email protected] (8)
176×[email protected] (4)
1.1 3,000 396 192 240 576 768 176×[email protected] (9)
320×[email protected] (3)
352×[email protected] (2)
1.2 6,000 396 384 480 1,152 1,536 320×[email protected] (7)
352×[email protected] (6)
1.3 11,880 396 768 960 2,304 3,072 320×[email protected] (7)
352×[email protected] (6)
2 11,880 396 2,000 2,500 6,000 8,000 320×[email protected] (7)
352×[email protected] (6)
2.1 19,800 792 4,000 5,000 12,000 16,000 352×[email protected] (7)
352×[email protected] (6)
2.2 20,250 1,620 4,000 5,000 12,000 16,000 352×[email protected](10)
352×[email protected] (7)
720×[email protected] (6)
720×[email protected] (5)
3 40,500 1,620 10,000 12,500 30,000 40,000 352×[email protected] (12)
352×[email protected] (10)
720×[email protected] (6)
720×[email protected] (5)
3.1 108,000 3,600 14,000 17,500 42,000 56,000 720×[email protected] (13)
720×[email protected] (11)
1280×[email protected] (5)
3.2 216,000 5,120 20,000 25,000 60,000 80,000 1,280×[email protected] (5)
1,280×1,[email protected] (4)
4 245,760 8,192 20,000 25,000 60,000 80,000 1,280×[email protected] (9)
1,920×1,[email protected] (4)
2,048×1,[email protected] (4)
4.1 245,760 8,192 50,000 62,500 150,000 200,000 1,280×[email protected] (9)
1,920×1,[email protected] (4)
2,048×1,[email protected] (4)
4.2 522,240 8,704 50,000 62,500 150,000 200,000 1,920×1,[email protected] (4)
2,048×1,[email protected] (4)
5 589,824 22,080 135,000 168,750 405,000 540,000 1,920×1,[email protected] (13)
2,048×1,[email protected] (13)
2,048×1,[email protected] (12)
2,560×1,[email protected] (5)
3,680×1,[email protected] (5)
5.1 983,040 36,864 240,000 300,000 720,000 960,000 1,920×1,[email protected] (16)
4,096×2,[email protected] (5)
4,096×2,[email protected] (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

时间: 2024-08-25 10:57:15

H.264(MPEG-4 AVC)级别(Level)、DPB 与 MaxDpbMbs 详解(转载)的相关文章

RAID级别和实现实例操作详解

一.RAID简史 1.RAID由来 Berkeley:伯克利提出:A case for Redundent Arrays of Inexpensive Disks 为RAID(廉价冗余阵列) 如今:Redundant Arrays of Independent Disks 独立冗余阵列 2.优点和表现方式 1)通过磁盘并行读写,提高IO能力: 2)通过磁盘冗余(容错)机制来实现提高耐用性: 3.级别:多块磁盘组织在一起的工作方式有所不同 RAID0.RAID1.RAID2.RAID3.RAID4

h.264并行解码算法分析

并行算法类型可以分为两类 Function-level Decomposition,按照功能模块进行并行 Data-level Decomposition,按照数据划分进行并行 Function-level Decomposition 在h.264解码时进行功能划分,例如对于四核系统,各个核心分别执行下列任务 熵解码framen 逆量化.逆变换framen-1 预测处理framen-2 去块滤波framen-3 这种并行类型就是流水线类型,但这种类型在h.264解码中会出现以下问题 各个功能部分

H.264 基础及 RTP 封包详解

一. h264基础概念 1.NAL.Slice与frame意思及相互关系 1 frame的数据可以分为多个slice.每个slice中的数据,在帧内预测只用到自己slice的数据, 与其他slice 数据没有依赖关系. NAL 是用来将编码的数据进行大包的. 比如,每一个slice 数据可以放在NAL 包中.I frame 是自己独立编码,不依赖于其他frame 数据.P frame 依赖 I frame 数据. B frame 依赖 I frame, P frame 或其他 B frame 数

H.264 码率设置

一.什么是视频码率 视频码率是视频数据(包含视频色彩量.亮度量.像素量)每秒输出的位数.一般用的单位是kbps. 二.设置视频码率的必要性 在网络视频应用中,视频质量和网络带宽占用是相矛盾的.通常情况下,视频流占用的带宽越高则视频质量也越高,需要的网络带宽也越大,解决这一矛盾的钥匙当然是视频编解码技术.评判一种视频编解码技术的优劣,是比较在相同的带宽条件下,哪个视频质量更好:在相同的视频质量条件下,哪个占用的网络带宽更少(文件体积小). 是不是视频码率越高,质量越好呢?理论上是这样的.然而在我们

【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

<H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅.绝知此事要躬行".仅仅有自己依照标准文档以代码的形式操作一遍,才干对视频压缩编码标准的思想和方法有足够深刻的理解和体会. 链接地址:H.264/AVC视频编解码技术具体解释 GitHub代码地址:点击这里 1. H.264的CAVLC

【H.264/AVC视频编解码技术详解】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 1. H.264的CAVLC解析宏块残差数据的流

【H.264/AVC视频编解码技术详解】十三、熵编码算法(3):CAVLC原理

<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看! "纸上得来终觉浅,绝知此事要躬行",只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会! 链接地址:H.264/AVC视频编解码技术详解 GitHub代码地址:点击这里 上下文自适应的变长编码(Context-base

MPEG-4 AVC and H.264

MPEG-4 AVC and H.264 MPEG-4 AVC is MPEG-4 part 10, ISO/IEC 14496-10, and is technically identical to ITU H.264 standand. so H.264/MPEG-4 AVC is commonly expressed. H.264/MPEG-4 AVC wikipedia H.264 was developed by the ITU-T Video Coding Experts Group

AVC/H.264介绍

AVC/H.264定义了4种不同的Profile(类):Baseline(基线类), Main(主要类), Extended(扩展类)和High Profile(高端类)(它们各自下分成许多个层): - Baseline Profile 提供I/P帧,仅支持progressive(逐行扫描)和CAVLC - Extended Profile 提供I/P/B/SP/SI帧,仅支持progressive(逐行扫描)和CAVLC - Main Profile 提供I/P/B帧,支持progressiv