视频压缩
视频编/解码其实就是一个视频压缩与解压缩的过程。原始数字视频数据量巨大,未经压缩不管是传输还是存储上都是不大现实的。
压缩原理
视频可以压缩,因为它有冗余。
- 空间冗余:图像相邻像素之间有较强的相关性
- 时间冗余:视频序列的相邻图像之间内容相似
- 编码冗余:不同像素值出现的概率不同
- 视觉冗余:人的视觉系统对某些细节不敏感
- 知识冗余:规律性的结构可由先验知识和背景知识得到
编解码的技术流程和原理


帧和场
一帧包括两场– 顶场和底场
逐行扫描和隔行扫描
- 逐行扫描表示一帧的两场在同一时间点发生,一帧即可显示一幅完整的图像
- 隔行扫描表示一帧的两场在不同时间点发生,即显示一幅完整的图像需要两帧
例如常说的 1080p中的p即是指 逐行扫描,而 1080i则表示隔行扫描。
I、P、B帧(预测)
常识里,1秒钟的视频应该包含24帧,否则就会出现人眼可感知的卡顿。事实上,由于图像时间、空间相邻像素具有很强的相关性,我们的视频很可能好几秒钟才会有一帧关键帧,其他的都是计算机通过 “脑补” 产生的。
- I帧,即关键帧
- P帧,前向预测帧
- B帧,双向预测帧
举个例子,招财猫小p总是摇着它的右手。假设关键帧为小p平举着右手,那么前一帧即是右手稍微往后靠一些。那么只要记录下两帧之间的差值,其他面面都可以通过计算得到。下一帧也同理。
帧间预测
- I帧图像的每个宏块都采用帧内(Intra)预测编码模式。
- 宏块分成8x8或者4x4块,对每个块采用帧内预测编码,称作Intra8x8或者Intra4x4。
- 帧内预测有多个预测方向:水平,垂直,左下,右上。
- 帧内预测还有直流(DC)预测。
- 色度块预测还有平面预测。
码率
码率表示一帧画面承载的信息数量,如1000k的码率表示一帧最大可接受1000k的信息,如果画面比较丰富,就会造成马赛克或者细节缺失。是决定视频文件和质量很关键的一个参数。
CBR 和VBR
码率控制一般分为两大类
- CBR:固定码率不变,画面简单的时候会造成存储浪费,画面丰富时会马赛克,图像质量不稳定但胜在cpu消耗比较 小。
- VBR:动态码率,会根据画面自动调整码率。图像擀量稳定,相应的cpu消耗会提升。
实际实现中还会有其他的组合,但一般都是根据CBR 、VBR作了相应的结合变动。