ffmpeg时间换算,对于seek播放有帮助
ffmpeg时间换算,对于seek播放有帮助
jamin-snails 发表于1年前
ffmpeg时间换算,对于seek播放有帮助
  • 发表于 1年前
  • 阅读 227
  • 收藏 0
  • 点赞 0
  • 评论 2

标题:腾讯云 新注册用户域名抢购1元起>>>   

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

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

计算视频长度的方法:  

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

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

时间基转换公式  

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

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

所以当需要把视频跳转到N秒的时候可以使用下面的方法:  

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,来把时间戳从一个时基调整到另外一个时基。

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

共有 人打赏支持
粉丝 4
博文 12
码字总数 3550
评论 (2)
钛元素
我想知道怎么控制,ffmpeg参数控制么
jamin-snails

引用来自“钛元素”的评论

我想知道怎么控制,ffmpeg参数控制么
控制的话,可以参考下,ffplay里面的代码,你搜索avformat_seek_file这个函数。还有一个 av_frame_seek好像,frame去seek的话,需要你自己去找到关键帧,不然很容易花屏,直接 seekfile,ffmpeg内部自己去找关键帧,但是seek的时间不准。
×
jamin-snails
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: