我正在编写视频处理应用程序并且遇到了一些麻烦。
我们的想法是从视频文件中提取帧(图像),在GPU上处理它们,然后将它们写回新的视频文件。
到目前为止,我已成功使用JavaCV执行此操作。
唯一的问题是提取帧需要非常长的时间(在200ms区域内)。这是很多,因为增加了GPU处理时间和写入新文件所需的时间,它导致每帧的总进程持续时间约为700毫秒。
这就是我抓住框架的方式:
FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(videoLocation);
frameGrabber.start();
frameGrabber.setFrameNumber(frameNumber);
frame = frameGrabber.grabImage();
非常标准,没什么特别的,而且很有效。我能够处理帧,将其转换为位图等...
正如我之前所说,底部的两条指令(设置帧编号和抓取图像)需要很长时间。编写帧也需要相当多的时间。
如果有人对此问题有任何意见,我将不胜感激。也许我没有正确设置,也许还有另一种更快的解决方案。