视频编码
视频应用
视频编码
-
压缩
-
为什么要压缩?
- 未经压缩的数字视频的数据量巨大
- 存储困难
- 传输困难
-
为什么可以压缩?
-
去除冗余信息
-
空间冗余: 图像相邻像素之间有较强的相关性
-
时间冗余: 视频序列的相邻图像之间内容相似
-
编码冗余: 不同像素值出现的概率不同
-
视觉冗余: 人的视觉系统对某些细节不敏感
-
知识冗余: 规律性的结构可由先验知识和背景知识得到
针对这些不同类型的冗余信息,在各种视频编码的标准算法中都有不同的技术专门应对, 以通过不同的角度提高压缩的比率。
-
-
-
数据压缩分类
-
无损压缩(Lossless)
- 压缩前解压缩后图像完全一致 X=X'
- 压缩比低(2:1~3:1)
- 例如:
- JPEG-LS(一种对连续色调图像的无损或者近无损的压缩标准)
- Winzip
-
有损压缩(Lossy)
-
压缩前解压缩后图像不一致 X≠X'
-
压缩比高(10:1~20:1)
-
利用人的视觉系统的特性
-
例如:MPEG-2,H.264/AVC,AVS
AVS与MPEG-2、MPEG-4 AVC/H.264使用的技术对比和性能差异估计
-
-
-
视频编码标准 | MPEG-2视频 | MPEG-4 AVC/H.264视频 | AVS视频 | AVS视频与AVC/H.264性能差异估计(采用信噪比dB估算,括号内的百分比为码率差异) |
---|---|---|---|---|
帧内预测 | 只在频域内进行DC系数差分预测 | 基于4×4块,9种亮度预测模式,4种色度预测模式 | 基于8×8块,5种亮度预测模式,4种色度预测模式 | 基本相当 |
多参考帧预测 | 只有1帧 | 最多16帧 | 最多2帧 | 都采用两帧时相当,帧数增加性能提高不明显 |
变块大小运动补偿 | 16×16,16×8(场编码) | 16×16、16×8、8×16、8×8、8×4、4×8、4×4 | 16×16、16×8、8×16、8×8 | 降低约0.1dB(2-4%) |
B帧宏块直接编码模式 | 无 | 独立的空域或时域预测模式,若后向参考帧中用于导出运动矢量的块为帧内编码时只是视其运动矢量为0,依然用于预测 | 时域空域相结合,当时域内后向参考帧中用于导出运动矢量的块为帧内编码时,使用空域相邻块的运动矢量进行预测 | 提高0.2-0.3dB(5%) |
B帧宏块双向预测模式 | 编码前后两个运动矢量 | 编码前后两个运动矢量 | 称为对称预测模式,只编码一个前向运动矢量,后向运动矢量由前向导出 | 基本相当 |
熵编码 | 单一VLC表,适应性差 | CAVLC:与周围块相关性高,实现较复杂CABAC:计算较复杂 | 上下文自适应2D-VLC,编码块系数过程中进行多码表切换 | 降低约0.5dB(10-15%) |
环路滤波 | 无 | 基于4×4块边缘进行,滤波强度分类繁多,计算复杂 | 基于8×8块边缘进行,简单的滤波强度分类,滤波较少的像素,计算复杂度低 | —— |
容错编码 | 简单的条带划分 | 数据分割、复杂的FMO/ASO等宏块、条带组织机制、强制Intra块刷新编码、约束性帧内预测等 | 简单的条带划分机制足以满足广播应用中的错误隐藏、恢复需求 | —— |
DCT(Discrete Cosine Transform):离散余弦变换
VLC(Variable Length Coding):变长编码
CAVLC(Context-based Adaptive Variable Length Coding):基于上下文的自适应变长码
CABAC(Context-based Adaptive Binary Arithmetic Coding):基于上下文的自适应二进制算术编码
FMO(Flexible Macroblock Ordering):灵活的宏块排序
ASO(Arbitrary Slice Ordering):任意条带排列
视频格式
数字视频有时间分辨率、空间分辨率、色彩空间、量化深度等参数,这些参数的组合称为视频格式
-
时间——帧率(frame per second)——流畅
-
空间——分辨率——清晰
-
色彩空间
-
RGB颜色空间
RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。 但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。 它将色调,亮度,饱和度三个量放在一起表示,很难分开。 它是最通用的面向硬件的彩色模型。该模型用于彩色监视器和一大类彩色视频摄像。
-
YUV颜色空间
在 YUV空间中,每一个颜色有一个亮度信号 Y,和两个色度信号 U 和V。 亮度信号是强度的感觉,它和色度信号断开,这样的话强度就可以在不影响颜色的情况下改变。 视频通信系统之所以要采用YUV,而不是RGB,主要是因为RGB信号不利于压缩。 在YUV这种方式里面,加入了亮度这一概念。眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些, 人眼对色度的敏感程度要低于对亮度的敏感程度。
-
所以,工程师认为,在我们的视频存储中,没有必要存储全部颜色信号。我们可以把更多带宽留给黑—白信号(被称作“亮度”),将稍少的带宽留给彩色信号(被称作“色度”)。于是,就有了YUV。
YUV里面的“Y”,就是亮度(Luma),“U”和“V”则是色度(Chroma)
-
YCbCr颜色空间
YCbCr 是在世界数字组织视频标准研制过程中作为ITU-RBT1601建议的一部分,其实是YUV经过缩放和偏移的翻版。
其中Y与YUV中的Y含义一致,Cb,Cr同样都指色彩, 只是在表示方法上不同而已。
在YUV家族中,YCbCr是在计算机系统中应用最多的成员,其应用领域很广泛,
JPEG、MPEG均采用此格式。Y表示亮度,CbCr表示颜色。怎么表示颜色,可以看下面这幅坐标图
Y要如何表示亮度呢,下面是Y在不同的情况下的表现
- 存储方式
以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量
- YUV 4:4:4采样,每一个Y对应一组UV分量。
- YUV 4:2:2采样,每两个Y共用一组UV分量。
- YUV 4:2:0采样,每四个Y共用一组UV分量。
- 存储方式
-
量化深度——精确
像素每一分量的数值对应的量化等级为量化深度,量化深度越大,像素值可以越精确。
8 bit
10bit-
10bit的视频记录更精确的色彩,比如我们平时用的rgb 每个通道8bit,那么每个颜色分量就0~255,只有256个,而10bit就有1024个。实际体验上,更细致的颜色分级意味着渐变色更细腻
视频的10bit的压制。 可以在保持高画质的前提下大大提升压缩效率,10bit压制主要是通过提升编码的精度, 从而在有损压缩时可以采用更高的量化值,同时保持十分好的质量, 于是可以在比8bit压制更低的码率下还原出更好的画面。 10bit在更高的精度冗余下可以在有损编码时有更高的效率。 具体对于画质有利的方面主要在于: 1.防止banding(色彩平滑过渡区域的色带)产生 2 提升暗场效果 3.更好地容纳噪点 而这几项正好都是现在8bit压制中很难处理的地方。特别是对于动画, banding是个及其麻烦的东西。暗场是十分容易码率分配不足,并且产生画面劣化的部分。 而噪点则是十分消耗码率。10bit下这些困难的东西都变得容易处理了。 目前所使用的10bit压制是作用于内部的编码精度,而不是输出精度。
-
视频编码原理
- 冗余编码技术
视频编码技术优先消除的目标,就是空间冗余和时间冗余。
- 视频是由不同的帧画面连续播放形成的。这些帧,主要分为三类,分别是:
- I帧:是自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码。视频序列中的第一个帧,始终都是I帧。
- B帧:“双向预测编码帧”,以前帧后帧作为参考帧。不仅参考前面,还参考后面的帧,所以,它的压缩率最高,可以达到200:1。不过,因为依赖后面的帧,所以不适合实时传输(例如视频会议)。
- P帧:“帧间预测编码帧”,需要参考前面的I帧和/或P帧的不同部分,才能进行编码。P帧对前面的P和I参考帧有依赖性。但是,P帧压缩率比较高,占用的空间较小。
时间冗余(帧间预测)
空间冗余(帧内预测)
- I帧:是自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码。视频序列中的第一个帧,始终都是I帧。
视频数据的封装
对于任何一部视频来说,只有图像,没有声音,肯定是不行的。所以,视频编码后,加上音频编码,要一起进行封装。
封装:就是封装格式,简单来说,就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。
再通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个饭盒,用来盛放饭菜的容器。
目前主要的视频容器有如下:MPG、VOB、MP4、3GP、ASF、RMVB、WMV、MOV、Divx、MKV、FLV、TS/PS等。
封装之后的视频,就可以传输了,你也可以通过视频播放器进行解码观看。