转自: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×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

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

  1. Hibernate注解----类级别注解以及属性注解详解----图片版本

    这篇文章是我在慕课网上学习Hibernate注解的时候进行手机以及整理的笔记. 今天把它分享给大家,希望对大家有用.可以进行收藏,然后需要的时候进行对照一下即可.这样能起到一个查阅的作用. 本文主要讲 ...

  2. Java jvm级别native关键词、JNI详解

    1.native关键词的引入 再完美的编程语言也有自己的不足之处,当然Java也不例外,Java的不足之处除了体现在运行速度(这点往往被一些其他编程语言使用者所诟病)上要比传统的C++慢许多之外,Ja ...

  3. h.264并行解码算法分析

    并行算法类型可以分为两类 Function-level Decomposition,按照功能模块进行并行 Data-level Decomposition,按照数据划分进行并行 Function-le ...

  4. 关于H.264 x264 h264 AVC1

    1. H.264是MPEG4的第十部分,是一个标准.对头,国际上两个视频专家组(VCEG和MPEG)合作提出的标准,两个专家组各有各的叫法,所以既叫H.264,也叫AVC. 2.x264是一个编码器, ...

  5. H.264 详解

    一.MPEG-4说明 1.VOP视频编码技术 VO(Video Object):视频对象,它是场景中的某个物体,最简单的情况下就是矩形框,它是有生命期的,由时间上连续的许多帧构成. VOP(Video ...

  6. H.264 基础及 RTP 封包详解

    转自:http://my.oschina.net/u/1431835/blog/393315 一. h264基础概念 1.NAL.Slice与frame意思及相互关系 1 frame的数据可以分为多个 ...

  7. H.264 码率设置

    一.什么是视频码率 视频码率是视频数据(包含视频色彩量.亮度量.像素量)每秒输出的位数.一般用的单位是kbps. 二.设置视频码率的必要性 在网络视频应用中,视频质量和网络带宽占用是相矛盾的.通常情况 ...

  8. 数据库常用的事务隔离级别和原理?&&mysql-Innodb事务隔离级别-repeatable read详解

    转载地址:https://baijiahao.baidu.com/s?id=1611918898724887602&wfr=spider&for=pc https://blog.csd ...

  9. 【图像处理】H.264有四种画质级别

    H.264有四种画质级别,分别是BP.EP.MP.HP,想要说明H.264 HP与H.264 MP的区别就要讲到H.264的技术发展了 H.264 视频编码技术在视频采集.后期制作等网络视频服务领域的 ...

随机推荐

  1. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&构建使用jquery来实现

    使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这篇文章进行安装和破解 ...

  2. Spring -- Bean自己主动装配&Bean之间关系&Bean的作用域

    对于学习spring有帮助的站点:http://jinnianshilongnian.iteye.com/blog/1482071 Bean的自己主动装配 Spring IOC 容器能够自己主动装配 ...

  3. sed 修连接文件,有坑

    -bash-4.1# ll /etc/rc.local  lrwxrwxrwx. 1 root root 13 Aug 15  2014 /etc/rc.local -> rc.d/rc.loc ...

  4. DTD笔记

    DTD(Document Type Definition)文档类型定义: DTD被用于定义XML文档的结构,作为规范XML文档的一种内容模型,DTD在各领域已形成统一规范的文档. 在XML文档中使用D ...

  5. Linux安装配置Redis CentOS 7 下安装Redis

    Redis是一个高性能的,开源key-value型数据库.是构建高性能,可扩展的Web应用的完美解决方案,可以内存存储亦可持久化存储.因为要使用跨进程,跨服务级别的数据缓存,在对比多个方案后,决定使用 ...

  6. bash_profile打不开怎么办,用nano .bash_profile打开

    I’ve spent years curating a collection of Mac bash aliases and shortcuts to make my life easier. My ...

  7. 浅谈JavaScript的Canvas(绘制图形)

    HTML5中新增加的一个元素canvas,要使用canvas元素,浏览器必须支持html5.通过canvas标签来创建元素,并需要为canvas指定宽度和高度,也就是绘图区域的大小. <canv ...

  8. block-循环引用

    在ARC机制下,app的内存管理由操作系统进行管理,不须要程序猿手动的管理内存,方便了开发.虽然,自己主动释放内存非常方便.可是并不是绝对安全,绝对不会产生内存泄露. 大部分导致iOS对象无法按预期释 ...

  9. 20170225 ABAP获取字符串长度/字节长度

    函数YGET_CHAR_LONG: FUNCTION YGET_CHAR_LONG. *"-------------------------------------------------- ...

  10. oracle case where 复杂sql语句

    update hr_user u set u.is_approve=(case when u.curr_org_id in (select t.org_id from hr_organization ...