FFmpegFrameGrabber 仅使用关键帧更快的 SetTimestamp

FFmpegFrameGrabber faster SetTimestamp using only Keyframes

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

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

问题是 "setTimestamp()" 需要几秒钟,具体取决于时间戳与关键帧的距离。

我正在寻找一种方法来执行更快的 setTimestamp() 只寻找关键帧。

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

frameGrabber.grabKeyFrame().timestamp

但这需要很长时间。我还尝试推断关键帧时间戳,但只有当关键帧间隔在视频文件上完全相同时才有效,而通常情况并非如此。

对于基于 setTimestamp/seeking 的 javacv 快速关键帧有什么想法吗?

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

好的,我只是复制了 FFmpegFrameGrabber.java 并在没有 "//decode up to the desired frame" 部分的情况下实现了一个额外的 setTimestamp(long timestamp, boolean useOnlyKeyframes) 方法,现在搜索速度非常快,而且只搜索关键帧。