仅使用关键帧,FFmpegFrameGrabber的SetTimestamp更快

时间:2018-11-08 12:12:07

标签: java ffmpeg timestamp javacv keyframe

我正在使用javacv来读取mp4文件,并使用以下代码来查找视频:

FFmpegFrameGrabber frameGrabber;
[...]
frameGrabber.setTimestamp(timestamp);

问题在于,“ setTimestamp()”需要花费几秒钟的时间,具体取决于时间戳与关键帧的距离。

我正在寻找一种只对关键帧进行快速setTimestamp()的方法。

知道所有关键帧时间戳是一种选择,但是我没有找到任何解决方案,除了读取所有关键帧并使用以下命令存储关键帧时间戳:

frameGrabber.grabKeyFrame().timestamp

但这需要很长时间。我还尝试推断关键帧时间戳,但只有在视频文件上的关键帧间隔完全相同(通常不是这种情况)的情况下,该方法才有效。

对基于快速关键帧的setTimestamp /寻求Javacv有任何想法吗?

还是您知道基于javacv / FFmpegFrameGrabber的视频播放器gui,它具有快速的滑块实现?

1 个答案:

答案 0 :(得分:0)

好吧,我只是复制了FFmpegFrameGrabber.java并实现了没有"//decode up to the desired frame"部分的附加setTimestamp(long timestamp,boolean useOnlyKeyframes)方法,现在查找非常快,并且仅针对关键帧。