您的位置:首页 > 其它

图像视频编码和FFmpeg(4)-----h264格式简单介绍

2014-05-24 10:13 417 查看
前面介绍了图像格式和一些转换。想必大家更想了解视频格式和怎么编码解码视频。本文将介绍一下h264视频格式,这是使用FFmpeg的基础。这东西真的比较复杂,我也是找了很多资料,才有少少懂。如果文中有不对的地方,请大家斧正。



这里先介绍三个概念:分辨率、帧率、码率。

在图像处理领域,分辨率是指图像的像素尺寸,就是width * height。简单说就是有多少个像素。

帧率是指一秒有多少帧图像。平时我们看的视频一般都是24帧一秒的。因为这样的帧率看起来才流畅。

码率也叫比特率,是指每秒传送的比特(bit)数。直观地说,码率大,视频会更清晰。当码率比较小的时候,会出现马赛克,特别是当镜头突然转动或者画面图像有个物体出现的时候,马赛克就出现了。现在先这样简单理解。



视频,简单地说就是一张张图像(一帧帧图像)组成的。如果视频拍摄的静止没有变化的画面,那么可以只需第一张图像,之后重复播放第一张图像即可。这样,只需保存第一张图像即可,此时的压缩率是相当高的。当然实现中的画面一般都会变的,但变化不大,此时只需记录变化的部分即可。这样就得到了视频压缩的效果。



有了前面的基本认识后,现在来讲一下h264中的I、P、B帧。

I帧是关键帧。它是第一张图像,是一张完整的图像,其他两种帧要参照它。

P帧是向前预测帧,它会参考它前面的I帧或者P帧从而得到一张图像。

B帧是双向预测帧,它要参考它前面和后面的帧。

我这里只是简单地介绍,更详细I、P、B帧介绍可以看博文1博文2。至于怎么参考、预测的,那就复杂了,我也不懂。

对于一个比较长的视频,不可能只有一个I帧。通常是一个I帧带有若干个B、P帧。我们用I帧作为分割点,把一个视频分成多个GOP。一个GOP里面只有一个I帧,多个B、P帧。比如一个长度为5的GOP:IBPBP。在FFmpeg的***CodecContext结构体中有一个gop_size成员。



现在再来说一下码率。码率是比特数,码率的增大,我认为是增加B、P帧的内容(对应的比特数也增加了),写入更多的变化,使得画面更加清晰。可以看一下这篇博文。码率分固定和可变的。



大家可以看一下FFmpeg工程组里的一个帖子,里面有说到在FFmpeg中,怎么设置码率和最大、最小码率。




其中c为***CodecContext类型的一个指针。



本文介绍的东西比较抽象,要想弄懂,还是要多多实践和多查资料。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: