理论概述
-
为什么要研究视频编码?
现在随着图像获取设备越来越先进,人们对于视频清晰度要求越高,视频类数据占据网络数据的80%以上
未压缩的视频数据量巨大,从而造成视频的存储困难、传输成本高 -
视频编码的目的?
去除视频中的空间、时间、编码、视觉、知识等方面的冗余
理想中的视频编码是无损压缩,但压缩率只能做到2:1、3:1的程度,远远达不到要求
大多数的视频编码都是有损压缩,压缩率在10:1、20:1以上,随着技术进步,压缩率还在不断上升 -
视频编码工具
编码器:Encoder
解码器:Decoder
编解码:CODEC -
视频编解码的技术流程
输入视频 → 预测 → 变换 → 量化 → 熵编码 → (信道传输码流) → 熵解码 → 反量化 → 反变换 → 预测 → 输出视频 -
实现平台
编解码器的实现平台:超大规模集成电路VLSI、ASIC、FPGA、数字信号处理器DSP、软件
编解码器产品:机顶盒、数字电视、摄像机、监控器 -
通用视频编码标准组织:
ISO/IEC JTC1 SC29 WG11(MPEG): 倾向于消费电子
ITU SG16 Q6 (VCEG): 倾向于通讯
MPEG与VCEG合作形成国际标准:H.264/AVC, H.265/HEVC, H.266/VVC
国内AVS:AVS1, AVS2, AVS3 (IEEE 1857) → 东南亚、南美洲
AOM: 谷歌主导 -
视频编码标准的作用
使得不同厂家生产的编码器产生的码流能够兼容不同厂家生产的解码器,解码产生一致的视频信息
为了促进高效批量生产编解码器
数字视频
-
图像信息
2维图像包括纹理和亮度信息,3维图像包含深度、纹理和亮度信息 -
视频
视频包含连续的、运动的图像 -
数字视频
对自然场景的空间和时间上的采样
空间采样:用解析度(Resolution)衡量,常用的单位是pixel
时间采样:用帧率表示,常用单位是帧/秒,FPS -
人类视觉系统(HVS)
Human Vision System
由眼睛、神经、大脑构成
iris → lens → retina/fovea → optic nerve → brain
HVS特点:对高频信息敏感,对高对比度信息敏感,对亮度信息的敏感度大于色度信息,对运动信息敏感
视频编码处理:丢弃高频信息,提高边缘信息主观质量。降低色度的解析度,对感兴趣区域(ROI)特殊处理 -
颜色数字表示
RGB,三原色表示,数值在0-255之间
YUV,色彩空间,Y是亮度分量,UV是色彩分量,YUV能更好地反映HVS的特点
转换公式:Y=Kr×R+Kg×G+Kb×B,(ITU-R规定:Kr = 0.299,Kg = 0.587, Kb = 0.114)
[0.2990 0.5870 0.1140]
[Y,U,V]’ = [-0.1687 -0.3313 0.5000] * [R, G+128, B+128]’
[0.5000 -0.4187 -0.0813] -
采样方法:亮度和色度分量的采样比率
4:4:4 – 完全采样,亮度和色度信息完全相同
4:2:2 – 不完全采样,保留所有亮度信息,每4个Y对应2个U和2个V,色度分量在横向为亮度信息的一半
4:2:0 – 不完全采样,保留所有亮度信息,每4个Y对应1个U和1个V,色度分量在横向和纵向均为亮度信息的一半 -
帧与场
一帧图像可分为顶场和底场
逐行图像:一帧图像的两场在同一时间
隔行图像:一帧图像的两场在不同时间
编码基础
-
语法与语义
语法:码流中各个元素的位置关系,如:01001001…,表示图像编码类型(01),宏块类型(00),编码系数1001等。
语义:每个语法元素所表达的意义,如:图像编码类型,I帧:00,P帧:01,B帧:10 -
编码层次组成
序列(Sequence)
图像组(Group of Pictures,GOP)
图像(Picture)
条带(Slice)
宏块(Macroblock,MB)
块(Block) -
码流结构
序列层:系列起始码,序列头,序列数据(细分),序列结束码
图像组层:图像组头,图像组#0数据(细分),图像组头,图像组#1数据(细分),图像组头,图像组#2数据(细分)……
图像层:图像头,图像#0数据(细分),图像头,图像#1数据(细分),图像头,图像#2数据(细分)……
条带层:条带头,条带#0数据(细分),条带头,条带#1数据(细分),条带头,条带#2数据(细分)……
宏块层:宏块头,宏块#0数据(细分),宏块头,宏块#1数据(细分),宏块头,宏块#2数据(细分)……
块层:块#0数据,块#1数据,块#2数据…… -
帧编码
I帧:帧内编码,考虑空间相关性
P帧:帧间编码,考虑空间、时间相关性,由前往后预测
B帧:帧间编码,考虑空间、时间相关性,双向预测 -
序列信息
序列是指一段连续编码的并具有相同参数的视频图像。
序列起始码是指专有的一段比特串,标识一个序列的压缩数据的开始,如MPEG-2的序列起始码为十六进制数000001(B3)。
序列头是指记录序列信息,包含档次(Profile)、层(Tier)、级别(Level)、宽度,高度,是否是逐行序列,帧率等
序列结束码是指专有的一段比特串,标识该序列的压缩数据的结束。如MPEG-2的序列结束码为十六进制数000001(B7)。 -
图像组编码对象
编码顺序和显示顺序,注意区分 -
图像编码结构
图像信息
图像起始码:专有的一段比特串,标识一个图像的压缩数据的开始,如MPEG-2的图像起始码为十六进制数000001(00)
图像头:记录图像信息,包含图像编码类型,图像距离,图像编码结构,图像是否为逐行扫描
图像分块编码 -
条带编码结构
条带:多个宏块的组合。
条带起始码:专有的一段比特串,标识一个条带的压缩数据的开始。如MPEG-2的条带起始码为十六进制数000001(0~AF)
条带头:记录当前图像的相关信息。含条带位置,条带量化参数,宏块编码技术标识等。 -
宏块编码结构
宏块:16x16的像素块(对亮度而言)
宏块内容:宏块编码类型,编码模式,参考帧索引,运动矢量信息,宏块编码系数等。 -
块编码结构
8x8或4x4块的变换量化系数的熵编码数据
CBP (Coded Block Patten):用来指示块的变换量化系数是否全为零
YUV(4:2:0)编码,CBP通常6比特长,每个比特对应一个块,当某一块的变换量化系数全为零时,比特位值为0,否则为1
每个块的变换量化系数的最后用一个EOB (End of Block)符号来标识。 -
视频编解码关键技术
预测:通过帧内预测和帧间预测降低视频图像的空间冗余和时间冗余。
变换:通过从时域到频域的变换,去除相邻数据之间的相关性,即去除空间冗余。
量化:通过用更粗糙的数据表示精细的数据来降低编码的数据量,或者通过去除人眼不敏感的信息来降低编码数据量。
扫描:将二维变换量化数据重新组织成一维的数据序列。
熵编码:根据待编码数据的概率特性减少编码冗余。 -
预测
空间预测:利用图像空间相邻像素的相关性来预测的方法
– 帧内预测技术:利用当前编码块周围已经重构出来的像素预测当前块
– Intra图像编码(I帧)
时间预测:利用时间上相邻图像的相关性来预测的方法
– 帧间预测:运动估计(Motion Estimation,ME),运动补偿(Motion Compensation,MC)
– Inter图像编码:前向预测编码图像(P帧),双向预测编码图像(B帧) -
帧内预测
I帧图像的每个宏块都采用帧内(Intra)预测编码模式。
宏块分成8x8或者4x4块,对每个块采用帧内预测编码,称作Intra8x8或者Intra4x4。
帧内预测有多个预测方向:水平,垂直,左下,右下。
帧内预测还有直流(DC)预测。
色度块预测还有平面预测。 -
量化
原理:将含有大量的数据集合映射到含有少量的数据集合中。
一般情况下量化后高频部分包含大量的零系数
量化对主观质量的影响 -
码率控制
受到缓冲区,带宽的限制,编码码率不能无限制的增长,因此需要通过码率控制来将编码码流控制在目标码率范围内
通过调整量化参数的手段控制码率:帧级控制、条带级控制、宏块级控制
码率控制问题:防止码流有较大的波动,导致缓冲区发生溢出,同时保持缓冲区尽可能的充满,让图像质量既好又稳定
码率控制算法:码率分配、码率控制
码率控制属于非标准技术,编码端有,解码端没有
预测技术
目的是去除空间冗余和时间冗余。因为视频存在大量的空间冗余和时间冗余,预测后得到去除大部分冗余的残差。
-
空间冗余
图像空间相邻像素具有很强的相关性,帧内预测技术去除空间冗余。 -
亮度预测模式
水平、竖直、左下、右下、DCT -
色度预测模式
水平、竖直、平面、DCT -
时间冗余
视频图像在时间上有较强的相关性,即存在时间冗余。去除时间冗余的编码技术有:运动估计(Motion Estimation,ME)、运动补偿(Motion Compensation,MC) -
运动模型
平移、仿射、双线性 -
匹配准则
衡量待预测块和预测块之间的相似度,方法有绝对值差和,平方差和 -
运动估计
目的是去除视频图像的时间冗余。运动估计在搜索范围内为当前块寻找匹配最好的预测块,全搜索方式的运动估计计算复杂度高。 -
快速运动估计算法种类
在保持预测精度的同时减少运动估计的搜索次数,典型算法有:
– 三步搜索(Three Step Search,TSS)
– 二维Log搜索(2D Logarithmic Search,2DLOG)
– 正交搜索(Orthogonal Search Algorithm,OSA)
– 十字搜索(Cross Search Algorithm,CSA)
– 新三步搜索(New Three Step Search,NTSS)
– 四步搜索(Four Step Search,FSS)
– 共轭方向搜索(Conjugate Direction Search,CDS)
– 梯度下降搜索(Gradient Descent Search,GDS)
– 层次块搜索(Hierarchical Block Matching Algorithm,HBMA) -
分像素运动估计与运动补偿
时域运动位置更可能在整象素之间,即分像素上。
利用相邻的整象素可以估计出分象素的值:常用线性或双线性插值得到分象素的值。
分象素运动估计有更高的预测精度,但复杂度也更高:1/2分象素运动估计,图像存储空间增加4倍,运动矢量需要放大2倍,1/4分象素运动估计,图像存储空间增加16倍,运动矢量需要放大4倍,计算复杂度也成倍增加 -
多参考帧预测
有更多的候选图像,搜索更精确的预测块 -
图像分块编码
视频内容的运动非常复杂,图像分块编码可以更好的提高运动预测精度,提高压缩效率。要在编码块大小和附信息(MV,Mode)编码比特数之间权衡,小的编码块大小会有更好的预测但有更多的附信息比特数。
16×16,8×8,16×8,8×8 -
B帧有更好的编码效率,可以采用双向预测编码
新出现的对象参考将来的帧有更好的预测效果,前后两个预测的平均值可以减少预测方差。 -
全局运动估计
基于全局仿射运动模型。预测精度不如基于块的运动估计。MV数目少,适合简单运动场景的运动估计