MPEG-4 AVC/H.264 信息

作者:haibara    来源:pcicp.com

本FAQ由(haibara)翻译,期间受到kaito_mkid(pcicp)帮助,在此感谢,由于Newbie的关系,如有翻译错误,还请各位指出,由Doom9的bond编撰的原文

译者注:基本专业名称我都以小括号形式加以解释,详细信息请自行查阅资料。

什么是MPEG-4?

MPEG-4(ISO 14496)是由制定了我们熟知的MPEG-1(MP3, VCD)和MPEG-2(DVD, SVCD)标准,并力于使各种音频/视频压缩格式和更多内容标准化的国际标准化组织(International Organization for Standardization/ISO)的工作组,即运动图像专家组(Moving Picture Experts Group/MPEG)发展的广泛的开放标准。
本质上MPEG-4标准不仅把目标定为标准化某些有发展前途的产品(例如达到DVD性能),而且含盖了一个能让产品供应商根据需要选择适当标准去执行的广泛的次级标准。

MPEG-4标准,如上所说,被分成许多不同的次级标准,在Doom9里我们使用者可能最感兴趣的部分如下:
- ISO 14496-1(Systems/系统),动画/交互性(类DVD菜单)
- ISO 14496-2(Video/视频),如Advanced Simple Profile(ASP/高级简单类),由XviD, DivX5, 3ivx...执行
- ISO 14496-3(Audio/音频),Advanced Audio Coding(AAC/先进音频编码)
- ISO 14496-10(Video/视频),Advanced Video Coding(AVC/进阶视频编码),著名有H.264
- ISO 14496-14(Container/容器),MP4容器格式(使用.mp4作扩展名)
- ISO 14496-17(Subtitles/字幕),MPEG-4时标文本字幕格式

这些信息页面正力于提供这些标准的大部分有用的信息,尤其是作为焦点的MPEG-4 ASP和AVC/H.264。


与封闭格式如Micro$oft的Windows Media相比,象MPEG-4一样的开放标准有什么可能的优势?

开放标准的一个好处是当创建产品时允许向所有人开放并遵循它。因此我们已经有许多不同的符合MPEG-4标准并可互相兼容的产品。
其次是互通性大范围的产品选择性,一个开放标准导致竞争,对顾客而言这意味着产品在竞争市场中能更好地提高品质,更少的价格和更关注顾客需求

但不要忘记这也许对我们来说最重要的一点:
一个开放标准允许开源发展,例如我们熟知的XviD。

ISO 14496-10 (Video) - 进阶视频编码(Advanced Video Coding/AVC)

有着AVC/H.264的MPEG-4标准定义了一个拥有最新,最高技术的实用的,充满尖端科技的视频编码格式。

2003年,ISO的MPEG(Moving Pictures Experts Group/运动图像专家组)与联合国(United Nations/UNO)下设的ITU(International Telecommunication Union/国际电信联盟)的VCEG(Video Coding Experts Group/视频编码专家组)这2大组织最终完成并共同规定了AVC/H.264视频编码标准,其中后者曾标准化H.263格式(现主用于视频会议)。
AVC/H.264标准它自身是由MPEG和VCEG的专家构成的Joint Video Team(JVT/联合视频组)发展的。

由MPEG来看,该标准被叫做MPEG-4 Part 10(ISO 14496-10);由ITU来看,它叫做H.264(ITU的公文号) 其中作为后者已广泛流传开来。
新标准选择Advanced Video Coding(AVC/进阶视频编码)作为“官方”名 - 因为对应视频的音频格式是Advanced Audio Coding(AAC/先进音频编码)。


AVC/H.264 Profile

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帧,支持progressive(逐行扫描)和interlaced(隔行扫描),提供CAVLC或CABAC
- High Profile (也就是FRExt)在Main Profile基础上新增:8x8 intra prediction(8x8 帧内预测), custom quant(自定义量化), lossless video coding(无损视频编码), 更多的yuv格式(4:4:4...)

只有未来会告诉我们哪一种框架和工具最可能被用于DVD备份,但是我猜想会是有着以下的工具大力帮助的Main和/或High Profile(同样请核实MPEG-4 ASP的工具描述,除了GMC,所有的工具在AVC下都是可用的):

CAVLC/CABAC:
AVC/H.264定义了2种先进的重构数据流(包括macroblock-type(宏块), motionvectors(运动矢量) + reference-index(参考索引)...)的熵编码工具,一举超越MPEG-4 ASP:
Context-Adaptive Variable Length Coding(CAVLC/上下文自适应变长编码)和 Context-Adaptive Binary Arithmetic Coding(CABAC/上下文自适应二进制算术编码)
CABAC,与AVC/H.264中只是默认算法的CAVLC(也叫UVLC)相比,是个压缩率更强大的算法,据说能额外降低10-15%的比特率(特别在高码率)。CABAC(同CAVLC一样)是一种无损算法,因此不会降低质量,但会减缓编码和解码速度。

Loop/Deblocking Filter(循环/去块滤波器):
与预处理滤波器(例如通过avisynth作用于输入端),或后处理滤波器(通过解码器作用于最终输出端)相反,循环滤波器在编码过程中对每桢进行滤波,编码完成后被用于下一桢的参考。它能消除块效应,尤其在低码率时,但同样会减缓编码和解码速度。

Variable Block Sizes/Macroblock Partitions(块大小可变/宏块划分):
与MPEG-4 ASP(仅Inter4V/4MV能作16x16和8x8块变换)相比,AVC/H.264把动态搜寻精度(Motion Search Precision)提高到4x4(包含的步骤有8x4...)。子块大小是自适应/可变的,一个优秀的编码器应能对每个宏块明智地作出最恰当的划分大小 决定。

Multiple Reference Frames(多重参考桢):
与MPEG-4 ASP(仅允许当前桢的前一桢作为参考桢)相比,AVC/H.264使用帧间搜索方式并提供成倍的参考桢选择,它意味着AVC/H.264编码能决定是否 只是简单地参考前一桢或甚至参考比前桢更过去的桢。因此(例如某个P桢能参考最近I桢前的某桢)不得不提出一种新型桢型:IDR桢,是种其后的桢不允许参 考其前的桢的I桢。使用多重参考桢会减慢编码和解码速度并且可能导致只能在IDR桢剪切。

Weighted Prediction(加权预测):
有了加权预测就能对参考桢进行加权(例如你能测量前一幅图象的亮度程度)。它特别有助于在那些随时可能淡入或淡出的场景中前后图象极为相似,只是画面变暗 的图象的处理。WP对于同时出现淡入及淡出的图象没有效果(例如当图象从一个场景转到另一个场景就会同时出现淡入及淡出)。

Rate Distortion Optimisation(RDO/码率-失真/损耗最佳化):
只要编码器不得不在众多选择中作出绝择时,RDO允许选择最有效的编码方式(例如面临采用桢间/桢内的动态搜寻的决定...)
RDO不是AVC/H.264本身定义的工具,它是第一个由H.264参考软件引入的工具,可谓一种新的途径。其他的编码也能利用RDO,如XviD'的VHQ模式能使用RDO


AVC/H.264与其他流行的视频编码格式的比较测评:
 

现有的AVC/H.264编码

可用于终端用户的AVC/H.264执行者有x264, Nero, Apple, Sorenson, Elecard, Moonlight, VSS, mpegable, Envivio, Hdot264 (binary), DSPR, JM (参考软件) (binary), ffmpeg, Philips, FastVDO, Skal, Sony和更多

编码器

- x264:第一个公开的可使用High Profile的编码器,开源(GPL)(源码),使用VFW的有:x264vfw, ffdshow(输出.avi),命令行的:x264cli(输出raw的.mp4), mencoder(输出raw的.avi)(Doom9的MeGUI)或ffmpeg
x264支持2pass, CABAC, 循环滤波, 多重B帧, 双向参考(B-Reference), 多重参考桢, 4x4 P帧块变换, 8x8 B帧块划分, 失真信号化(anamorphic signalling)和High Profile:8x8 dtc(离散余弦变换)与帧内预测, 无损视频编码和自定义无损量化矩阵(custom quant matrix)
- NeroDigital AVC:Nero Recode2内含,输出为.mp4
ND AVC支持2pass, CABAC, 自适应循环滤波, 多重B帧, 多重参考桢, 加权预测, 8x8 B帧块划分, 16x16 B帧块划分, 自适应量化(高度Psy)
- Sorenson:Sorenson Squeeze 4内含,输出.mp4,
Sorenson支持2pass, 最大2连续B帧, 双向参考, 循环滤波和多重Slice
- Apple:Quicktime 7内含,输出.mp4, .3gp和.mov,编码速度很慢
支持2pass, 最大1连续B帧, 循环滤波(0,0), 8x8 P帧块变换, 8x8 B帧块变换, 4x4 I帧块变换, 自适应量化, 5级Slice, 没有CABAC, 没有加权预测, 没有多重参考桢
- JM: 此AVC参考软件v9.3版提供Main和High Profile:B/SP帧, CABAC, 循环滤波器, 4x4 块划分, 多重参考桢, 自适应量化, 差错修复(Error Resilience), RDO, 无损视频编码, 自定义量化), 比率控制(Rate Control)等...
- Hdot264:由doom9会员charact3r发展的开源(GPL)的VFW版参考软件,仍然以很老的参考软件(JM 4.0c)为基础
- VSS:免费的VFW编码器(可预览5天),以参考编码器为基础
- Elecard: Elecard Mobile Converter内含,输出.mp4, MainConcept's v2 encoder也内含,输出.264和.mpg PS/TS
不再公开的:
- Moonlight:Moonlight的OneClick Compressor v1.1和CyberLink的PowerEncoder内含,输出.mpg
Moonlight支持1pass(VBR/CBR/预设 量化), CABAC, 循环滤波, 最大2连续B帧, 8x8 B帧块划分, 自适应量化, 自动调整PAR(Pixel Aspect Ratio/象素纵横比), 隔行扫描
- MainConcept:免费的编码器(有水印),输出.264和.mpg PS/TS
1pass(CBR/VBR/预设 量化), P帧重排(P-Frame Reorder), CABAC, 循环滤波, 多重B-Vops(Bidirectional Video Object Planes/双向视频对象平面), 多重参考桢, 4x4 P帧块划分), PAR, RDO
- mpegable:提供试用有限的免费VFW编码器(不以参考软件为基础),不支持YV12
mpegable支持仅限P帧的1pass(预设量化), 8x8 P帧块划分, 只支持CAVLC, 循环滤波
- Envivio:4Coder内含,输出.mp4

解码器 (比较测评)

- ffmpeg:开源(LGPL),包含在ffdshow(VFW和DShow编码器), mplayer和VideoLAN等
支持B帧, 双向参考, CABAC, 循环滤波, 加权预测和High Profile (8x8 dct与帧内预测, 无损视频编码)
- Apple:Quicktime 7支持AVC解码,支持.mp4/.mov,解码速度很慢
仅支持最大1连续B帧, CABAC, 不作后帧参考的循环滤波, 多重B帧和隔行扫描
- NeroDigital AVC:Recode2附带DShow解码器和.mp4 Parser
支持Main和High Profile
- VSS:VFW解码器 (预览5天) 和DShow解码器 (限制30天)
VSS DShow支持.avi (支持VSSH和H264 fourcc), CABAC, 循环滤波, B帧
- Elecard:Elecard's MPEG Player v4.0和MainConcept's v2 encoder内含
- Envivio:有个名叫EnvivioTV的非免费AVC DShow解码器,(从2.0版开始,当前版本为2-1-181)支持混合AVC的.mp4
- Philips:AVC Alliance播放器内含免费的DShow AVC解码器(只支持raw AVC)
- FastVDO:有时间限制(每个视频文件5分钟)的High Profile DShow解码器
- Pegasus:这里有发展不成熟的DShow AVC解码器
- Basic AVC Decoder用C编写,是一所大学的工程,见这里
不再公开的:
- Moonlight:DShow解码器/Parser支持混合AVC的.mpg, .mp4和.264 Moonlight's MPEG Player v3.0内含
支持Main和High Profile
- MainConcept:v1预览版提供免费DShow AVC解码器(有水印) 并且Parser支持AVC和.mpg PS/TS
- mpegable:提供试用有限的VFW解码器 (可用于DShow),支持.avi (支持 DAVC fourcc)


预览样本

NeroDigital:mp4, mp4
Sorenson:mp4
AVC Alliance:raw
Moonlight:raw/中码率, raw/低码率, raw, mpg
FastVDO:raw/high profile
Apple:mov
Videosoft: avi, avi/新, avi/老
Lead:ogm


当前AVC/H.264的争论

- 互通性:大多数执行者支持多种容器格式:
.mp4:由MPEG-4标准(ISO 14496-15)定义的AVC容器,Apple, Nero, Sorenson, Envivio, Elecard/Moonlight和x264都支持
.mpg PS/TS:由MPEG-2标准(ISO 13818-1, AMD3)定义的AVC容器,Mainconcept和Elecard/Moonlight支持
.avi:采取AVC-in-AVI的方式非标准,因此会造成不兼容问题。AVI和VFW的局限(如关于B帧或任意帧的编码顺序),混合这两种格式混合会完全阻碍AVC提供的所有可能特性的执行,因此可能降低质量,或至少降低处理速度和互通性,其竞争性也因此下降。当前VSS和x264(mencoder 和vfw)支持使用AVI
.264/.h264:未混合入容器的原始数据流。JM参考软件, x264cli, mencoder和mainconcept都可输出

- 速度:当前一些执行者编码器速度不敢恭维,依然只有x264和NeroDigital's AVC的编码器看上去能提供不俗的速度与品质。但这不会改变AVC是种先进的视频编码方式的事实。所以老的CPU编解码AVC会非常耗时


MPEG-4 AVC/H.264的硬件应用化 - HD-DVD/蓝光(Blu-ray)

DVD论坛(DVD Forum)和蓝光光盘协会(Blu-ray Disc Association)正在讨论能支持高清晰(High Definition)内容(存储容量完全超过当前的DVD)下一代DVD格式的继承人选:HD-DVD和BD-ROM

据这里报道HD-DVD会强制采用MPEG-4 AVC/H.264,而蓝光支持老早被MPEG-4 AVC/H.264 High Profile纳入-这里

因此AVC/H.264极有可能成为下一代视频格式,会被广泛地使用和支持,就象今天MPEG-2(用于DVD)的情形一样


更多的文档

关于MPEG-4 AVC/H.264的文档:详细说明-这里,摘要信息-这里或这里,
执行者清单
AVC的测试结论参看这里
下载完整的AVC/H.264标准详述这里(Draft from the 7-14 March 2003)
蓝光的技术信息参看这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fb 4.7英文版 显示行数

窗口(window)首选项(Preference)—>常规(General)—>编辑器(Editors)—>文本编辑器(Text Editors)—>“显示行号”(Show line number…

集市中迷失的一代:FreeBSD核心开发者反思开源软件质量

摘要:本文作者Poul-Henning Kamp (phkFreeBSD.org) ,26年的计算机程序员,他编写的软件以底层构建块的形式广泛被开源和商业产品采用。讲述作者在看完《设计原本》这本书后所引发的共鸣! 13年前,新兴的草根开源软件运动…

点击表格弹窗获取另外一套数据之后,原表格相关数据的调用

用H5新属性,data-*, $获取方式: 待续。。。。。。。 转载于:https://www.cnblogs.com/He-tao-yuan/p/9888316.html

面试经历(二)

前面说到用数据库中的锁机制对并发事务进行控制,这节来说说事务方法和事务方法发生嵌套调用时事务如何进行传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。例如:方法可能继续在…

最有价值的编程忠告

摘要:本文是来自贝尔实验室Plan 9操作系统的创始人Rob Pike给大家分享的编程忠告!Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,缔造Go语言和Limbo语言的核心人物。 Rob Pike&#xf…

Kinect2.0-空间长度测量

1. 鼠标左键按下选择起点,拖动鼠标,左键放开,确定终点。 实现效果1实现效果22. 在linux下使用libfreenect2开源多平台驱动来获取kinect2.0的传感器信息,得到深度信息,并通过libfreenect2提供的getPointXYZ函数&#xf…

没有完美的软件:编程永远不容易

摘要:很多人想用十全十美来修饰一样东西,比如软件,对于客户来说,当然希望他们的软件能做到完美。虽然很多专家说利用一些规范可以让软件达到更好!但是在现实开发中,真的会有那么完美的软件吗? 最…

代码审查“思维导图”

摘要:随着人们对软件质量要求的不断提高,软件开发的每一个环节都应该得到十足的重视,俗话说:“细节决定成败”,就此,本文提供了一个代码审查“思维导图”,希望对所有码农们有所帮助。 代码审查&…

The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 tomcat启动报务后访问页面报错: org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/co…

优秀程序员和一般程序员差别在哪?

摘要:在这个世界上有两种程序员:Day Programmers(白班程序员)和Night Programmers(夜猫子程序员),你知道优秀程序员和一般程序员有哪些差别吗?你又是哪一类型的呢?俗话说…

Navicat工具导出mySQL数据库某个视图结构的.sql脚本

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 用Navicat工具怎么都导不出来mySQL数据库的某个视图.sql脚本,即使导出来也只是包含视图记录,不包含视图结构。经…

瞧瞧苹果OS X如何干掉Linux

摘要:如果你去过Facebook或者其它一些创业类科技公司,你会发现随处可见的Mac,无论是CEO还是开发者,都可能在使用Mac。而以往很受IT人士青睐的Linux好像在消失,这是真的吗?苹果OS X是如何干掉Linux的&#x…

超全十大经典排序算法及其分析

文章目录0.算法概述0.1 算法分类0.2 算法复杂度0.3 相关概念1. 冒泡排序(Bubble Sort)1.1 算法描述:1.2 图解演示1.3 代码实现1.4 优化过程1.5 性能分析2. 选择排序(Selection Sort)2.1 算法描述:2.2 图解演…

eclipse安装JAVA反编译插件

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心&a…

noip2014生活大爆炸版石头剪刀布

题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一 样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。 升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势: 斯波克:《星际迷航》主角之…

聊聊毕业设计系列 --- 系统实现

效果展示 github moment-server github地址 moment github地址 moment-manage github地址 articles 聊聊毕业设计系列 --- 项目介绍 聊聊毕业设计系列 --- 系统实现 前言 在上一篇文章中,主要是对项目做了介绍,并且对系统分析和系统设计做了大概的介绍。…

js 实现用window.print()打印页面中的部分内容,局部打印

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 如下方法: function printProof(){var printData document.getElementById("forPrint").innerHTML; // 只打印 f…

Spring 之注解事务 @Transactional

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 先让我们看代码吧! 以下代码为在“Spring3事务管理——基于tx/aop命名空间的配置”基础上修改。首先修改applicationContext…

超级程序员神话

摘要:大部分的程序员在思想里都会某种程度的承认,承认自己只是一个普通的程序员,但这世界上确实有一些超级程序员,在一个为企业开发应用的程序员和一个为谷歌写搜索算法的程序员之间,或和一个开发用来控制读写头从磁盘…

HashMap30连问,彻底搞懂HashMap

文章目录一、背景知识1、什么是Map?2、什么是Hash?3、什么是哈希表?4、什么是HashMap?5、如何使用HashMap?6、HashMap有哪些核心参数?7、HashMap与HashTable的对比?8、HashMap和HashSet的区别?…