我正在使用javacv来读取mp4文件,并使用以下代码来查找视频:
FFmpegFrameGrabber frameGrabber;
[...]
frameGrabber.setTimestamp(timestamp);
问题在于,“ setTimestamp()”需要花费几秒钟的时间,具体取决于时间戳与关键帧的距离。
我正在寻找一种只对关键帧进行快速setTimestamp()的方法。
知道所有关键帧时间戳是一种选择,但是我没有找到任何解决方案,除了读取所有关键帧并使用以下命令存储关键帧时间戳:
frameGrabber.grabKeyFrame().timestamp
但这需要很长时间。我还尝试推断关键帧时间戳,但只有在视频文件上的关键帧间隔完全相同(通常不是这种情况)的情况下,该方法才有效。
对基于快速关键帧的setTimestamp /寻求Javacv有任何想法吗?
还是您知道基于javacv / FFmpegFrameGrabber的视频播放器gui,它具有快速的滑块实现?
答案 0 :(得分:0)
好吧,我只是复制了FFmpegFrameGrabber.java并实现了没有"//decode up to the desired frame"部分的附加setTimestamp(long timestamp,boolean useOnlyKeyframes)方法,现在查找非常快,并且仅针对关键帧。