我已经压缩了.avi格式的视频。我想使用OpenCV从视频中获取帧。
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String filePath = "C:\\Users\\P6090053.avi";
String output = "C:\\Users\\Test";
if (!Paths.get(filePath).toFile().exists()) {
System.out.println("File " + filePath + " does not exist!");
return;
}
VideoCapture video = new VideoCapture(filePath);
video.open(filePath);/*Cant open compressed video*/
System.out.println(video.isOpened()); /*Always returns **false***/
}
使用上述代码,我可以打开未压缩的视频,但无法打开格式为“ Microsoft RLE”的压缩视频。
视频信息:文件扩展名:“ avi”,格式:“ RLE”,编解码器ID:“ 0 * 01000000”
示例视频:http://www.engr.colostate.edu/me/facil/dynamics/avis.htm (下载bird.avi-格式-Indeo4 )
提前感谢:)
答案 0 :(得分:0)
在软件包FFmpegFrameGrabber
中使用org.bytedeco.javacv
。
例如:
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(file);
grabber.start();
grabber.setFrameNumber(1000);
Java2DFrameConverter paintConverter = new Java2DFrameConverter();
ImageIO.write(paintConverter.getBufferedImage(grabber.grabKeyFrame(), 1), "jpg", new FileOutputStream("somewhere"));
您需要几个依赖性,包括OpenCV本身,FFmpeg和FFmpeg的本机库(或所有本机库)。下面的Maven示例包括Windows本机库。
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>3.4.2-1.4.1</version>
</dependency>
<dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>ffmpeg</artifactId>
<version>3.4.2-1.4.1</version>
<classifier>windows-x86_64</classifier>
</dependency>