OpenCV:可以用Java打开压缩视频吗?

时间:2019-05-22 14:05:56

标签: java file opencv file-processing

我已经压缩了.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

提前感谢:)

1 个答案:

答案 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>