time_base 、pts、dts、duration
- time_base:时间基,所谓时间基表示的就是每个刻度是多少秒 ,例如
- 如果把1秒分为25等份,你可以理解就是一把尺,那么每一格表示的就是1/25秒。此时的time_base={1,25} ,
- 如果你是把1秒分成90000份,每一个刻度就是1/90000秒,此时的time_base={1,90000}。
- 在ffmpeg中。av_q2d(time_base)=每个刻度是多少秒
- PTS:Presentation Time Stamp。PTS主要用于度量解码后的视频帧什么时候被显示出来,即显示时间戳,某一帧视频什么时候开始显示
- pts的值就是占多少个时间刻度(占多少个格子)。它的单位不是秒,而是时间刻度。
- DTS:Decode Time Stamp。DTS主要是标识读入内存中的帧数据流在什么时候开始送入解码器中进行解码,即解码时间戳
- duration:某一帧视频显示持续时间,duration和pts单位一样,duration表示当前帧的持续时间占多少格。
不同结构体的 time_base
1、AVStream的time_base的单位是秒。每种格式的time_base的值不一样,根据采样来计算,比如mpeg的pts、dts都是以90kHz来采样的,所以采样间隔就是1/900000秒。
2、AVCodecContext的time_base单位同样为秒,不过精度没有AVStream->time_base高,大小为1/framerate。
3、AVPacket下的pts和dts以AVStream->time_base为单位(数值比较大),时间间隔就是AVStream->time_base。
4、AVFrame里面的pkt_pts和pkt_dts是拷贝自AVPacket,同样以AVStream->time_base为单位;而pts是为输出(显示)准备的,以AVCodecContex->time_base为单位。
5、输入流InputStream下的pts和dts以AV_TIME_BASE为单位(微秒),至于为什么要转化为微秒,可能是为了避免使用浮点数。
6、输出流OutputStream涉及音视频同步,结构和InputStream不同,暂时只作记录,不分析