作者:bond 译者:dgwxx(译) 来源:Dreamland
译者序
一 直以来都没有找到一个较全面的AVC 介绍。于是,译者就将DOOM9 论坛上的bond大人发表的《MPEG-4 Information》中的AVC 介绍的部分翻译出来,提供给和我一样想了解这方面知识的朋友。《MPEG-4 Information》中关于AVC 的介绍包含6 个部分,分别是AVC/H.264 Profiles、编/解码器简介、SAMPLE 简介、AVC 当前的问题、AVC 相关硬件设备、更多文档链接。其中编/解码器部分、SAMPLE 简介和硬件介绍译者没有翻译。因为编/解码器在nemolus 大大写的《AVC/H.264/AAC 专题 - 软件篇》中有更详细的介绍,SAMPLE 简介都是图片,字不多,而且译者看内容也不是很重要,于是就偷懒没有翻~呵呵~想看这三部分的朋友直接阅读原文即可。
由于译者也是刚刚接触AVC,再加上英语水平有限,所以翻译出来的东西可能不能准确表达作者的原意,甚至会误解作者的意思,在这里先惭愧一下。
如果有问题,欢迎通过下面方法与译者取得联系:
网站:http://nmm.dns0755.net
Email:dgwxx@vip.sina.com
MSN:zjworks@163.com(请不要向这个邮箱里面发送邮件,因为这个邮箱已经报废了)
因为这篇文章的结构比较复杂,考虑到WEB 页发布的多种不便,因此决定不发布WEB版,只发布PDF 版。
最后,感谢原作者bond 的辛勤工作,是他们让我们能够看到这个优秀的技术文章。当然,还要感谢您的支持!
原文: http://forum.doom9.org/showthread.php?threadid=73022
ISO 14496-10 (Video) - Advanced Video Coding (AVC)
简介
AVC/H.264 是MPEG-4 标准所定义的最新,同时也是技术含量最高、代表最新技术水平的视频编码格式之一。
AVC/H.264 视频编码由ISO 的MPEG 和ITU 的VCEG 两个组织于2003 年最终定稿。
而AVC/H.264 标准本身则是由包括来自MPEG 和VCEG 专家的Joint Video Team(JVT)开发。
译注:
ISO(International Organization for Standardization) 国际标准组织, 发展国际生产和质量标准的组织;
MPEG (Moving Pictures Experts Group) 运动图象专家组;
ITU(International Telecommunication Union) 国际电传视讯联盟;
VCEG(Video Coding Experts Group) 视频编码专家组,联合国的子机构之一,制定了现在广泛应用于视频会议软件中的H.263 格式。
从MPEG 的角度来说,这个标准叫做MPEG-4 Part10(ISO 14496-10),从ITU 的角度来说,这个标准叫做H.264(ITU 文档编号)。作为这个标准的“官方名称”,Advanced Video Coding(AVC)是MPEG 由Advanced Audio Coding(AAC)这个音频格式的视频副本确定的。
AVC/H.264 Profiles
AVC/H.264 规定了多种不同的Profile:最低Profile、主要Profile、扩展Profile、高端Profile(这些Profile 本身还要划分数个等级)。
-最低Profile,也叫做底线Profile(Baseline Profile)支持I/P 帧,只支持无交错(Progressive)和CAVLC;
-扩展Profile(Extended Profile)支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;
-主要Profile(Main Profile)提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC 和CABAC 的支持;
-高端Profile(High Profile,也叫FRExt)在主要Profile 的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式(如4:4:4)。
或许只有在将来才能知道哪些Profile 或哪些功能会成为DVDRIP 的主流,但是我猜想会是Main 或是High Profile,包含下面的一些功能:
CAVLC/CABAC
AVC/H.264 为熵编码(entropy coding)规定了两个比MPEG-4 ASP 更加进步的功能,Context-Adaptive Variable Length Coding(CAVLC, 前后自适应可变长度编码) 和Context-Adaptive Binary Arithmetic Coding (CABAC,前后自适应二进制算术编码)。CABAC 是AVC/H.264 的默认模式,与CAVLC(也叫UVLC)相比,CABAC 是一个更加强有力的压缩方式,可以将码率在降低10-15%(特别是在高码率情况下)。CABAC (CAVLC 也同样)是一个不会损伤画面的无损编码,但是会降低编码和解码的速度。
Loop/Deblocking Filter
与 预处理(比如通过avisynth,作用于输入端)和后处理(通过解码器,作用于最终输出)不同,LoopFiltering 在编码处理过程中起作用。它作用于每个帧编码之后,但是在这之前,它会被用作后面帧的参考。这样处理可以尽量避免色块的出现,特别是低码率状况下。 但是这样会降低编码和解码的速度。
Variable Block Sizes/Macroblock Partitions (可变区块尺寸/ 微块分割)
与MPEG-4 ASP(只使用Inter4V/4MV,区块大小可以在16x16 和8x8 之间变化)不同,AVC/H.264 将动态搜寻的精度增加到了4x4(中间包括类似8x4 等的的步长)。而且区块大小是自适应且可变的,一个优秀的编码器会聪明地为每个微块选择最有效的区块大小。
Multiple Reference Frames (多重参照帧)
与MPEG-4 ASP(只能选择前一帧进行参照)不同,AVC/H.264 可以选择不止一个帧进行内部动作搜寻,也就是说,编码器可以自行选择前一帧(像MPEG-4 ASP 那样),或是加上更前面的帧进行参照。正是由于这样(比如P 帧可能会参照最后一个I 帧之前的帧),一
种新类型的帧随之产生——IDR 帧,我们可以将其理解为不允许后面的帧向前面进行参照的I 帧。如果使用多重参照帧的话,编码和解码的速度都会减慢,而且编码、解码、剪切只能从IDR 帧开始。
译注:
按照原文恐怕不太容易理解,这里译者以自己的理解来讲解一下IDR 帧。举个例子,在一段视频中, 存在以下帧:I P B P B P B B P I P B…
如果这段视频应用了多重参照帧,那么蓝色的P 帧在参照他前面的I 帧(红色)的同时,还可能会参照I 帧之前的P 帧(绿色),由于I帧前后的场景可能会有很大的反差甚至根本不同,所以此时P 帧参考I 帧之前的帧不但会没有意义,反而会造成很多问题。
所 以一种新型的帧被引入,那就是IDR 帧。如果这段视频应用了多重参考帧的同时采用了IDR 帧,那么帧的顺序就会变成这样:I P B P B P B B P IDR P B… 由于IDR 帧禁止后面的帧向自己前面的帧参照,所以这回那个蓝色的P 帧就不会参照绿色的P 帧了。
Weighted Prediction (权重预测)
使 用权重预测,就是在参考帧上施加权重。这么说恐怕不太明白,但是向下看就会明白多了。在渐变场景(比如画面逐渐变黑),后面的帧除了比前面的帧要暗一些, 其他地方都很相似,那么权重预测就在这些地方发挥作用了。需要注意的是,权重预测对于交叉渐变(比如从一个场景渐变到另一个场景)不会有作用。
Rate Distortion Optimisation (RDO ,评价变化优化)
RDO 使编码器遇到多种不同的选择的时候,选择最有效的编码方式。RDO 并不是由AVC/H.264 专家制定的功能,但它是最先由H.264 参考软件所用到的一种决定方法。其他的编码器也可以采用RDO,比如XviD 的VHQ 模式已经运用了RDO。
当前AVC/H.264 的问题
如果你对现有的AVC 工具嗤之以鼻,你肯定发现了AVC 的一些问题:
-兼容性:目前不同的AVC 工具支持不同的容器(Container):
.mp4:mp4 是MPGE-4 标准(ISO 14496-15)指定的AVC 容器。目前支持它的编码器有Nero、Sorenson、Envivio 和Moonlight。
.mpg:mpg 是MPEG-2 标准(ISO 13818-1,AMD3)指定的AVC 容器。目前支持它的编码器有:Mainconcept 和Moonlight。(蓝光BD-ROM 也会使用这种容器,具体请参见 http://www.blu-ray.com)
.avi: 使用AVI 作为容器是不标准的,并且会造成不兼容的问题。使用AVI 可能妨碍AVC 的一些功能的发挥,也可能会损伤回放的质量,或者降低解码速度。目前支持avi 的编码器有VSS、x264(mencoder 和x264 的vfw 都支持)、mpegable。
.264/.h264:通常是参考编码器输出的作为例子的源图像。(mencoder 中的x264 也可以输出.264,mp4creator 可以从.mp4 种Demux 出来)
-速度:当前一些编码器的速度很慢(大多是商业预览版)。尽管x264 和NeroDigital’s AVC看起来提供了不错的速度和后质量,但是它们仍然改变不了AVC 在一些较老的CPU 上极为耗时的事实。
更多文档
如果你想了解更多关于AVC 的信息,就看看: http://www.vcodex.com/h264.html。这里不但有更详细的介绍,更包含了一些技术层面的东西。
一些总结性的信息可以在 http://www.moonlight.co.il/tech_h264.php 和 http://www.dspr.com/www/technology/technology.htm 找到。
AVC 测试结果可以在 http://www.chiariglione.org/mpeg/working_documents/mpeg-04/avc/avc_vt.zip 和 http://82.2.167.24/Uploaded_Files/Doom9_Forum_files/AVC_Verification_Test_Results(mht).zip 找到(HTML 版本)
全部AVC 工程设计书可以在这里下载到:
http://www.dspr.com/www/technology/JVT-G050.pdf
蓝光光盘的技术信息可以在这里找到:
http://www.blu-raydisc.com/Section-13628/Index.html
译者序
一 直以来都没有找到一个较全面的AVC 介绍。于是,译者就将DOOM9 论坛上的bond大人发表的《MPEG-4 Information》中的AVC 介绍的部分翻译出来,提供给和我一样想了解这方面知识的朋友。《MPEG-4 Information》中关于AVC 的介绍包含6 个部分,分别是AVC/H.264 Profiles、编/解码器简介、SAMPLE 简介、AVC 当前的问题、AVC 相关硬件设备、更多文档链接。其中编/解码器部分、SAMPLE 简介和硬件介绍译者没有翻译。因为编/解码器在nemolus 大大写的《AVC/H.264/AAC 专题 - 软件篇》中有更详细的介绍,SAMPLE 简介都是图片,字不多,而且译者看内容也不是很重要,于是就偷懒没有翻~呵呵~想看这三部分的朋友直接阅读原文即可。
由于译者也是刚刚接触AVC,再加上英语水平有限,所以翻译出来的东西可能不能准确表达作者的原意,甚至会误解作者的意思,在这里先惭愧一下。
如果有问题,欢迎通过下面方法与译者取得联系:
网站:http://nmm.dns0755.net
Email:dgwxx@vip.sina.com
MSN:zjworks@163.com(请不要向这个邮箱里面发送邮件,因为这个邮箱已经报废了)
因为这篇文章的结构比较复杂,考虑到WEB 页发布的多种不便,因此决定不发布WEB版,只发布PDF 版。
最后,感谢原作者bond 的辛勤工作,是他们让我们能够看到这个优秀的技术文章。当然,还要感谢您的支持!
原文: http://forum.doom9.org/showthread.php?threadid=73022
ISO 14496-10 (Video) - Advanced Video Coding (AVC)
简介
AVC/H.264 是MPEG-4 标准所定义的最新,同时也是技术含量最高、代表最新技术水平的视频编码格式之一。
AVC/H.264 视频编码由ISO 的MPEG 和ITU 的VCEG 两个组织于2003 年最终定稿。
而AVC/H.264 标准本身则是由包括来自MPEG 和VCEG 专家的Joint Video Team(JVT)开发。
译注:
ISO(International Organization for Standardization) 国际标准组织, 发展国际生产和质量标准的组织;
MPEG (Moving Pictures Experts Group) 运动图象专家组;
ITU(International Telecommunication Union) 国际电传视讯联盟;
VCEG(Video Coding Experts Group) 视频编码专家组,联合国的子机构之一,制定了现在广泛应用于视频会议软件中的H.263 格式。
从MPEG 的角度来说,这个标准叫做MPEG-4 Part10(ISO 14496-10),从ITU 的角度来说,这个标准叫做H.264(ITU 文档编号)。作为这个标准的“官方名称”,Advanced Video Coding(AVC)是MPEG 由Advanced Audio Coding(AAC)这个音频格式的视频副本确定的。
AVC/H.264 Profiles
AVC/H.264 规定了多种不同的Profile:最低Profile、主要Profile、扩展Profile、高端Profile(这些Profile 本身还要划分数个等级)。
-最低Profile,也叫做底线Profile(Baseline Profile)支持I/P 帧,只支持无交错(Progressive)和CAVLC;
-扩展Profile(Extended Profile)支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;
-主要Profile(Main Profile)提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC 和CABAC 的支持;
-高端Profile(High Profile,也叫FRExt)在主要Profile 的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式(如4:4:4)。
或许只有在将来才能知道哪些Profile 或哪些功能会成为DVDRIP 的主流,但是我猜想会是Main 或是High Profile,包含下面的一些功能:
CAVLC/CABAC
AVC/H.264 为熵编码(entropy coding)规定了两个比MPEG-4 ASP 更加进步的功能,Context-Adaptive Variable Length Coding(CAVLC, 前后自适应可变长度编码) 和Context-Adaptive Binary Arithmetic Coding (CABAC,前后自适应二进制算术编码)。CABAC 是AVC/H.264 的默认模式,与CAVLC(也叫UVLC)相比,CABAC 是一个更加强有力的压缩方式,可以将码率在降低10-15%(特别是在高码率情况下)。CABAC (CAVLC 也同样)是一个不会损伤画面的无损编码,但是会降低编码和解码的速度。
Loop/Deblocking Filter
与 预处理(比如通过avisynth,作用于输入端)和后处理(通过解码器,作用于最终输出)不同,LoopFiltering 在编码处理过程中起作用。它作用于每个帧编码之后,但是在这之前,它会被用作后面帧的参考。这样处理可以尽量避免色块的出现,特别是低码率状况下。 但是这样会降低编码和解码的速度。
Variable Block Sizes/Macroblock Partitions (可变区块尺寸/ 微块分割)
与MPEG-4 ASP(只使用Inter4V/4MV,区块大小可以在16x16 和8x8 之间变化)不同,AVC/H.264 将动态搜寻的精度增加到了4x4(中间包括类似8x4 等的的步长)。而且区块大小是自适应且可变的,一个优秀的编码器会聪明地为每个微块选择最有效的区块大小。
Multiple Reference Frames (多重参照帧)
与MPEG-4 ASP(只能选择前一帧进行参照)不同,AVC/H.264 可以选择不止一个帧进行内部动作搜寻,也就是说,编码器可以自行选择前一帧(像MPEG-4 ASP 那样),或是加上更前面的帧进行参照。正是由于这样(比如P 帧可能会参照最后一个I 帧之前的帧),一
种新类型的帧随之产生——IDR 帧,我们可以将其理解为不允许后面的帧向前面进行参照的I 帧。如果使用多重参照帧的话,编码和解码的速度都会减慢,而且编码、解码、剪切只能从IDR 帧开始。
译注:
按照原文恐怕不太容易理解,这里译者以自己的理解来讲解一下IDR 帧。举个例子,在一段视频中, 存在以下帧:I P B P B P B B P I P B…
如果这段视频应用了多重参照帧,那么蓝色的P 帧在参照他前面的I 帧(红色)的同时,还可能会参照I 帧之前的P 帧(绿色),由于I帧前后的场景可能会有很大的反差甚至根本不同,所以此时P 帧参考I 帧之前的帧不但会没有意义,反而会造成很多问题。
所 以一种新型的帧被引入,那就是IDR 帧。如果这段视频应用了多重参考帧的同时采用了IDR 帧,那么帧的顺序就会变成这样:I P B P B P B B P IDR P B… 由于IDR 帧禁止后面的帧向自己前面的帧参照,所以这回那个蓝色的P 帧就不会参照绿色的P 帧了。
Weighted Prediction (权重预测)
使 用权重预测,就是在参考帧上施加权重。这么说恐怕不太明白,但是向下看就会明白多了。在渐变场景(比如画面逐渐变黑),后面的帧除了比前面的帧要暗一些, 其他地方都很相似,那么权重预测就在这些地方发挥作用了。需要注意的是,权重预测对于交叉渐变(比如从一个场景渐变到另一个场景)不会有作用。
Rate Distortion Optimisation (RDO ,评价变化优化)
RDO 使编码器遇到多种不同的选择的时候,选择最有效的编码方式。RDO 并不是由AVC/H.264 专家制定的功能,但它是最先由H.264 参考软件所用到的一种决定方法。其他的编码器也可以采用RDO,比如XviD 的VHQ 模式已经运用了RDO。
当前AVC/H.264 的问题
如果你对现有的AVC 工具嗤之以鼻,你肯定发现了AVC 的一些问题:
-兼容性:目前不同的AVC 工具支持不同的容器(Container):
.mp4:mp4 是MPGE-4 标准(ISO 14496-15)指定的AVC 容器。目前支持它的编码器有Nero、Sorenson、Envivio 和Moonlight。
.mpg:mpg 是MPEG-2 标准(ISO 13818-1,AMD3)指定的AVC 容器。目前支持它的编码器有:Mainconcept 和Moonlight。(蓝光BD-ROM 也会使用这种容器,具体请参见 http://www.blu-ray.com)
.avi: 使用AVI 作为容器是不标准的,并且会造成不兼容的问题。使用AVI 可能妨碍AVC 的一些功能的发挥,也可能会损伤回放的质量,或者降低解码速度。目前支持avi 的编码器有VSS、x264(mencoder 和x264 的vfw 都支持)、mpegable。
.264/.h264:通常是参考编码器输出的作为例子的源图像。(mencoder 中的x264 也可以输出.264,mp4creator 可以从.mp4 种Demux 出来)
-速度:当前一些编码器的速度很慢(大多是商业预览版)。尽管x264 和NeroDigital’s AVC看起来提供了不错的速度和后质量,但是它们仍然改变不了AVC 在一些较老的CPU 上极为耗时的事实。
更多文档
如果你想了解更多关于AVC 的信息,就看看: http://www.vcodex.com/h264.html。这里不但有更详细的介绍,更包含了一些技术层面的东西。
一些总结性的信息可以在 http://www.moonlight.co.il/tech_h264.php 和 http://www.dspr.com/www/technology/technology.htm 找到。
AVC 测试结果可以在 http://www.chiariglione.org/mpeg/working_documents/mpeg-04/avc/avc_vt.zip 和 http://82.2.167.24/Uploaded_Files/Doom9_Forum_files/AVC_Verification_Test_Results(mht).zip 找到(HTML 版本)
全部AVC 工程设计书可以在这里下载到:
http://www.dspr.com/www/technology/JVT-G050.pdf
蓝光光盘的技术信息可以在这里找到:
http://www.blu-raydisc.com/Section-13628/Index.html