LV005-概述
一、为什么要编码?
1. 不压缩是怎样的?
我们来做一个计算,如果一部电影时长 100 分钟,参数如下,请计算这部电影的大小。
画面分辨率:1920x1080 pixel
每秒钟帧数(帧率):30 fps
每个像素位数:12 bit
比特率 = 每个像素的位数 x 每秒钟的帧数 x 每一帧的像素数 = 12 * 30 * 1920 * 1080 = 746,496,000
视频大小 = 比特率 x 时长 = 746,496,000 * 60 * 100 = 4,478,976,000,000(bit)
换算成 GB = 4,478,976,000,000/1024/1024/1024 = 4,171.37GB
实际大小还需要除 8,文件的答问是字节,一个字节 = 8bit,所以电影的大小 = 4171.37/8 = 521GB,这里的大小,还不包括音频数据。
100 分钟就 500 多 G,如果不进行压缩,那么不仅传输成本高,存储的成本也很高。
2. 为什么可以进行视频编码
了解了为什么要视频编码的原因。再来看看为什么能进行视频压缩编码。这个问题,就是要回答视频压缩编码的条件什么?视频压缩编码到底压缩掉了什么数据?
视频编码的理论基础是香农的信息论,信息论是用概率和数理统计的方法研究信息、信息熵、通信系统、数据传输、密码学以及数据压缩等问题的基础理论。因为视频编码属于数据压缩的范畴,所以信息论是视频压缩的基础。
从信息论的角度来看,压缩就是去掉数据中的冗余,即保留不确定的信息,去掉确定的信息(可推知的),也就是用一种更接近信息本质的描述来代替原有冗余的描述。
为什么能进行视频压缩编码?
第一个条件:香农第一定理【可边长无失真新原编码定理】,其意义是:将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。
第二个条件:视频数据本身存在大量的数据冗余。
视频数据的冗余,总结来看,主要有以下冗余:
(1)空间冗余
同一景物表面上采样点的颜色之间通常存在着空间相关性,相邻各点的取值往往相近或者相同,这就是空间冗余。例如,图像中有一片连续的区域,这个区域的像素都是相同的颜色,那么空间冗余就产生了。如果先去除冗余数据再进行编码,则使表示每个像素的平均比特数下降,这就是通常所说的图像的帧内编码,即以减少空间冗余进行数据压缩。它也是静态图像存在的主要的数据冗余。

(2)时间冗余
时间冗余也称为时域冗余,它是针对视频序列图像而言的。视频序列每秒有 25 ~ 30 帧图像,相邻帧之间的时间间隔很小(例如,帧频为 25Hz 的电视信号,其帧间时间间隔只有 0.04s);同时实际生活中的运动物体具有运动一致性,使得视频序列图像之间有很强的相关性。对于视频压缩而言,通常采用运动估值和运动补偿预测技术来消除时间冗余,也称为帧间编码。

(3)编码冗余,也是信息熵冗余
由信息论可知,为了表示图像数据的一个像素点,只要按照其信息熵的大小分配相对应的比特数即可,但是对于图像数据的每个像素,在获取图像时很难获取像素的信息熵,因此一般的是对每个像素采用相同的比特数表示,这样就必然存在信息熵冗余;
(4)视觉冗余
人眼对图像的没感性是非均匀和非线性的,对于某些失真并不敏感,察觉不到图像的细微变化,这些细微变化即是丢失,人眼也感受不到,但是在记录视频的原始数据的时候,通常假定视觉系统是线性和均匀的,这一样就是产生了比理想编码更多的数据,这就是视觉冗余;
(5)知识冗余,图像中包含了一些人们的先验知识,比如图像中的人脸五官架构,这些位置信息是固定的;根据已有知识,可以构造某些图像中所包含的物体的模型,创建特征图库,这样图像编码的时候只需要保存一些特征参数,从而可以减少数据量,知识冗余是模型编码利用的主要特性;
(6)结构冗余,图像中存在很强的纹理结构或者自相似性,如果已知某种像素的分布模式,则可以通过某以特定过程生成图像;
以上两个必要条件,回答了为什么可以进行视频压缩编码。
二、怎么去除冗余?
这里只是了解一些术语概念,后面会再学习。
1. 帧内编码(帧内预测)
是针对一帧图像内部信息做的一种预测模式,主要针对图像中的空间冗余。

可以看出这个图大部分区域颜色是一样的。现在我们即将编码红色区域,假设帧中的颜色在垂直方向上保持一致,这意味着 未知像素的颜色与临近的像素相同。根据图像内部的连续性及相关性,可以直接由已编码的色块做预测处理,预测出来。
2. 帧间预测
在对视频进行编解码的时候,利用视频在时间域上的相关性,使用邻近一编码图像像素预测当前图像的像素,从而达到去除视频时域冗余的目的。

这是针对一个视频系列在时序上的图像信息预测模式,它主要用于消除视频序列中时间上的信息冗余。视频序列中当前帧和前一帧背景上基本一样存在冗余,例如上图中的 STOP 禁止标志,只有车子在移动,下一帧这个标志还是在相同的位置,只是车子向右做了平移。那我们可以将前一帧图像中移动的车子,加上一个向量,让它基于背景做一个平移,就可以得到当前的图像了,这样当前帧移动的车子就不用编码了。
三、相关书籍
有本书可以看一看:《新一代视频压缩编码标准——H.264/AVC》(毕厚杰 王健主编,人民邮电出版社)
参考资料:
【视频编解码-01】像素-PPI-比特率-码率……_像素比特-CSDN 博客
【视频编解码-02】视频编码的目的、条件和目标_视频为什么要进行编码, 编码的意义是什么-CSDN 博客