java - FFmpegFrameGrabber 仅使用关键帧更快的 SetTimestamp

标签 java ffmpeg timestamp javacv keyframe

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

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

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

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

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

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

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

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

最佳答案

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

关于java - FFmpegFrameGrabber 仅使用关键帧更快的 SetTimestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53207501/

相关文章:

java - 如何检查arrayList的单词是否在android中的EditText中可用

java - java smslib 库未收到短信

android - 在FFmpeg for Android中解码AAC

video - SlimDX/DirectX 中的 YUV 覆盖?

windows - 需要帮助/说明在 Windows 下使用 libdav1d 构建 ffmpeg

postgresql - 检查时间戳是否在 tsrange 内

java - 使用java下载大文件

java - 这里正确的架构设计是什么?

r - 在 R 中处理时间戳

mysql - mySQL如何确定TIMESTAMP字段的时区?