HEVC/H.265编码原理
一、HEVC简介
随着现代通信技术的发展,视频拍摄设备变得便携化、轻量化,各类剪辑软件的开发升级也使得视频的制作变得更加的容易,大量涌现的网络视频平台为视频发布和传播提供了必不可少的渠道,这使得互联网中的视频指数性地逐年增加。而海量视频在网络中的传输给网络带宽和数据存储提出了不小的挑战,如何在保证视频质量的同时有效地进行数据压缩是新一代视频编码需要解决的问题。
2013年,由国际标准组织ITU-TVCEG和ISO/IECMPEG成立的联合视频工作经过多次会议,讨论、研究并指定了高效视频编码标准HEVC(High Efficiency Videocoding),与之前的H.264/AVC相比,HEVC的压缩效率提高了一倍,对于4k(3840×2016)及8k(7680×4320)视频的传输也能保持较高的质量。
HEVC并未在视频编码的框架上做出创新,而是采用了前一代视频编码标准H.264/AVC中的混合编码框架,包括预测、变换、量化、熵编码、环路滤波等,并在各个编码模块中进行改进,使得总体的改进效果达到了预期的要求。下文将对HEVC编码的原理进行具体介绍。
二、HEVC编码原理
1、编码结构与应用设置
HEVC的编码结构如图所示,其核心的编码模块有帧内/帧间预测、变换和量化、熵编码、环内滤波等,与H.264/AVC一致:
针对不同的视频应用,HEVC根据视频帧中的GOP组的不同特性分别设置了帧内编码、低延时编码和随机访问编码三种应用模式。
1、帧内编码结构:每一帧图像都是按帧内预测方式进行空间域或频域上的预测编码。
2、低时延( Low Delay)编码结构:只有第一帧图像按照帧内方式进行编码,并成为 I帧,随后的各帧都作为P帧和B帧利用时域预测进行帧间编码,主要是为交互式实时通信所设计的。
3、随机访问(Random Access) 编码结构:主要由分级B帧构成(Hierarchical B) ,周期性地(大约每隔 1秒) 插入随机访问(Clean Random Access,CRA) 帧。这些CRA 帧成为编码视频流中的随机访问点(Random Access Point,RAP) 。所谓随机访问点是指对这些帧的解码可以独立进行,不需要参考比特流中前面已经解码的图像帧。这种对随机访问方式有力地支持了信道转换、搜索以及动态流媒体服务等应用。
2、四叉树划分
视频帧的不同区域的图像特征不同,为了针对不同的信息进行更高效的压缩,通常会对视频帧进行分块处理。相对于H.264中的固定大小的宏块,HEVC的分块更加灵活,可以选择8×8、16×16,32×32,64×64多种尺寸,这使得HEVC能够根据实际的应用、软硬件设施、码流特点等更高效地做出相关配置。分块被称为编码树单元( Coding Tree Units,CTU),是预测、变换、量化和熵编码等处理的基本单元。一个编码树单元(CTU)是能够进一步划分为编码单元(Coding Units,CU)。
编码单元由四叉树的方式划分得到。同一层次的CU必须是同一尺寸的4个方块,最多可有4层分解,即64×64,32×32,16×16和8×8。如果不分解,则这个CTU仅包含一个 CU。64×64的CU可以进一步分解为32×32的CU,依此类推,下图便展示了四叉树的划分结构,1表示进行分解,0表示不进行分解:
每个CU包含一块亮度编码块( Coding Blocks,CB) 、两个色度CB以及相应的语法元素。HEVC只支持4:2:0的采样格式,即在水平和垂直方向上,色度像素的个数都是亮度像素的一半。
这样的四叉树结构使得HEVC能够根据图像不同区域的特性自适应地进行处理,在图像比较平缓区域,选择尺寸较大的CU,而在图像边缘或纹理复杂的区域,选择比较小的CU,有利于提高编码效率。图中每个叶子节点上的CU是决定进行帧内预测还是帧间预测的单元,因此一个CU还能够分解为更小的预测单元( Prediction Units,PU)和变换单元( TB,Transform Units) 。
3、预测单元和变换单元
预测单元PU是进行预测运算的基本单元,根据不同的模式一个编码单元CU可以包含一个或者多个预测单元,最小可划分为4×4的PU。每个预测单元含有一组预测信息,即预测方向(帧内)或参考帧与运动矢量(帧间)等。
如图所示, 一个2N×2N ( N可以是 4、8、16、32) 的CU可划分为8种包含PU方式,划分可以是对称的,也可以是不对称的,如图3所示。帧间预测时可以在这 8 种方式中任意选择,在帧间预测的跳过(skip) 模式中只允许选择2N×2N这种模式,帧内预测时只允许选择2N×2N或N×N方式。
变换单元TU是进行变换和量化的基本单元,是对PU预测得到的残差信息进一步压缩。TU是在CU的基础上划分的,但受到所在的预测单元PU的限制。如PU是正方形,则TU也必须是正方形,PU为非正方形,则TU也为非正方形。
帧内编码模式中变换单元的尺寸需小于或者等于预测单元,而帧间编码模式中变换单元可以大于预测单元,但是不能超过编码单元 CU。TU也可以通过类似于CU四叉树的方式进行划分,被称为残差四叉树,即每向下一层划分为4个小的正方形。根据实际情况和需要还可以增加TU划分的层级以达到自适应的目的。
4、帧内预测
帧内预测是在同一个视频帧中根据已经编码块的重构图像预测当前块的图像,消除空间相关冗余。HEVC定义了33中方向性预测模式,加上平面预测(Intra_Planar)与直流模式(Intra_DC)共35种预测模式。
HEVC中以逐行扫描的方式访问编码树单元,又在编码树单元内以深度优先的逐行扫描方式访问编码单元,因此,除了当前块的左边列、上边行像素外,左下方和右上方的像素都可作为帧内预测的参考像素。
4.1、方向性预测模式
方向性预测是指由当前像素沿着某个方向进行投影得到预测值,同H.264中的方向性预测类似,但HEVC中的由于图像的分辨率更高,方向划分也更为细致,能够提高预测的准确性。HEVC中33个方向的定义如图所示:
其中H代表水平方向,其后的数值表示方向偏移的刻度,向上偏移时值为正,向下偏移时值为负。V代表竖直方向的刻度,向左偏移时值为负,向右偏移时值为正。用2-34的序号代表33种方向,模式序号为1时为平面预测(Intra_Planar),序号为1时为直流预测(Intra_DC)。
4.2、平面预测模式与DC模式
平面预测(Intra_Planar)方法主要针对图像的平缓变化区域所提出,预测方式简单,压缩效率高,通常对于预测块(以左边列和上边行为参考像素),额外加入右下角的像素编码到比特流中作为参考像素,边缘行和列的像素由四个角落的像素线性插值得到,内部的像素由对应四周边缘行和列的像素双线性插值得到。
HEVC的平面模式改进了这一方法,如下图 所示,最后一行和最右一列像素通过左下角和右上角的参考像素复制得到,中间的像素是由水平方向和垂直方向的线性插值取平均值得到:
HEVC的DC预测模式同H.264类似,由参考像素值累加取平均得到预测值,而对于N小于32的亮度预测块,还需要对第一行和第一列的预测像素进行平滑滤波,降低预测块边沿的不连续性。
5、帧间预测
帧间预测的方法是以预测块为单位,在视频帧与视频帧之间进行运动估计和运动补偿,在码流传输时只对残差信息和运动矢量进行编码,去除视频帧之间的时间冗余,达到压缩的目的。HEVC的帧间预测总体上与H.264相似,并做出了如下的改进:
(1)非对称运动划分( Asymmetric Motion Partitions,AMP)
允许非对称地划分CU为更小的PU,PU可以是正方形的,也可以是矩形的。每个采用帧间预测方式编码的PU都有一套运动参数,包括运动矢量、参考帧索引和参考表标志。因为 AMP 允许 PU在运动估计和运动补偿中更精确地符合图像中运动目标的形状,而不需要如H.264那样进一步的细分来解决,能够提高编码效率。
(2)运动估计精度
HEVC采用同H.264/AVC同样的1/4像素的运动估计精度,为了获得非整数样点的数值,不同的非整数位置亮度的插值滤波器的系数是不同的,分别采用一维 8抽头和 7抽头的内插滤波器产生 1/2和 1/4像素的亮度值,如图所示。色度整数样点的距离比亮度大一倍,要达到和亮度同样的插值密度,其插值精度为 1/8色度像素。色度分量的预测值由一维 4抽头内插滤波器用类似亮度的方法得到。
(3)运动合并(Motion Merge)
HEVC对运动参数的编码有3种模式:Inter模式、Merge模式和skip模式。
Inter模式对运动参数直接编码,传输运动矢量和残差块;
Merge模式不需要传输运动矢量,只传送候选PU块的索引信息,由解码端采用**运动推理(Motion Inference)**方法(如拷贝)来获得运动信息,推理依据来自空域邻近块或时域邻近块的运动矢量(这部分块显然是Inter模式传送的)。
Skip 模式中,运动矢量和残差信息都不用传送,编码器只需要编码运动合并候选者的索引信息,以保证解码时Skip PU可以拷贝中选者的运动参数作为自己的运动参数。Skip模式适合与一帧中运动较少或者静止像素块的预测,进一步地减少了传输的数据量。通过三种模式的结合使用使得HEVC的编码效率大幅度提升。
6、变换、量化与熵编码
HEVC中进行变换与量化的基本单位是变换单元(TU),即将预测的残差块经过四叉树分解后得到的变换块。HEVC主要采用DCT进行变换,目的是能量集中、去除相关性;除此之外,HEVC还为4×4的亮度块(最小的PU规定为4×4,故最小的色度块也为4×4)定义了一种基于DST的整数变换;HEVC额外定义了一种Transform skip模式,对残差块不变换直接编码,对于某些计算机合成的图像能够提高效率。
量化过程中,HEVC同H.264类似,采用均匀量化,共52级量化步长,每6级量化步长增加一倍。
HEVC只采用了基于上下文的二进制编码(CABAC)进行熵编码,而没有使用CAVLC。考虑到高清、超高清视频的超高码率,HEVC提供了并行编解码的机制,为了避免并行编码导致的预测相关性被破坏,HEVC提出了波前并行处理( Wavefront Parallel Processing,WPP)的熵编码技术,在熵编码时不需要打破预测的连贯性,可尽可能多地利用上下文信息。
7、环路滤波
在经过预测、量化、编码等后,也引入了一定的失真,为了解决这一问题,便添加了环路滤波的模块,环路滤波被放置在反量化、反变换模块之后,重建运动补偿参考帧之前。HEVC的环路滤波包括同H.264相同的去块效应滤波和减少失真和振铃效应的样本自适应补偿(Sampled adaptive offset,SAO),处理的基本单元是CTU。SAO又可分为边缘像素补偿(EO)和条带补偿(BO)两种方式。
边缘像素补偿(EO)对某个处于边缘的像素根据其与相邻像素的差异进行分类,对于不同类型的像素加上不同的偏移值。EO的结构有四种:水平、垂直、45°和135°,如图8所示,b为当前像素,处于中心,a、c为相邻像素,按照3像素值的不同特点,该像素可被分为峰值像素(其值大于相邻的2个像素) 、谷值像素(其值小于相邻的 2 个像素),边缘像素(其值等于任何一个相邻像素)和其它像素(如果不符合前 3 种) 共4类,分别加上4种不同的偏移值,以达到平滑、锐化等目的,减少失真。
条带补偿(BO)将CTU亮度块按照灰度峰值分为32个等间隔的条带,如8bit峰值为255的块,则分为256/32=8个条带,对与某个条带内的像素,其偏移补偿为重构像素和原图像像素的差异的平均值。在传输过程中,条带补偿的量也需要传输到解码端。
参考文献
[1]朱秀昌,李欣,陈杰.新一代视频编码标准——HEVC[J].南京邮电大学学报(自然科学版), 2013,33(03):1-11.
[2]赵耀,黄晗,林春雨,等.新一代视频编码标准HEVC的关键技术[J].数据采集与处理,2014,29(01):1-10.
HEVC/H.265编码原理相关推荐
- HEVC/H.265编码HM码率控制
HEVC/H.265编码标准HM平台码率控制流程 研究生期间了解过HM平台的码率控制过程,现在时隔2年多又回顾了一下HM平台的码控流程,发现相较之前多了CpbSaturationEnabled这么个机 ...
- 建议收藏 | H.265编码原理入门
视频编码的目的是为了压缩原始视频,压缩的主要思路是从空间.时间.编码.视觉等几个主要角度去除冗余信息.由于 H.264 出色的数据压缩比率和视频质量,成为当前市场上最为流行的编解码标准.而 H.265 ...
- 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试
转载自:http://bbs.zol.com.cn/diybbs/d34441_76103.html 4K这个概念也在最近几年开始流行了起来,无论是4K显示器.4K电视盒子,还是4K游戏对硬件的要求也 ...
- SONY索尼A7S3相机HEVC|H.265视频RSV损坏修复MP4
继佳能和松下相机HEVC|H.265断电视频文件成功修复后,终于迎来索尼HEVC|H.265编码损坏视频修复.回想以往索尼微单的MP4视频文件,使用的都是H.264视频编码技术,从A7S3微单开始支持 ...
- HEVC/H.265硬件编码器实现杂谈
国际视频编码标准HEVC已经发布两年有余,市场上关于支持HEVC的硬件也日益涌现,本文借鉴了各方面资源做了综合与概述,给出了HEVC硬件编码器实现的基本方法等重要网络资源. 一.系统设计要点 对于HE ...
- 高效视频编码 (HEVC) -H.265(结构解析)
版本 HEVC (H.265) 规范的第一个版本于 2013 年 4 月发布.该标准的版本如下: ITU-T H.265 (V1) (04/2013) http://handle.itu.int/11 ...
- 利用FFmpeg编码器将JPG图片进行H.264编码原理
利用FFmpeg编码器将JPG图片进行H.264编码原理 文章目录 利用FFmpeg编码器将JPG图片进行H.264编码原理 整体的编码流程 将JPG或BMP编码为YUV 利用FFmpeg将YUV格式 ...
- HEVC/H.265(1)——入门初步了解
一.引子 说到H.265,个人的初始印象就是比H.264高端了那么一些的编码标准,再就是在学校的BT上下的那个好多播放器都播放不了,只有potplayer等一小部分未来播放器能播放的权利的游戏HEVC ...
- 【显示技术 - 视频编码】硬件加速 - 对接FFMPEG框架的H.265编码
最近在搞的一个项目,使用硬件加速,代替软件x265库进行H.265编码,好听点的叫法就是异构. 作为软件工程师,硬件算法的实现基本就和本人无关了,不过好在这块本身也不是兴趣所在~~ 为了更好地讲硬 ...
最新文章
- 编辑数学公式_LaTeXiT for mac(数学公式编辑器)
- 第八届全球游戏大会(GMGC北京2019)
- 离开宁静的农村,走进喧嚣的城市:搬家!
- [ActionScript 3.0] AS3.0 简单封装Socket的通信
- a href=javascritp:void(0)的用法
- rails采用MongoDB感觉相当不错!
- 为什么说ip协议是无连接协议
- 【转贴】学习Linux的几点忠告
- [Python] pip 清除缓存
- Linux下设置和修改IP
- 北理乐学c语言基础答案晕,北理乐学C语言答案.doc
- qpsk的映射过程_FPGA数字信号处理(28)QPSK星座映射与解映射
- 虚拟局域网(VLAN)中端口tagged和untagged在多种情况下的作用
- h3 经典地图 第3辑(混战+RPG)
- 那些年我们在Python掉进的坑——清除不想要的字符
- 关于 NM_CONTROLLED和Network Manager
- Magento二次开发哪家好呢?
- undolog实现事务原子性,redolog实现事务的持久性
- mysql定时任务,把7天的数据存到历史表,再删除7天前的数据
- 怎么学python入门?python新手学习路线