视频基础知识(帧,时间基)

 

I/P/B帧

I帧:关键帧,采用的是帧内压缩技术

B帧:前后参考帧,它属于帧间压缩技术,在压缩成B帧前,它会参考它前面的非压缩视频帧,和后面的非压缩的视频帧,纪录下前后两帧都不存放的残差值,这样可以达到更好的压缩率。

P帧:向前参考帧,就是参考的是前一个关键帧的数据,P帧属于帧间压缩技术,相对于B帧,P帧的压缩率要比B帧低

IDR帧:(instantaneous decoding refresh picture)

因为H264采用了多帧预测,所以I帧之后的P帧有可能会参考I帧之前的帧,这就使得随机访问的时候不能找到I帧作为参考条件,因为找到I帧,I帧之后的帧还是有可能解析不出来。而IDR帧就是一种特殊的I帧,即这一帧之后的所有参考帧只会参考到这个IDR帧,而不会参考前面的帧。在解码器中,一旦收到IDR帧,就会立即清理参考帧缓冲区,并将IDR帧作为被参考的帧。

 

 

PTS/DTS

PTS:(Presentation TimeStamp)是渲染用的时间戳,也就是说,我们的视频帧按照PTS的时间戳来展示的

DTS:(Decoding TimeStamp)解码时间戳,是用于视频解码的

 

存在即合理,存在的原因:

第一行,实际应展示的顺序:I    B    B    P

第二行,实际在存放的顺序:I    P    B    B

第三行,按实际顺序号展示:1    4    2    3

第四行,按实际顺序号展示:1    2    3    4

 

解释:实际展示的帧顺序是I,B,P,P,解码后的视频帧,但实际上这些帧到达之后,P帧参考的是I帧,B帧是双向参考帧,如果I帧和P帧没有解码的话,B帧是无法进行解码的,基于这个问题就出现了PTS和DTS两个时间戳。

 

时间基

有了时间戳之后,最终进行展示时还需要将PTS时间戳转成以秒为单位的时间

通常在ffmpeg/ffplay命令时,分别是tbr,tbn,tbc

tbr:是我们通常说的帧率。 time base of rate

tbn:视频流的时间基。time base of stream

tbc:视频解码的时间基。time base of codec

 

在ffmpeg中,不同的时间戳对应不同的时间基。对于视频的渲染我们使用的是视频流的时间基,也就是tbn

时间基即时间刻度,我们以帧率为例,每秒钟的帧率是25帧,那么他的时间基就是1/25,也就是每隔1/25秒后,显示一帧,假设我们当前时间为100,时间基是1/25,转成秒就是 100 * 1/25 = 4

 

posted @ 2020-05-26 18:16  tryFighting  阅读(1932)  评论(0编辑  收藏  举报