我压缩了.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)
提前致谢:)
最佳答案
使用org.bytedeco.javacv
包中的FFmpegFrameGrabber
。
例如:
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 的 native 库(或所有 native 库)。下面的 Maven 示例包含 Windows native 库。
<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>
关于java - OpenCV:可以用 Java 打开压缩视频吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258738/