2011-07-11 104 views
1

我需要在视频的特定时间间隔(例如从40秒到50秒)中提取帧。 使用C++。 首先我越来越位置,我需要开始然后我用av_read_frame让所有连续帧读FFmpeg提取当前帧时间戳

static double t = 10 ;//time in seconds 
int64_t timestamp = t * AV_TIME_BASE; //destination time 
av_seek_frame(pFormatContext , -1 , timestamp + pFormatContext->start_time ,AVSEEK_FLAG_BACKWARD); 

。 我的问题是我不知道何时停止。我如何检查我是否达到了结束间隔(例如50秒)?

谢谢。

回答

1

试图找到每秒帧数,然后用这个数字来计算每一帧的确切时间

frame_absolute_time = frame_number/FPS 
+0

嗨丹尼尔,通常这种方法正在工作。但有一个问题,av_seek_frame在时间戳之前返回最后一个关键帧。因此,我开始更早地计数10秒钟,结果我可能会错过时间间隔结束时(大约49 ...)的一些帧。任何方式来解决这个问题?谢谢 – kirbo

+0

不知道,除非有一个API调用来获取实际寻求帧的帧索引... –

6

av_read_frame()会给你一个PTS(显示时间标记)。这是AVPacket的成员pts。也许这个价值可以帮助你决定何时停止阅读。