使用FFMpeg 模仿Android MediaPlayer

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

2020-12-24  本文已影响0人  llm_5243

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

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

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

冗余

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

空间冗余.png

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

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

74.jpg

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

上一篇 下一篇

猜你喜欢

热点阅读