为什么要有视频编码
视频其实是连续的图片,一般30帧每秒,以1分钟的1080p视频举例。
每个像素点的大小比如说是1.5字节(YUV420格式),一张图片的大小是:
1080*720*1.5 = 1.1MB
一秒钟是33MB
一分钟是1980M即1.9GB。
如果不压缩编码的话,现在的手机卡流量1GB只能看半分钟高清视频视频。可以认为只要是做直播,做视频网站的企业,对压缩效率的追求是很高的。
视频如何进行压缩编解码
- 帧内编码:单张图片内很多像素都是一样的,一个像素X可以用它左边和上边的像素进行推导得到X’,但是X’不够精确,需要记录下X’’= X – X’,X’’叫做残差
- 帧间编码:连续两张图片内容几乎一样,但是相对位置移动了一点点,只需要记录这个移动量即可
帧内压缩过程简化(易懂却不严谨)
1. 将第一张图片按16×16的方块划分,如下图:
A | B | C | D |
E | F | G | H |
I | J | K | L |
M | N | O | P |
2. 以左上角A为参考,A推导出B’,B-B’=B’’;B推导出C’,C-C’=C’’,以此类推,得到X’和X’’的图像,即预测图像和残差图像;预测+残差=原图。
预测和残差的信息量都很小,此时已经完成了压缩编码的主体工作。但残差仍然有压缩空间(难点),接下来进一步压缩残差信息。
3. 残差的压缩空间来自一个生理现象:人眼对低频信号更敏感,而高频信号可以忽视
4. DCT变换能将残差矩阵X转换为等效的频域矩阵Y(Y也可以转成X),Y矩阵有如下特点:
- 大部分的值是0
- 矩阵左上角是低频信号(要保留的),右下角是高频信号,可以去掉的
5. 通过特殊的排列方式(Zig-Zag),将矩阵变成类似54 3 2 1 0 0 0 0 0 0… 这样的结构,然后进一步进行熵编码完成整个压缩过程。
帧间压缩过程简述
帧间就是图像P以前面的帧作为参考,找到相对偏移值P’(运动矢量),那么P-P’=P’’(残差)。残差的编码和前面的一样。
视频解码
解码过程是编码的反方向,先得到预测信息或运动矢量,根据前面的参考得到预测图像P’;然后取出残差信息,完成熵解码,DCT逆变换,得到残差图像P’’;最后P’+P’’等于原图像。这里忽略了一些东西,只讲主体部分。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。