美文网首页使用FFMpeg 模仿Android MediaPlayer
H264系列--压缩编码必要性和冗余

H264系列--压缩编码必要性和冗余

作者: llm_5243 | 来源:发表于2020-12-24 23:12 被阅读0次

Android FFmpeg专题结构

视频编码必要性

视频是由一帧帧的图片组成. 以一个时长 1小时,帧率为30fps, 分辨率为1080P的视频举例, 一帧未压缩的图片(yuv420)大小为
1920 * 1080 + 1920 * 1080 / 4 + 1920 * 1080 / 4 =3110400 byte
视频总大小为
3110400 * 30 * 3600 = 335923200000 byte \approx 313G
可见未压缩编码的视频是非常大的

为何能进行压缩

44.png 45.png

视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像。由于人眼的视觉暂留效应,当帧序列以一定的速率播放时,我们看到的就是动作连续的视频。可见视频压缩编码可以分成帧间压缩帧内压缩.

  • 帧内预测压缩,解决的是空域数据冗余问题。
  • 帧间预测压缩(运动估计与补偿),解决的是时域数据冗徐问题。

视频之所能被压缩,也是因为有冗余信息. 冗余信息具体分为:

  • 空间冗余:图像相邻像素之间有较强的相关性
  • 时间冗余:视频序列的相邻图像之间内容相似
  • 编码冗余:不同像素值出现的概率不同
  • 视觉冗余:人的视觉系统对某些细节不敏感
  • 知识冗余:规律性的结构可由先验知识和背景知识得到

冗余

(具体原理比这个下面介绍的复杂多, 这里只是简单介绍,帮助理解概念)

  • 空间冗余
    我们常见到的jpeg图片, 就是一种对静态数据的压缩,可以理解为视频的帧内压缩. 一幅图像相邻像素间往往存在着空间连贯性.如下图
空间冗余.png

对于图片背景,相邻像素有很多是相同的.

  • 时间冗余

视频一般由时间轴区间内一组连续画面组成,其中的相邻帧往往包含相同的背景和移动物体,只不过移动物体所在的空间位置略有不同,所以后一帧的数据与前一帧的数据有许多共同的地方,这就称为时间冗余
如下图,背景部分有很多的相同像素,有些像素只是坐标发生了变化,可以通过运动矢量,只记录两帧间的差异。

74.jpg
  • 编码冗余
    首先介绍一下等长编码和变长编码:可以简单地理解为不同像素占用的空间都是一样的为等长编码,不同像素占用的空间不一样的为变成编码。可能听到比较多的变长编码就是哈夫曼编码
    一幅图像中不同像素出现的概率是不同的。对出现次数比较多的像素,用少的位数来编码。对出现次数比较少的像素,用多的位数来编码,能够减少编码的大小。
  • 视觉冗余
    利用人的视觉系统对某些细节不敏感。压缩视觉冗余度就是去掉那些相对人眼而言是看不到的或可有可无的图象数据
  • 知识冗余
    有许多图像的理解与某些基础知识有相当大的相关性。例如,人脸的图像有固定的结构,嘴的上方有鼻子,鼻子的上方有眼睛,鼻子位于正面图像的中线上等等。这类规律性的结构可由先验知识和背景知识得到,我们称此类冗余为知识冗余。根据已有知识,对某些图像中所包含的物体,可以构造其基本模型,并创建对应各种特征的图像库,进而图像的存储只需要保存一些特征参数,从而可以大大减少数据量。

参考:
https://zhuanlan.zhihu.com/p/214376735
https://blog.csdn.net/xiechan2834/article/details/96328249

相关文章

网友评论

    本文标题:H264系列--压缩编码必要性和冗余

    本文链接:https://www.haomeiwen.com/subject/quipnktx.html