ffmpeg时间换算,对于seek播放有帮助

根据pts来计算一桢在整个视频中的时间位置:  ide

timestamp(秒) = pts * av_q2d(st->time_base)  函数

计算视频长度的方法:  指针

time(秒) = st->duration * av_q2d(st->time_base)    视频

这里的st是一个AVStream对象指针。  对象

时间基转换公式  io

timestamp(ffmpeg内部时间戳) = AV_TIME_BASE * time(秒)  ffmpeg

time(秒) = AV_TIME_BASE_Q * timestamp(ffmpeg内部时间戳)  方法

因此当须要把视频跳转到N秒的时候能够使用下面的方法:  im

int64_t timestamp = N * AV_TIME_BASE;   时间戳

av_seek_frame(fmtctx, index_of_video, timestamp, AVSEEK_FLAG_BACKWARD);  

ffmpeg提供了不一样时间基之间的转换函数:  

int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)  

这个函数的做用是计算a * bq / cq,来把时间戳从一个时基调整到另一个时基。

在进行时基转换的时候,应该首选这个函数,它能够避免溢出的状况发生

相关文章
相关标签/搜索