H.264/AVC作为新一代视频编解码标准,提供了以往视频算法没有的新特性。比如多帧参考,以更灵活的方式使用更多的重建帧作为参考帧。在某些情况下,可以使用最多32个参考帧(在以往标准中,P帧的参考帧数目为1,B帧的参考帧数目为2)。该特性对大多数场景序列都可以带来一定的码率降低,或者质量提高。对某些类型的场景序列,例如快速重复的闪光,反复的剪切或者背景遮挡的情况,它能很显著的降低编码的码率。

H.264/AVC视频编码标准的数据处理流程仍然是混合编码框架,即基于像素块的运动补偿、变换、量化和熵编码的处理模块。H.264/AVC算法的这些处理模块都做了技术改进,以提高编码效率。典型的视频编码框架如图6-2所示。

处理的图像帧分割成多个16×16的宏块,根据图像编码类型I帧、P帧或B帧等,决定是对图像数据本身处理还是对残差编码处理。图像数据本身即帧内编码I帧,利用图像的空间相关性,去除空间冗余。残差编码,首先利用运动估计技术,在一定范围的窗口内搜索相对最佳宏块,然后相减形成残差,同时记录当前宏块的运行向量MV。对图像数据或残差做DCT变换、量化。为了解码器解码时图像不产生偏移,还要做IDCT变换、反量化,重建形成参考帧。由于块处理造成“块效应”,为了提高参考图像的准确度、清晰度,可采用环路滤波提高图像清晰度。最后对量化后的系数、运动向量及其他信息做熵编码,形成最后的码流。
H.264/AVC将视频压缩系统分成了视频编码层VCL(Video Coding Layer)和网络提取层NAL(Network Abstract Layer)两层,其结构如图6-3所示。视频编码层VCL通过时域、空域预测和变换编码来完成对视频信息的压缩。而网络提取层NAL则将与网络相关的信息从视频压缩系统中抽象出来,使网络对于视频编码层是透明的,它主要负责对编码后的数据进行封装,以提高其鲁棒性、降低误码率。采用分层结构有利于压缩编码与网络传输之间的分离,使视频编码层可以移植到不异构的网络中,适应不同的网络传输。

视频编码层VCL是H.264/AVC的核心技术,视频算法是混合编码技术框架,包括变换、量化、编码三步骤。不过每个过程有了新的技术,码流更小、图像效果更好。通过每个模块的小的技术改进,而带来了系统整体性能的提升。变换的数据根据I帧编码、P/B帧编码,采用帧内预测和帧间预测(运动估计ME)。宏块的类型除了传统的16×16方式外,还增加了多种类型,如16×8、8×16、8×8等,更贴近物体运动模型。变换采用可逆的整数变换,使解码过程无误差积累。熵编码采用上下文自适应的可变字长编码CAVLC、二进制算术编码CABAC,码流更低。另外由于DCT块处理的原因,图像有块效应,编码器采用了内部环路滤波去除块效应。这些技术都是以前视频编码标准所没有的,但是工作原理相同。H.264/AVC编码器的工作框图如图6-4所示。

1.帧内预测
对I帧的编码是通过利用空间相关性实现的。以前的视频标准只利用了一个宏块MB内部的相关性,而忽视了宏块之间的相关性,所以编码后的数据量较大。为了能进一步利用图像空间相关性,H.264/AVC引入了帧内预测以提高压缩效率。总体来说,帧内预测编码就是用周围邻近的像素值来预测当前的像素值,然后对预测误差进行编码。帧内预测是基于图像块,对于亮度分量(Luma),块的大小,可以在16×16和4×4之间选择,16×16块有4种预测模式(垂直Vertical,水平Horizontal,直流分量DC,平面Plane),4×4块有9种预测模式(直流分量DC,8个方向)。对于色度分量(Chroma),预测是对整个8×8块进行的,有4种预测模式(垂直Vertical,水平Horizontal,直流分量DC,平面Plane)。除了DC预测外,其他每种预测模式对应不同方向上的预测。
(1)16×16亮度预测模式
16×16亮度预测信号根据预测的方向不同有4种预测模式,其预测模式如图6-5所示。分别是垂直方向、水平方向、DC、平面模式。

2)4×4亮度预测模式

在4×4亮度预测模式中,H.264/AVC把16×16的宏块划分成16个4×4的子块,每个子块用与其相邻的上面和左面已经编码并重建后的像素点进行预测,如图6-6所示。

4×4亮度信号根据预测方向的不同共有9种不同的预测模式。其预测模式如图6-6所示。其中,垂直预测(模式0)、水平预测(模式1)、DC预测(模式2)总是被认为是有效的,即使在上边或左边像素值不存在的情况下,也可认为不存在的像素值为128填充,来进行预测。而其它模式则只有在其需要使用的像素值存在的情况下,才能进行预测。
(3)8×8色度预测模式
色度分量以8×8块为单位进行预测,它与16×16亮度预测模式类似。其中相同位置的两个色度块U/Cb和V/Cr具有相同的最佳预测模式。
2.帧间预测
帧间预测是利用先前编码帧的重建图像作为参考,对当前图像进行预测编码的一种方式。它把参考图像的抽样点通过运动矢量的补偿,作为当前图像抽样值的参考值。和以往标准相比,H.264/AVC帧间预测的区别在于块尺寸更丰富,采用了1/4精度运动矢量、多参考帧等方法。
(1)树状结构的运动补偿
帧间预测用于降低图像的时域相关性,通过采用多帧参考和更小运动预测区域等方法,对下一帧进行精确预测,从而减少传输的数据量。每个亮度宏块可以被划分为形状不等的区域。宏块及子宏块分割如图6-7所示。图中一个16×16的亮度宏块有4种:1个16×16或2个16×8或8个8×16或4个8×8。而8×8模式的每个子宏块可以进一步进行分割,也有4种:1个8×8,2个4×8,2个8×4,或4个4×4。

每个分割或子宏块都有一个独立的运动补偿。每个运动矢量都须被编码、传输,分割的选择也要将编码压缩到比特流中。对于较大的分割尺寸,运动矢量的选择和分割的选择只需少量的比特,但运动补偿残差较多。小尺寸的分割可以减少运动补偿后的残差,但是需要传输较多的运动矢量和分割的选择。因而,大尺寸分割适合于较平坦的区域,小尺寸分割适合较多细节区域。宏块的色度成分(Cr, Cb)为相应亮度的一半,采用和亮度相同的分割模式,只是尺寸减半。
(2)1/4精度运动矢量
H.264/AVC中的运动矢量对亮度信号采用1/4精度。当运动矢量指向整数抽样点位置时,预测值将直接从相应的参考图像中抽样获取。当运动矢量指向分数抽样点时,其分数位置的像素并不存在于参考图像中,需利用邻近的已编码点进行内插得到。内插像素的生成方法如上面的图6-8所示。

3.整数变换DCT及量化
H.264/AVC中的宏块大小为16×16,对其中每个4×4大小的块进行4×4的整数DCT变换后,得到16个4×4的变换矩阵。为了进一步提高压缩效率,该协议还允许把每个4×4的变换矩阵中的直流分量DC,单独取出组成一个新的4×4矩阵,对此矩阵进行Hadamard变换。整数DCT避免了以往标准中的编解码不匹配问题,使得反变换不会出现失衡的问题。并且其运算只包含加减和移位,且将量化融合在其中,有效的降低了运算量。H.264/AVC编码中整数变换及量化过程如图6-9所示。宏块的数据传送顺序如图6-10所示,图中上方的-1、16、17为直流分量形成的4×4、2×2块。

4.熵编码
H.264/AVC协议对于图像数据或残差提供了两种熵编码的方式,分别为基于上下文自适应变长码CAVLC(Context-based Adaptive Variable Length Coding)和基于上下文自适应二进制算术编码CABAC(Context-based Adaptive Binary Arithmetic Coding);如果不是预测残差,而是运动向量等其他数据,H.264/AVC则采用Exp-Golomb码或CABAC编码,视编码器的设置而定。
(1)CAVLC
变长编码VLC的基本思想就是对出现频率大的符号使用较短的码字,而出现频率小的符号采用较长的码字,这样可以使得平均码长最小。CAVLC中,H.264/AVC采用若干VLC码表,不同的码表对应不同的概率模型。编码器能够根据上下文,在这些码表中自动地选择如周围块的非零系数或系数的绝对值大小。最大可能地与当前数据的概率模型匹配,从而实现了上下文自适应的功能。
(2)CABAC
算术编码是一种高效的熵编码方案,其每个符号所对应的码长被认为是分数。由于对每一个符号的编码都与以前编码的结果有关,所以它考虑的是信源符号序列整体的概率特性,而不是单个符号的概率特性,因而它能够更大程度地逼近信源的极限香浓熵,降低码率。为了绕开算术编码中无限精度小数的表示问题,对信源符号概率进行估计,现代的算术编码多以有限状态机的方式实现,H.264/AVC的CABAC便是一个例子,其他的例子还有JPEG2000。在CABAC中,每编码一个二进制符号,编码器就会自动调整对信源概率模型(用一个“状态”来表示)的估计,随后的二进制符号就在这个更新了的概率模型基础上进行编码。这样的编码器不需要信源统计特性的先验知识,而是在编码过程中自适应地进行估计。显然,与CAVLC编码中预先设定好若干概率模型的方法比较起来,CABAC有更大的灵活性,可以获得更好的编码性能——大约降低10%的码率。
5.去块效应环路滤波器
去除块效应滤波器(Deblocking Filter或Loop Filter),它的作用是,消除经反量化和反变换后,重建图像中由于预测误差产生的块效应,即块边缘处的像素值跳变,从而一来改善图像的主观质量,二来减少预测误差。H.264/AVC中的Deblocking Filter还能够根据图像内容做出判断,只对由于块效应产生的像素值跳变进行平滑,而对图像中物体边缘处的像素值不连续给予保留,以免造成边缘模糊。与以往的Deblocking Filter不同的是,经过滤波后的图像将根据需要放在缓存中用于帧间预测,而不是仅仅在输出重建图像时用来改善主观质量,也就是说该滤波器位于解码环中,而非解码环的输出外,因而它又称作环路滤波Loop Filter。需要注意的是,对于帧内预测,使用的是未经过滤波的重建图像。

6.多参考帧的帧间预测
以往的P帧编码是以前面重建的帧作
为参考,进行运动估计预测得到最佳匹配块。B帧编码同样是以前后重建帧为参考预测得到残差。H.264/AVC提供了多个参考帧的帧间预测模式,使估计到的宏块更贴近实际运动物体模型,运动向量表示更精确。但在选用多帧参考的同时,计算量巨增,在使用DSP硬件实现H.264/AVC时,多帧参考的帧间预测并不启用。
7.提供SP/SI帧支持
H.264/AVC在支持I/P/B帧编码方式的同时,增加支持SP/SI帧编码方式。以上三种与以前的标准相似,主要是参考图像不同,其余两种像条类型是SP(切换P)、SI(切换I),是新的类型,用于在不同位率编码码流之间进行有效切换。与SP帧:称作切换P帧,能在不同编码图像之间有效地切换。SI帧:称作切换I帧,允许SP帧的宏块完全匹配,达到随机读取数据进行解码和恢复错误的目的。
8.其他新特性
(1)编码器控制
视频编码的控制是编码器实现的核心问题。由于视频序列中的图像内容随着空间与时间的不同而变化很大,因此,需要为图像的不同部分选择不同的编码参数进行压缩编码,而编码控制的目的就是确定一组编码参数。H.264编码器采用基于Lagrangian优化算法的率失真优化模型实现视频编码的控制,其实现方法简单而且效率高。
(2)参数集
H.264引入了参数集的概念,每个参数集包含了相应的编码图像的信息。序列参数集SPS包含的是针对一连续编码视频序列的参数选择标识,如帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式等。图像参数集PPS对应的是一个序列中某一幅图像或者某几幅图像,其参数如熵编码模式选择标识、片组数目、初始量化参数和去除块滤波系数调整标识等。
以上是H.264/AVC相对以往视频编码标准的技术的主要改进之处,效果也最明显。H.264/AVC相对MPEG-2/4、H.263在相同码率下,图像质量PSNR提高3dB多。图6-11是标准视频测试序列Foreman.qcif的不同编码器的码率对PSRN的比较图。通过比较可以看出, H.264/AVC的码率Bit-rate在相同质量Quality(亮度Y的PSNR)下,可节省非常可观的码流。

表6-1列出了无B帧时,相同图像质量PSNR条件下,平均节省码流百分比。分析可以看出H.264/AVC比MPEG-4 SP节省34%的码流,这极大的鼓舞了人们的大力研发投入。但是同时也应该看到,H.264/AVC获得优越性能的代价是计算复杂度增加。据估计,编码的计算复杂度大约相当于H.263的3倍,解码复杂度大约相当于H.263的2倍。

不过让研发工程师欣慰的是,芯片ASIC、可编程DSP、FPGA、CPU等实现平台的性能在日益提升,多核处理器也已出现,可编程的数字媒体处理器也已经出现,如TI的DM64x系列、ADI的BlackFin系列、Philips的PNX系列等,Intel的双核CPU并支持SSE4媒体处理指令。硬件性能的逐步提升,实时实现复杂的视频算法已成为可能。

h264编码流程分析相关推荐

  1. H264编码介绍和参数设置

    视频h264编码流程 宏块划分 Macro Block 帧内预测 I帧 帧间预测和GOP P帧和B帧 DCT离散余弦变换 量化 熵编码 preset 预设编码器 预设编码器 比特率控制 恒定比特率(C ...

  2. H264编码原理(无损压缩)

    无损压缩 DCT变换 经过有损压缩后的数据是分散在二维图标中的各个节点上,数据比较分散时不利于压缩,通过DCT变换,所有的分散数据都被集中在一块,左上角右下角等等. DCT可以将数据由分散变为集中,利 ...

  3. H264编码器5( x264源代码简单分析:x264_slice_write() 与H264 编码简介)

    x264源代码简单分析:x264_slice_write() 来自:https://blog.csdn.net/leixiaohua1020/article/details/45536607 H264 ...

  4. 【Codecs系列】HEVC-SCC(五):HM+SCM中IBC编码流程和实现分析

    Date:2022.3.31 文章目录 1.参考 2.函数调用流程 3.关键函数分析 4.SCC编码流程 4.1.PU模式选取过程 4.2.基于hash搜索的IBC模式选取 HEVC-SCC扩展系列文 ...

  5. X264编码流程详解(转)

    http://blog.csdn.net/xingyu19871124/article/details/7671634 对H.264编码标准一直停留在理解原理的基础上,对于一个实际投入使用的编码器是如 ...

  6. 音视频开发系列-H264编码原理

    H264简介 来自百度百科的介绍: H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式. H.264是ITU-T以H.26x系列为名称命名的 ...

  7. H264编码基本原理(一)

    H264编码基本原理(一) 一.前言 二.H264相关概念 2.1 序列 2.2 帧类型 2.3 GOP(画面组) 2.4 IDR帧(关键帧) 三.H264压缩方式 3.1 压缩方式说明 四.H264 ...

  8. 1.1 海思3518 H264编码

    海思的SDK里其实有H264编码的sample,但因为要匹配很多东西,代码有点复杂,让初学都感到有点混乱.我根据sample自己修改了一下代码,从最简单的情况(确定摄像头类型,只选一种尺寸的图片,只用 ...

  9. 入门理解H264编码

     最近入门音视频技术,一直在学习H264编解码标准,了解了不少关于H264的相关知识,对于网上各种类型的资料,始终没有找到一篇适合的知识梳理资料.可能是查找方式不对,所以花费了比较多的时间.经过一段时 ...

最新文章

  1. 树莓派第三代跨越发展,采用64位处理器内建WiFi及蓝牙
  2. laravel auth login 重定向自定义_Laravel学习之路(一):最简单的API 认证(Passport)实践...
  3. 模型和控制器-起步阶段
  4. postgresql存图片字段类型_PostgreSQL 入门
  5. docker国内镜像链接
  6. linux go vendor目录,Go 包依赖管理工具 —— govendor
  7. android每日定时推送通知,Android使用JobScheduler定期推送本地通知实例代码
  8. GIMP教程 4 图层
  9. java制作游戏开始界面,太香了
  10. 整理的敏感词解决思路
  11. js 导出Excel
  12. .Net平台下安装DotNetBar
  13. PetaLinux学习笔记 1
  14. 新能源汽车车载智能终端t-box
  15. 12 项目收尾管理:项目验收、项目总结、系统维护、项目后评价
  16. 【广告算法工程师入门 32】从直播答题,跳一跳,抢红包等产品策略扯到用户受益商业变现
  17. php程序员的出路,php程序员有前途吗
  18. 用于图像语义分割的GAU与PPM
  19. 《天穗之咲稻姬》游玩感想
  20. asm实现注解打印log

热门文章

  1. LaTeX不显示页码_老板让我给PPT加页码,我哭了!
  2. 计算机启动灯1212,惠普笔记本电脑型号F6C27PA#AB2wifi开关一直亮红灯开不起怎么办?...
  3. LPC1768之中断
  4. 怎么开启linux的dhcp,怎么开启DHCP服务器啊
  5. 通过 I2C 驱动 LCD1602 液晶屏(51单片机)
  6. 大熊猫源致病大肠杆菌CCHTP全基因组测序及耐药和毒力基因分析
  7. 加载天地图服务出现空吧图片类似404图片加载失败的效果
  8. 首发 华为Mate7青春版拆机换电池
  9. uiautomator2+ tesseract 智能识别文字实现手游辅助外挂,打怪刷装备快人一步
  10. 适用于 GNU/Linux 的字型