zoukankan      html  css  js  c++  java
  • H.264简介

      H.264/MPEG-4 AVC (H.264) 是1995年自MPEG-2视频压缩标准发布以后最新的, 最有前途的视频压缩标准. H.264是由ITU-U和ISO/IEC联合开发组共同开发的最新国际视频编码标准. 通过该标准, 在同等图像质量下的压缩效率比以前的标准提高了二倍以上, 因此 , H.264被普遍认为是最有影响力的行业标准.

    一 :  发展历史

      H.264在1997年的ITU视频编码专家组(Video Coding Experts Group)提出时被称为H.26L,在ITU与ISO合作研究后被称为MPEG4 Part10 (MPEG$ AVC)或H.264

    H.264的技术背景

      H.264标准的主要目标是: 和其他现有的视频编码标准相比, 在相同的带宽下提供更加优秀的图像质量. 而, H.264和以前的国际标准如H.263和MPEG-4相比,最大的有事体现在以下四个方面: 

      1:  每个视频帧分离成由像素组成的块, 因此视频帧的编码处理的过程可以达到块的级别(不同于像素级别).

      2:  采用空间冗余的方法, 对视频帧里面的一些原始快进行空间预测, 转换, 优化和熵编码(可变长编码) .

      3:  对连续帧的不同块采用临时存放的方法, 这样, 秩序对连续帧中有改变的部分进行编码 . 该算法采用运动预测, 运动补偿来完成 .对于某些特定的块, 在一个或多个已经进行编码的帧执行搜索来决定块的运行向量, 并由此在后面的编码和解码中预测主块.

      4:  采用空间冗余技术, 对视频帧里的残留块进行编码. 例如: 对源块和相对应预测快的不同, 再次采用转换, 优化和熵编码.

    H.264的特征和高级优势

      1:底码流(Low Bit Rate):和MPEG2和MPEG4 ASP等压缩技术相比,在同等图像质量下H.264技术压缩后的数据量只有MPEG2的1/8,MPEG4的1/3。显然H.264压缩技术的采用将大大减少用户的下载时间和数据流量收费。

      2:高质量的图像:H.264能提供连续,流畅的高质量图像。

      3:容错性强:H.264解决了在不稳定网络情况下容易发生的丢包等错误的必要工具。

      4:网络适应性强:H.264提供了网络适应层使得H.264的文件能过容易的在不同的网络上面传输。

    二:标准概述

      H.264和以前的标准一样,也是DPCM加变换编码的混合编码模式。但是它采用“回归基本”的简洁设计,不用众多的选项,获得比H.263好得多的压缩性能;加强了对各中心到的适应能力,采用“网络友好” 的结构和语法,有利于对误码和丢包的处理;应用目标范围广,以满足不同速率不同解析度以及不同传输场合的需求。

      技术上,他集中了以往标准的特定,并吸收了标准制定中积累的经验。H.263 v2或MPEG-4简单类相比,H.264在使用与上述编码方式类似的最佳编码器时,在大多数码率下最多可以节省50%的码率。H.264在所有码率下都能持续提供较高的视频质量。H.264能工作在低延时模式以适应实时通信的应用(如视频会议),同时又能很好地工作在没有延时限制的应用,如视频存储和以服务器为基础的视频流式应用。H.264提供包传输网中处理包丢失所需的工具,以及在易误码的无线网中处理比特误码的工具。

      在系统层面上,H.264提出了一个新的概念,在视频编码层(Video Coding Layer, VCL)和网络提取层(Network Abstraction Layer, NAL)之间进行概念性分割,前者是视频内容的核心压缩内容之表述,后者是通过特定类型网络进行递送的表述,这样的结构便于信息的封装和对信息进行更好的优先级控制。H.264的系统编码框图如图1所示。

     

    三:H.264标准的关键技术

      1.帧内预测编码

      帧内编码用来缩减图像的空间冗余。为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性。因此,在对一给定宏块编码时,首先可以根据周围的宏块预测(典型的是根据左上角的宏块,因为此宏块已经被编码处理),然后对预测值与实际值的差值进行编码,这样,相对于直接对该帧编码而言,可以大大减小码率。

      H.264提供6种模式进行4×4像素宏块预测,包括1种直流预测和5种方向预测,如图2所示。在图中,相邻块的A到I共9个像素均已经被编码,可以被用以预测,如果我们选择模式4,那么,a、b、c、d4个像素被预测为与E相等的值,e、f、g、h4个像素被预测为与F相等的值,对于图像中含有很少空间信息的平坦区,H.264也支持16×16的帧内编码。 

    图2 帧内编码模式

      2.帧间预测编码

      帧间预测编码利用连续帧中的时间冗余来进行运动估计和补偿。H.264的运动补偿支持以往的视频编码标准中的大部分关键特性,而且灵活地添加了更多的功能,除了支持P帧、B帧外,H.264还支持一种新的流间传送帧——SP帧。码流中包含SP帧后,能在有类似内容但有不同码率的码流之间快速切换,同时支持随机接入和快速回放模式。

      H.264的运动估计有以下4个特性。

      (1) 不同大小和形状的宏块分割

      对每一个16×16像素宏块的运动补偿可以采用不同的大小和形状,H.264支持7种模式,如图4所示。小块模式的运动补偿为运动详细信息的处理提高了性能,减少了方块效应,提高了图像的质量。

      (2) 高精度的亚像素运动补偿

      在H.263中采用的是半像素精度的运动估计,而在H.264中可以采用1/4或者1/8像素精度的运动估值。在要求相同精度的情况下,H.264使用1/4或者1/8像素精度的运动估计后的残差要比H.263采用半像素精度运动估计后的残差来得小。这样在相同精度下,H.264在帧间编码中所需的码率更小。

      (3) 多帧预测

      H.264提供可选的多帧预测功能,在帧间编码时,可选5个不同的参考帧,提供了更好的纠错性能,这样更可以改善视频图像质量。这一特性主要应用于以下场合:周期性的运动、平移运动、在两个不同的场景之间来回变换摄像机的镜头。

      (4) 去块滤波器

      H.264定义了自适应去除块效应的滤波器,这可以处理预测环路中的水平和垂直块边缘,大大减少了方块效应。

      3.整数变换

      在变换方面,H.264使用了基于4×4像素块的类似于DCT的变换,但使用的是以整数为基础的空间变换,不存在反变换,因为取舍而存在误差的问题,变换矩阵如图5所示。与浮点运算相比,整数DCT变换会引起一些额外的误差,但因为DCT变换后的量化也存在量化误差,与之相比,整数DCT变换引起的量化误差影响并不大。此外,整数DCT变换还具有减少运算量和复杂度,有利于向定点DSP移植的优点。

      4.量化

      H.264中可选32种不同的量化步长,这与H.263中有31个量化步长很相似,但是在H.264中,步长是以12.5%的复合率递进的,而不是一个固定常数。
    在H.264中,变换系数的读出方式也有两种:之字形(Zigzag)扫描和双扫描。大多数情况下使用简单的之字形扫描;双扫描仅用于使用较小量化级的块内,有助于提高编码效率。

      5.熵编码

      视频编码处理的最后一步就是熵编码,在H.264中采用了两种不同的熵编码方法:通用可变长编码(UVLC)和基于文本的自适应二进制算术编码(CABAC)。
    在H.263等标准中,根据要编码的数据类型如变换系数、运动矢量等,采用不同的VLC码表。H.264中的UVLC码表提供了一个简单的方法,不管符号表述什么类型的数据,都使用统一变字长编码表。其优点是简单;缺点是单一的码表是从概率统计分布模型得出的,没有考虑编码符号间的相关性,在中高码率时效果不是很好。
    因此,H.264中还提供了可选的CABAC方法。算术编码使编码和解码两边都能使用所有句法元素(变换系数、运动矢量)的概率模型。为了提高算术编码的效率,通过内容建模的过程,使基本概率模型能适应随视频帧而改变的统计特性。内容建模提供了编码符号的条件概率估计,利用合适的内容模型,存在于符号间的相关性可以通过选择目前要编码符号邻近的已编码符号的相应概率模型来去除,不同的句法元素通常保持不同的模型。

      四、H.264在视频会议中的应用

      目前,大多数的视频会议系统均采用H.261或H.263视频编码标准,而H.264的出现,使得在同等速率下,H.264能够比H.263减小50%的码率。也就是说,用户即使是只利用 384kbit/s的带宽,就可以享受H.263下高达 768kbit/s的高质量视频服务。H.264 不但有助于节省庞大开支,还可以提高资源的使用效率,同时令达到商业质量的视频会议服务拥有更多的潜在客户。

  • 相关阅读:
    N皇后
    逆波兰中缀转后缀代码
    ImportError: No module named Image
    稳定排序 和 不稳定排序 ::::::::::: 内排序和外排序
    逆波兰中 中缀表达式转后缀表达式的方法
    第一章:Unix基础知识
    软件设计流程
    linux 下 tar.xz 文件的解压方法
    fedora 解决 Python.h:没有那个文件或目录 错误的方法
    Shell排序
  • 原文地址:https://www.cnblogs.com/A-FM/p/6043725.html
Copyright © 2011-2022 走看看