zyl910优化技巧、硬件体系、图像处理、图形学、游戏编程、国际化与文本信息处理。 |
| 博客园 :: 首页 :: 博问 :: 闪存 ::
新随笔 :: 联系 :: 订阅 |
|
|
||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| 25 | 26 | 27 | 28 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
公告
昵称:zyl910园龄:7年4个月
粉丝:154
关注:4 +加关注
搜索
常用链接
我的标签
随笔分类(1175)
- --- Best_重要的(32)
- --- Bug_故障排除(1)
- --- My_原创(149)
- --- MyTip_小技巧(9)
- --- Program_编程(88)
- --- Public_发布(22)
- --- Release_软件发布(3)
- --- Tool_工具 (15)
- --- Translation_翻译(1)
- A00 Math_数学(2)
- AA0 Algebra_代数(1)
- AA1 Elementary_初等代数
- AA2 Linear_线性代数(1)
- AP0 Physical_物理(1)
- APM Mechanics_力学(1)
- B00 Optimization_优化技巧(17)
- B10 Algorithm_算法
- B20 DataStructures_数据结构
- B30 Lookup_查表
- B40 Math_数学(4)
- B41 Formula_公式化简
- B42 Func_函数化简
- B43 Int_整数运算
- B44 Bit_位运算(8)
- B50 Architecture_体系结构
- B60 SIMD(6)
- C00 Language_语言(69)
- C10 C系列(66)
- C11 C(46)
- C12 C++(23)
- C13 C#(16)
- C14 Java(3)
- C15 Objective-C(6)
- C20 BASIC系列(4)
- C21 QB
- C22 VB(3)
- C23 VBScript(1)
- C24 VB.Net
- C30 Pascal系列
- C31 Pascal
- C32 Delphi
- C50 Script0_脚本语言0(1)
- C51 ActionScript
- C60 ScriptWeb_Web脚本语言(7)
- C61 JavaScript(10)
- CG0 ShaderLang_着色语言
- CG1 HLSL_Cg
- CG2 GLSL
- CG3 AGAL
- CQ0 SQL_结构化查询语言(1)
- CQ1 SQLServer(1)
- D00 Platform_平台(45)
- D10 裸机
- D20 DOS/BIOS(2)
- D30 Windows(33)
- D32 Win32 API(3)
- D32. kernel32(2)
- D33 COM(1)
- D34 .Net(14)
- D40 Linux(20)
- D43 LinuxSDK(2)
- D50 Mac(22)
- D51 OSX(4)
- D52 iOS(5)
- D60 Web(8)
- D61 HTML(7)
- D62 HTML5
- D63 XML(5)
- D70 Flash(1)
- D71 FlashCS
- D72 Flex(1)
- D7L Lib_库(1)
- D7L. Away3D(1)
- D80 Java(1)
- D8A Android_安卓(5)
- E00 Network(1)
- E10 Socket
- E20 TCP/IP(1)
- E2M SNMP(1)
- F00 File_文件结构(1)
- F10 Text_文本(1)
- F20 Doc_复杂文档
- F40 Image_图像(1)
- G00 Media_多媒体(32)
- G10 Text_文本(5)
- G20 Color_颜色(7)
- G30 Graph_图形
- G40 Image_图像(11)
- G50 Video_视频(18)
- G5E H.264(17)
- G60 Audio_音频
- G70 Game_游戏(2)
- G7E Effect_特效(1)
- G80 Lib_库(2)
- G8D DirectX(2)
- G8D11 DirectX11(2)
- G8G OpenGL
- GS0 ShaderType_着色器类型(2)
- GS1 Vertex_顶点
- GS2 Pixel_像素(1)
- GS3 Geometry_几何
- GS4 Compute_计算(1)
- H00 Hardware_硬件(29)
- H10 Architecture_体系结构(34)
- H11 x86(33)
- H11Q x64(15)
- HB0 Bus_总线
- HB2 PCI
- HC0 CPU_处理器(4)
- HC1 Intel_英特尔(4)
- HC2 AMD(1)
- HG0 GPU_图形处理器
- HG1 nVidia_英伟达
- HG2 ATI_AMD
- HG3 Intel_英特尔
- I00 Interface_界面编程
- J00 Database_数据库(3)
- J10 SQLServer(1)
- J11 Query_查询语句(1)
- K00 HPC_高性能计算(18)
- K20 SIMD_单指令流多数据流(26)
- K21 MMX_多媒体扩展(10)
- K22 3DNow(2)
- K23 SSE_流SIMD扩展(13)
- K24 AVX_高级矢量扩展(11)
- K30 Threads_多线程
- K40 ThreadLib_线程库
- K41 OpenMP
- K42 TBB
- K50 GPGPU(2)
- K52 CUDA
- K53 OpenCL
- K54 DirectCompute(2)
- K55 C++AMP(1)
- K60 Cluster_集群
- M00 Mod_游戏模组(15)
- M10 Blizzard
- M20 Paradox(11)
- M23 EU3_欧陆风云3(4)
- M24 Vic2_维多利亚2(6)
- M2Z Sengoku_戦國(1)
- M30 Civilization_文明(3)
- M35 文明5(3)
- W00 Life_生活(5)
- WD0 Digital_数码(1)
- WS0 软件使用(2)
- WT0 walk_出行(1)
- X00 Note_笔记随想(2)
- Y00 Recycle_回收站(1)
随笔档案(187)
- 2018年3月 (1)
- 2018年2月 (2)
- 2018年1月 (2)
- 2017年12月 (1)
- 2017年11月 (1)
- 2017年10月 (2)
- 2017年9月 (3)
- 2017年7月 (1)
- 2017年3月 (1)
- 2016年10月 (1)
- 2016年2月 (1)
- 2016年1月 (1)
- 2015年8月 (1)
- 2015年7月 (2)
- 2015年5月 (1)
- 2014年2月 (2)
- 2013年12月 (1)
- 2013年8月 (3)
- 2013年7月 (1)
- 2013年6月 (3)
- 2013年4月 (3)
- 2013年3月 (1)
- 2013年1月 (6)
- 2012年11月 (5)
- 2012年10月 (6)
- 2012年9月 (6)
- 2012年8月 (8)
- 2012年7月 (7)
- 2012年6月 (2)
- 2012年5月 (9)
- 2012年4月 (8)
- 2012年3月 (9)
- 2012年2月 (8)
- 2012年1月 (10)
- 2011年12月 (10)
- 2011年11月 (9)
- 2011年10月 (5)
- 2011年9月 (7)
- 2011年8月 (2)
- 2007年7月 (1)
- 2006年12月 (2)
- 2006年11月 (7)
- 2006年10月 (2)
- 2006年7月 (1)
- 2006年6月 (6)
- 2006年5月 (14)
- 2003年8月 (1)
- 2002年12月 (1)
My
- My.Blog.cnblogs
- 我在博客园的Blog
- My.Blog.csdn
- 我在csdn的Blog
- My.ebook.iask
- 我在新浪爱问上传的电子书
- My.ebook.netyi
- 我在netyi上传的电子书
积分与排名
- 积分 - 260688
- 排名 - 770
最新评论
- 1. Re:JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档
- 前端语法,怎么全都偏后端了。
- --回眸不笑
- 2. Re:[C#] TestHttpPost:测试Http的POST方法的小工具
- 调用公司办公内网报503不可用
- --wangdengluan
- 3. Re:SNMP远程监控进程信息的OID
- 学习了~
- --规格严格-功夫到家
- 4. Re:再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
- mark
- --leavind
- 5. Re:Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成
- Xcode 8.2.1的系统自带的注释,好像不能输入那些特定的,不过这是我见过的最详细的注释方法,没有之一
- --songxing10000
- 6. Re:[C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
- 牛!!!
- --yamybl
- 7. Re:GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- 不错,如果能添加上编译动态库,静态库和C/C++混合编程的就更好了
- --专注一点
- 8. Re:[C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
- 感谢分享!
ios平台写c++代码是很不舒服. - --JcJc错别字在线检测
- 9. Re:[C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)
- 简直了
- --xiaoluo91
- 10. Re:[使用心得]利用按键精灵批量删除pdf中的水印
- 可以,成功的解决了问题,还学习了下按键精灵怎么写脚本
- --独家雨天
阅读排行榜
- 1. GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)(56560)
- 2. [歐陸風雲3 MOD] RecoverMing(復明) V3.1.6(2012-1-28更新),改进战争传统系统(30798)
- 3. [C#] TestHttpPost:测试Http的POST方法的小工具(28000)
- 4. Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成(24828)
- 5. 原来Windows SDK与DirectX SDK已经集成到VS2012里了(20565)
- 6. [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试(18575)
- 7. H.264(MPEG-4 AVC)级别(Level)、DPB 与 MaxDpbMbs 详解(18104)
- 8. 神舟K650c i7(W350STQ)上成功装好Mac OS X 10.9,兼谈如何安装WinXP、7、8.1、OSX、Ubuntu五系统(Chameleon、MBR)(16132)
- 9. [C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)(13741)
- 10. [维多利亚2 MOD] RecoverMingV(Vic版复明)发布贴(13678)
评论排行榜
- 1. Intrinsics头文件与SIMD指令集、Visual Studio版本对应表(12)
- 2. [C#] TestHttpPost:测试Http的POST方法的小工具(9)
- 3. 将win8安装在U盘的心得(七步搞定,无需用命令行分区,无需提取镜像)(5)
- 4. [C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)(5)
- 5. [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)(4)
- 6. [C] 让VC支持C99的整数类型V1.01。避免包含目录问题,更名auto_stdint.h、auto_inttypes.h(在VC6至VC2012、GCC、BCB等编译器下测试通过)(4)
- 7. [C/C++] 各种C/C++编译器对UTF-8源码文件的兼容性测试(VC、GCC、BCB)(4)
- 8. GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)(3)
- 9. [C/C++] VC2012编译的程序在WinXP下报告“指定的可执行文件不是有效的 Win32 应用程序”错误(3)
- 10. 原来Windows SDK与DirectX SDK已经集成到VS2012里了(3)
推荐排行榜
- 1. [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)(5)
- 2. [C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)(4)
- 3. [JavaScript] 兼容IE、FireFox、Chrome等浏览器的xml处理函数(xml同步/异步加载、xsl转换、selectSingleNode、selectNodes)(4)
- 4. [iOS] UITextField隐藏软键盘心得(隐藏自身软键盘、点击Return自动转到下个文本框、轻触背景隐藏软键盘)(4)
- 5. [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试(4)
- 6. GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)(4)
- 7. [C] 让VC、BCB支持C99的整数类型(stdint.h、inttypes.h)(兼容GCC)(4)
- 8. 深入探讨用位掩码代替分支(1):利用带符号移位生成掩码(4)
- 9. 用JavaScript生成Android SDK的下载地址(1)——使用xsl转换xml,得到核心SDK的下载地址(3)
- 10. [C#] TestHttpPost:测试Http的POST方法的小工具(3)
对于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 下呢?
(完)
参考文献
~~~~~~~~
H.264/MPEG-4 AVC
作者:zyl910 出处:www.cnblogs.com/zyl910/ 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0. posted on 2011-12-08 00:12 zyl910 阅读(18105) 评论(0) 编辑 收藏 刷新评论刷新页面返回顶部 注册用户登录后才能发表评论,请 登录 或 注册, 访问网站首页。 【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!【推荐】云+校园计划邀请好友拼团有礼,奖励多多
【推荐】5分钟完成网站搭建 多种定制镜像,19.6元/月起
【活动】2050 科技公益大会 - 年青人因科技而团聚
· 最后一博?ZUK、摩托罗拉之后,联想又要造机了
· 你愿意成为“身体黑客”吗?皮下植入芯片其实也痛苦
· 卡巴斯基:恶意软件Slingshot潜伏六年并通过路由器来传播
· HQ Trivia出现首位拿下所有奖金的玩家
· 谷歌上架两款拥有简洁体验的艺术和文化应用
» 更多新闻...
· 写给自学者的入门指南
· 和程序员谈恋爱
· 学会学习
· 优秀技术人的管理陷阱
· 作为一个程序员,数学对你到底有多重要
» 更多知识库文章...