关于FFMPEG 中I帧B帧P帧PTSDTS

Posted blackhumour2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于FFMPEG 中I帧B帧P帧PTSDTS相关的知识,希望对你有一定的参考价值。

1 基本概念

1.1 名词解释

媒体:是表示,传输,存储信息的载体,常人们见到的文字、声音、图像、图形等都是表示信息的媒体。

多媒体: 是声音、动画、文字、图像和录像等各种媒体的组合,以图文并茂,生动活泼的动态形式表现出来,给人以很强的视觉冲击力,留下深刻印象

多媒体技术:是将文字、声音、图形、静态图像、动态图像与计算集成在一起的技术。它要解决的问题是计算机进一步帮助人类按最自然的和最习惯的方式接受和处理信息。

流媒体 :流媒体是指采用流式传输的方式在Internet播放的连续时基媒体格式,实际指的是一种新的媒体传送方式,而不是一种新的媒体格式(在网络上传输音/视频等多媒体信息现在主要有下载和流式传输两种方式)。流式传输分两种方法:实时流式传输方式(Realtime streaming)和顺序流式传输方式(progressive streaming)。

多媒体文件:是既包括视频又包括音频,甚至还带有脚本的一个集合,也可以叫容器;

媒体编码:是文件当中的视频和音频所采用的压缩算法。也就是说一个avi的文件,当中的视频编码有可能是A,也可能是B,而其音频编码有可能是1,也有可能是2。

转码 :指将一段多媒体包括音频、视频或者其他的内容从一种编码格式转换成为另外一种编码格式

视频:连续的图象变化每秒超过24帧(Frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面,看上去是平滑连续的视觉效果,这样连续的画面叫做视频

音频 :人类能听到的声音都成为音频,但是一般我们所说到的音频时存储在计算机里的声音

码率:码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps(即,千位每秒)。 通俗一点的理解就是采样率,单位时间内采样率越大精度就越高,处理出来的文件就越接近原始文件,但是文件体积与采样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真。但是因为编码算法不一样,所以也不能用码率来统一衡量音质或者画质。

帧:帧就是一段数据的组合,它是数据传输的基本单位。就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。 一帧就是一副静止的画面,连续的帧就形成动画,如电视图像等。

帧率:帧率即每秒显示帧数,帧率表示图形处理器处理场时每秒钟能够更新的次数。高的帧率可以得到更流畅、更逼真的动画。一般来说30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为监视器不能以这么快的速度更新,这样超过新率的帧率就浪费掉了。

关键帧:相当于二维动画中的原画,指角色或者物体运动或变化中的关键动作所处的那一帧,它包含了图像的所有信息,后来帧仅包含了改变了的信息。如果你没有足够的关键帧,你的影片品质可能比较差,因为所有的帧从别的帧处产生。对于一般的用途,一个比较好的原则是每5秒设一个关键键。但如果时那种实时传输的流文件,那么要考虑传输网络的可靠度,所以要1到2秒增加一个关键帧。

1.2 I、P、B帧概念简述

视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。简单地说,I帧是关键帧,属于帧内压缩,解码时单独的该帧便可完成解码;P帧为向前预测编码帧,即P帧解码时需要参考前面相关帧的信息才能解码;B帧为双向预测编码帧,解码时既需要参考前面已有的帧又需要参考后面待解码的帧;他们都是基于I帧来压缩数据。

I帧表示关键帧,又称intra picture,I帧画面完整保留,解码时只需要本帧数据就可以完成(因为包含完整画面)。

P帧前向预测编码帧 又称predictive-frame,表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧双向预测内插编码帧 又称bi-directional interpolated prediction frame,是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

因此,I帧和P帧的解码算法比较简单,资源占用也比较少,I帧只要自己完成就行了,至于P帧,也只需要解码器把前一个画面缓存一下,遇到P帧时就使用之前缓存的画面就行。如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进。如果视频流还有B帧,则需要缓存前面和当前的视频帧,待后面视频帧获得后,再解码。

1.3 I、P、B帧特点分析

I帧特点:

1).它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;

2).解码时仅用I帧的数据就可重构完整图像;

3).I帧描述了图像背景和运动主体的详情;

4).I帧不需要参考其他画面而生成;

5).I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);

6).I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;

7).I帧不需要考虑运动矢量;

8).I帧所占数据的信息量比较大。

P帧特点:

1).P帧是I帧后面相隔1~2帧的编码帧;

2).P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);

3).解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;

4).P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;

5).P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;

6).由于P帧是参考帧,它可能造成解码错误的扩散;

7).由于是差值传送,P帧的压缩比较高。

B帧特点

1).B帧是由前面的I或P帧和后面的P帧来进行预测的;

2).B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;

3).B帧是双向预测编码帧;

4).B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;

5).B帧不是参考帧,不会造成解码错误的扩散。

2 PTS, DTS

2.1 概念

PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来,DTS主要用于视频的解码,在解码阶段使用。

DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码,PTS主要用于视频的同步和输出,在display的时候使用。在没有B frame的情况下,DTS和PTS的输出顺序是一样的.

GOP:两个I frame之间形成一个GOP,在x264中同时可以通过参数来设定bf的大小,即:I 和p或者两个P之间B的数量。

如果有B frame 存在的情况下一个GOP的最后一个frame一定是P.

下面给出一个GOP为15的例子,其解码的参照frame及其解码的顺序都在里面: 
技术分享图片
如上图:I frame 的解码不依赖于任何的其它的帧.而P frame的解码则依赖于其前面的I frame或者P frame.B frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame.

 

转自:http://blog.csdn.net/real_myth/article/details/43530991



以上是关于关于FFMPEG 中I帧B帧P帧PTSDTS的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg编码h264只包含I帧P帧的方法

FFmpeg时间戳详解

解决ffmpeg中的时间戳同步问题_day95

多媒体视频开发_(30)使用ffmpeg在视频中进行抽帧

视频的帧类型与帧存储

I帧P帧B帧IDR 关键帧介绍