请注意,这不是类似帖子的重复内容!
我想找到并解码第N帧,例如第7帧。
据我所知,使用“time_base”可以计算每一帧有多少个滴答,并通过将其乘以7来获得第7帧的位置。要计算滴答数,我执行以下操作:
我想找到并解码第N帧,例如第7帧。
据我所知,使用“time_base”可以计算每一帧有多少个滴答,并通过将其乘以7来获得第7帧的位置。要计算滴答数,我执行以下操作:
AVStream inStream = getStreamFromAVFormatContext();
int fps = inStream->r_frame_rate.num;
AVRational timeBase = inStream->time_base;
int ticks_per_frame = (1/fps) / timeBase;
int _7thFramePos = ticks_per_frame * 7;
- 我计算第7帧的位置正确吗?如果是,那么要跳转到该帧,我只需要执行
av_seek_frame(pFormatCtx, -1, _7thFramePos, AVSEEK_FLAG_ANY)
,是吗? 如果第7帧是P帧或B帧,我该如何解码它呢? - 我注意到计算出来的值与
inStream->codec->ticks_per_frame
不同,为什么?它们不应该相同吗?有什么区别?
av_seek_frame
函数? - theateistavformat_seek_file
与AVSEEK_FLAG_FRAME
一起使用会做什么?它会找到哪一帧,最接近第N个I-Frame还是其他的? 2 - 你的意思是如果我需要X次获取X帧,每次都要从流的开头开始吗? - theateist