前面介绍了图像格式和一些转换。想必大家更想了解视频格式和怎么编码解码视频。本文将介绍一下h264视频格式,这是使用FFmpeg的基础。这东西真的比较复杂,我也是找了很多资料,才有少少懂。如果文中有不对的地方,请大家斧正。
这里先介绍三个概念:分辨率、帧率、码率。
在图像处理领域,分辨率是指图像的像素尺寸,就是width * height。简单说就是有多少个像素。
帧率是指一秒有多少帧图像。平时我们看的视频一般都是24帧一秒的。因为这样的帧率看起来才流畅。
码率也叫比特率,是指每秒传送的比特(bit)数。直观地说,码率大,视频会更清晰。当码率比较小的时候,会出现马赛克,特别是当镜头突然转动或者画面图像有个物体出现的时候,马赛克就出现了。现在先这样简单理解。
视频,简单地说就是一张张图像(一帧帧图像)组成的。如果视频拍摄的静止没有变化的画面,那么可以只需第一张图像,之后重复播放第一张图像即可。这样,只需保存第一张图像即可,此时的压缩率是相当高的。当然实现中的画面一般都会变的,但变化不大,此时只需记录变化的部分即可。这样就得到了视频压缩的效果。
有了前面的基本认识后,现在来讲一下h264中的I、P、B帧。
I帧是关键帧。它是第一张图像,是一张完整的图像,其他两种帧要参照它。
P帧是向前预测帧,它会参考它前面的I帧或者P帧从而得到一张图像。