FFmpeg中PTS与DTS详解
一、PTS与DTS简介
- Decode Time Stamp(DTS)是解码时间戳,解码器解码时相对于SCR(系统参考)的时间戳。
- Presentation Time Stamp(PTS)是渲染时间戳,解码器渲染时相对于SCR(系统参考)的时间戳。
- duration是视频时长,表示当前帧的持续时间,或者说两帧之间的时间间隔是多少。
简单的理解就是PTS视频帧什么时候显示,dts视频帧什么时候解码。
二、时间基(time_base)简介
时间戳表示刻度,时间基表示秒/单位刻度,即一个刻度是多少秒。
封装格式不同、数据状态不同、时间基不同。例如原始数据(YUV)的时间基time_base = AVRational{1,25},压缩后的数据对应的时间基是time_base = AVRational{1,90000}。
时间基转换函数:
av_rescale_q_rnd(pts, in_tb, out_tb, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));
函数实现将时间戳pts从in_tb时间基住转换到out_tb 时间戳:pts*in_tb/out_tb 。
三、ffmpeg分层结构与时间基(timebase)
时间基存在的意义:
1. 为了方便表示时间戳
当时间戳为很大或者很小的量级时,可以用正常的数字表示。
2. ffmpeg的分层结构