I帧,P帧和B帧以及DTS和PTS的关系

基本概念:

I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。

P frame:前向预测编码帧,又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

B frame:双向预测内插编码帧,又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

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

DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。

在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。

I/P/B帧的不同:

I frame:自身可以通过视频解压算法解压成一张单独的完整的图片。

P frame:需要参考其前面的一个I frame 或者B frame来生成一张完整的图片。

B frame:则要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。

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

通过上述基本可以说明如果有B frame 存在的情况下一个GOP的最后一个frame一定是P。

DTS和PTS的不同:

DTS主要用于视频的解码,在解码阶段使用。PTS主要用于视频的同步和输出,在display的时候使用。在没有B frame的情况下,DTS和PTS的输出顺序是一样的。

例子:

下面给出一个GOP为15的例子,其解码的参照frame及其解码的顺序都在里面:

ibpdtspts

如上图:I frame的解码不依赖于任何的其它的帧。而P frame的解码则依赖于其前面的I frame或者P frame。B frame的解码则依赖于其前的最近的一个I frame或者P frame及其后的最近的一个P frame。

ISO/IEC13818-1中指定时钟频率为90kHz,所以DTS和PTS转换为单位为秒的公式是:dts/90000和pts/90000。

### FFmpeg 中音视频编解码 I P 的工作原理 #### I (Intra Frame) I 是一种独立完整的图像,不依赖其他任何进行重建。这意味着每一个 I 都可以单独解码并显示出来。这种特性使得 I 成为随机访问的关键点,在流媒体播放或视频编辑过程中非常重要。 对于 H.264 编码而言,I 不仅包含了当前时刻的画面信息,还可能携带了一些额外的数据用于初始化后续的预测过程[^3]。 ```bash ffmpeg -i input.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr output_frames_%03d.png ``` 上述命令可以用来提取输入文件中的所有 I ,并将其保存为一系列 PNG 图像文件。 #### P (Predicted Frame) P 通过向前参考之前的某个已知(通常是最近的一个 I 或者 P )来进行运动补偿预测,从而减少冗余信息量。因此,要正确地解码一个 P ,必须先获得它所参照的那个前向的内容。由于只需要单方向上的参考关系,所以处理起来相对简单一些。 当存在 B 时,P 的时间戳属性会表现出特定的行为模式:其呈现时间戳(PTS)大于解码时间戳(DTS)。 #### 使用 FFmpeg 进行操作 为了更好地理解管理这些不同类型的,可以通过 FFmpeg 提供的各种选项来查看或修改它们: - **获取类型统计**: 要分析一段视频里各类型的数量分布情况,可执行如下指令: ```bash ffmpeg -i video.mp4 -an -vf showinfo -f null - ``` 此命令会在控制台输出每一的信息,其中包括了该所属的具体类别(I/P/B)。 - **强制设置关键间隔** 如果希望调整输出视频中 I 出现频率的话,则可以在编码阶段指定 `g` 参数值作为 GOP 大小,也就是两个相邻 I 之间的最大距离: ```bash ffmpeg -i source.avi -c:v libx264 -g 60 destination.mp4 ``` 上述例子设定了每隔 60 个就会插入一个新的 I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值