视频采样,量化,编码,压缩,解码相关技术原理学习笔记
Author:zhoulujun Date:
首先推荐阅读之的水货文章:《水煮RGB与CMYK色彩模型—色彩与光学相关物理理论浅叙》、《色彩空间HSL/HSV/HSB理论,RGB与YUV如何转换》、《三色视者与四色视者身后的理论基础:色彩原理》。本文主要以《即时通讯音视频开发》/《从JPG到AVI,这篇视频编码的最强入门科普,你值得拥有!》为基础的学习笔记。目前行文比较乱,还未细致整理。
图片、视频为何需要压缩?
无论视频还是音频,未经压缩,存储体量巨大。传输也困难。
比如音频采样44.1kHz/16bit采样(频率:294 x 50 x 3||44,056=245 x 59.94 x 3,振幅:0-96分贝),具体可以查看《频率史—从电源频率到音频采样频率》。码率为:16bit×44.1KHz=705.6Kbit/s。
视频方面,简单演算下1920×1080(px)尺寸, R、G、B各8位采样(这个颜色范围已经超过了人眼可见的全部色彩,所以又叫真彩色。再高的话,对于我们人眼来说,已经没有意义了,完全识别不出来)帧率30fps
3×8(bit)×1920×1080×30(s)÷8(byte)=6220800byte×30(s)≈186.6MB/s
1分钟大约是11GB,一部90分钟的电影,约是1000GB。一般硬盘也就1TB,读写速度平均50-90MB/s
注:8 bit(位)=1 byte(字节)
人类视觉系统HVS构成与特点:
对高频信息不敏感
对高对比度更敏感
对亮度信息比色度信息更敏感
对运动的信息更敏感
针对HVS的特点,数字视频系统的设计应该考虑哪些因素?
丢弃高频信息,只编码低频信息
提高边缘信息的主观质量
降低色度的解析度
对感兴趣区域(Region of Interesting,ROI)进行特殊处理
衡量视频,又是用的什么指标参数呢?最主要的一个,就是帧率(Frame Rate)。
在视频中,一个帧(Frame)就是指一幅静止的画面。帧率,就是指视频每秒钟包括的画面数量(FPS,Frame per second)。
帧率越高,视频就越逼真、越流畅。
视频编解码之数字视频介绍
通常来说,视频里面的冗余信息包括:
编解码中的关键技术
视频编码技术优先消除目标,就是空间冗余和时间冗余。
所谓编码算法,就是寻找规律,构建模型。谁能找到更精准的规律,建立更高效的模型,谁就是厉害的算法。
编码层次的组成
序列(Sequence)指一段连续编码的并具有相同参数的视频图像。
序列起始码是指专有的一段比特串,标识一个序列的压缩数据的开始。如MPEG-2的序列起始码为十六进制数000001(B3)。
序列头是指记录序列信息,包含档次(Profile),级别(Level),宽度,高度,是否是逐行序列,帧率等内容。
序列结束码是指专有的一段比特串,标识该序列的压缩数据的结束。如MPEG-2的序列结束码为十六进制数000001(B7)。
图像组(Group of Pictures,GOP)
图像(Picture)
条带(Slice)多个宏块的组合。
条带起始码:专有的一段比特串,标识一个条带的压缩数据的开始。如MPEG-2的条带起始码为十六进制数000001(0~AF)。
条带头:记录当前图像的相关信息。含条带位置,条带量化参数,宏块编码技术标识等。
宏块(Macroblock,MB)16x16的像素块(对亮度而言)。
宏块内容:宏块编码类型,编码模式,参考帧索引,运动矢量信息,宏块编码系数等。
块(Block) 8x8或4x4块的变换量化系数的熵编码数据。
CBP (Coded Block Patten):用来指示块的变换量化系数是否全为零。
对于YUV(4:2:0)编码,CBP通常6比特长,每个比特对应一个块,当某一块的变换量化系数全为零时,其对应比特位值为0,否则为1。
每个块的变换量化系数的最后用一个EOB (End of Block)符号来标识。
视频编解码关键技术
预测:通过帧内预测和帧间预测降低视频图像的空间冗余和时间冗余。
变换:通过从时域到频域的变换,去除相邻数据之间的相关性,即去除空间冗余。
量化:通过用更粗糙的数据表示精细的数据来降低编码的数据量,或者通过去除人眼不敏感的信息来降低编码数据量。
扫描:将二维变换量化数据重新组织成一维的数据序列。
熵编码:根据待编码数据的概率特性减少编码冗余。
预测
如果一段1分钟的视频,有十几秒画面是不动的,或者,有80%的图像面积,整个过程都是不变(不动)的。那么,是不是这块存储开销,就可以节约掉了?我们需要准确预测其冗余信息并对其消除。
空间预测
利用图像空间相邻像素的相关性来预测的方法,图像空间相邻像素具有很强的相关性,帧内预测技术去除空间冗余。
帧内预测技术:利用当前编码块周围已经重构出来的像素预测当前块
Intra图像编码(I帧)
亮度预测模式
色度预测模式
时间预测
视频图像在时间上有较强的相关性,即存在时间冗余。去除时间冗余的编码技术有:运动估计(Motion Estimation,ME)、运动补偿(Motion Compensation,MC)。
帧间预测:运动估计(Motion Estimation,ME),运动补偿(Motion Compensation,MC)
Inter图像编码:前向预测编码图像(P帧),双向预测编码图像(B帧)
运动模型
匹配准则
运动估计
目的是去除视频图像的时间冗余。运动估计在搜索范围内为当前块寻找匹配最好的预测块,全搜索方式的运动估计计算复杂度高。
全局运动估计
基于全局仿射运动模型。预测精度不如基于块的运动估计。MV数目少,适合简单运动场景的运动估计。
快速运动估计算法种类
在保持预测精度的同时减少运动估计的搜索次数,典型算法有:
三步搜索(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)编码比特数之间权衡,小的编码块大小会有更好的预测但有更多的附信息比特数。
帧内预测
I帧图像的每个宏块都采用帧内(Intra)预测编码模式。
宏块分成8x8或者4x4块,对每个块采用帧内预测编码,称作Intra8x8或者Intra4x4。
帧内预测有多个预测方向:水平,垂直,左下,右上。
帧内预测还有直流(DC)预测。
色度块预测还有平面预测。
量化
将含有大量的数据集合映射到含有少量的数据集合中。
一般情况下量化后高频部分包含大量的零系数
量化对主观质量的影响
如何理解压缩码流?
语法:码流中各个元素的位置关系。
如:01001001…,表示图像编码类型(01),宏块类型(00),编码系数1001等。
语义:每个语法元素所表达的意义。
例如:图像编码类型。I帧(00),P帧(01),B帧(10)
I帧,是自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码。视频序列中的第一个帧,始终都是I帧。
P帧,“帧间预测编码帧”,需要参考前面的I帧和/或P帧的不同部分,才能进行编码。P帧对前面的P和I参考帧有依赖性。但是,P帧压缩率比较高,占用的空间较小。
B帧,“双向预测编码帧”,以前帧和后作为参考帧。不仅参考前面,还参考后面的帧,所以,它的压缩率最高,可以达到200:1。不过,因为依赖后面的帧,所以不适合实时传输(例如视频会议)。
通过对帧的分类处理,可以大幅压缩视频的大小。毕竟,要处理的对象,大幅减少了(从整个图像,变成图像中的一个区域)。
我们来通过一个例子看一下,这有两个帧:
人在动,背景是没有在动的。第一帧是I帧,第二帧是P帧。两个帧之间的差值。也就是说,图中的部分像素,进行了移动,移动轨迹如下:
当然了,如果总是按照像素来算,数据量会比较大,所以,一般都是把图像切割为不同的“块(Block)”或“宏块(MacroBlock)”,对它们进行计算。一个宏块一般为16像素×16像素。
对I帧的处理,是采用帧内编码方式,只利用本帧图像内的空间相关性。
对P帧的处理,采用帧间编码(前向运动估计),同时利用空间和时间上的相关性。简单来说,采用运动补偿(motion compensation)算法来去掉冗余信息。
需要特别注意,I帧(帧内编码),虽然只有空间相关性,但整个编码过程也不简单。
如何理解帧和场图像?
一帧图像包括两场——顶场,底场:
逐行与隔行图像
逐行图像是指:一帧图像的两场在同一时间得到,ttop=tbot。
隔行图像是指:一帧图像的两场在不同时间得到, ttop≠tbot。
音频码率控制
语音编码器
语音编码器分为三种类形:(a)波形编器 、(b)声码器 、(c)混合编码器 。
波形编码器以构造出背景噪单在内的模拟波形为目标。作用于所有输入信号,因此会产生高质量的样值并且耗费较高的比特率。 而声码器 (vocoder)不会再生原始波形。这组编码器 会提取一组参数 ,这组参数被送到接收端,用来导出语音产生模形。声码器语音质量不够好。混合编码器,它融入了波形编码器和声器的长处。
波形编码器的设计常独立于信号。所以适应于各种信号的编码而不限于语音。
时域编码:
PCM:pulse code modulation,是最简单的编码方式。仅仅是对信号的离散和量化,常采用对数量化。
DPCM:differential pulse code modulation,差分脉冲编码,只对样本之间的差异进行编码。前一个或多个样本用来预测当前样本值。用来做预测的样本越多,预测值越精确。真实值和预测值之间的差值叫残差,是编码的对象。
ADPCM:adaptive differential pulse code modulation,自适应差分脉冲编码。即在DPCM的基础上,根据信号的变化,适当调整量化器和预测器,使预测值更接近真实信号,残差更小,压缩效率更高。
频域编码:
频域编码是把信号分解成一系列不同频率的元素,并进行独立编码。
sub-band coding:子带编码是最简单的频域编码技术。是将原始信号由时间域转变为频率域,然后将其分割为若干个子频带,并对其分别进行数字编码的技术。它是利用带通滤波器(BPF)组把原始信号分割为若干(例如m个)子频带(简称子带)。将各子带通过等效于单边带调幅的调制特性,将各子带搬移到零频率附近,分别经过BPF(共m个)之后,再以规定的速率(奈奎斯特速率)对各子带输出信号进行取样,并对取样数值进行通常的数字编码,其设置m路数字编码器。将各路数字编码信号送到多路复用器,最后输出子带编码数据流。对不同的子带可以根据人耳感知模型,采用不同量化方式以及对子带分配不同的比特数。
transform coding:DCT编码。
声码器
channel vocoder: 利用人耳对相位的不敏感。
homomorphic vocoder:能有效地处理合成信号。
formant vocoder: 以用语音信号的绝大部分信息都位于共振峰的位置与带宽上。
linear predictive vocoder:最常用的声码器。
混合编码器
波形编码器试图保留被编码信号的波形,能以中等比特率(32kbps)提供高品质语音,但无法应用在低比特率场合。声码器试图产生在听觉上与被编码信号相似的信号,能以低比特率提供可以理解的语音,但是所形成的语音听起来不自然。
混合编码器结合了2者的优点:
RELP: 在线性预测的基础上,对残差进行编码。机制为:只传输小部分残差,在接受端重构全部残差(把基带的残差进行拷贝)。
MPC: multi-pulse coding,对残差去除相关性,用于弥补声码器将声音简单分为voiced和unvoiced,而没有中间状态的缺陷。
CELP: codebook excited linear prediction,用声道预测其和基音预测器的级联,更好逼近原始信号。
MBE: multiband excitation,多带激励,目的是避免CELP的大量运算,获得比声码器更高的质量。
视频码率控制
受到缓冲区,带宽的限制,编码码率不能无限制的增长,因此需要通过码率控制来将编码码流控制在目标码率范围内。
一般通过调整量化参数的手段控制码率:
帧级控制
条带级控制
宏块级控制
码率控制考虑的问题:
防止码流有较大的波动,导致缓冲区发生溢出,
同时保持缓冲区尽可能的充满,让图像质量尽可能的好而且稳定
CBR(Constant Bit Rate):比特率稳定,但图像质量变化大。VBR(Variable Bit Rate):比特率波动大,但图像质量稳定。
码率控制算法:
码率分配
码率控制
码率控制属于非标准技术,编码端有,解码端没有。
如何衡量和评价编解码的效果呢?
一般来说,分为客观评价和主观评价。客观评价,就是拿数字来说话。例如计算“信噪比/峰值信噪比”。
信噪比的计算,我就不介绍了,丢个公式,有空可以自己慢慢研究...
视频编码标准
国际电报联盟(International Telegraph Union ,ITU)
1865年5月17日,为了顺利实现国际电报通信,法、德、俄、意、奥等20个欧洲国家的代表在巴黎签订了《国际电报公约》,国际电报联盟(International Telegraph Union ,ITU)也宣告成立。 随着电话与无线电的应用与发展,ITU的职权不断扩大。1906年,德、英、法、美、日等27个国家的代表在柏林签订了《国际无线电报公约》。1932年,70多个国家的代表在西班牙马德里召开会议,将《国际电报公约》与《国际无线电报公约》合并, 制定《国际电信公约》,并决定自1934年1月1日起正式改称为“国际电信联盟” ,也就是现在的ITU。ITU是联合国下属的一个专门机构,其总部在瑞士的日内瓦。ITU下属有三个部门,分别是ITU-R(前身是国际无线电咨询委员会CCIR)、ITU-T(前身是国际电报电话咨询委员会CCITT)、ITU-D。
国际标准化组织ISO/国际电工委员会IEC
ISO大家都知道,就是推出ISO9001质量认证的那个“国际标准化组织”。IEC,是“国际电工委员会”。1988年,ISO和IEC联合成立了一个专家组,负责开发电视图像数据和声音数据的编码、解码和它们的同步等标准。这个专家组,就是大名鼎鼎的MPEG,Moving Picture Expert Group(动态图像专家组)。
ITU提出了H.261、H.262、H.263、H.263+、H.263++,这些统称为H.26X系列,主要应用于实时视频通信领域,如会议电视、可视电话等。
ISO/IEC提出了MPEG1、MPEG2、MPEG4、MPEG7、MPEG21,统称为MPEG系列。
ITU和ISO/IEC一开始是各自捣鼓,后来,两边成立了一个联合小组,名叫JVT(Joint Video Team,视频联合工作组)
JVT致力于新一代视频编码标准的制定,后来推出了包括H.264在内的一系列标准。作为一种的编码标准,相比H.264有极大的性能提升,目前已经成为最新视频编码系统的标配。
大家特别注意一下上图里面的HEVC,也就是现在风头正盛的H.265。
视频封装
对于任何一部视频来说,只有图像,没有声音,肯定是不行的。所以,视频编码后,加上音频编码,要一起进行封装。封装,就是封装格式,简单来说,就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。再通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个饭盒,用来盛放饭菜的容器。目前主要的视频容器有如下:MPG、VOB、MP4、3GP、ASF、RMVB、WMV、MOV、Divx、MKV、FLV、TS/PS等。
转载本站文章《视频采样,量化,编码,压缩,解码相关技术原理学习笔记》,
请注明出处:https://www.zhoulujun.cn/html/theory/multimedia/CG-CV-IP/8147.html