java - OpenCV:可以用 Java 打开压缩视频吗?
问题描述
我压缩了 .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)
提前致谢:)
解决方案
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>
推荐阅读
- python - Python,熊猫:如何将系列附加到数据框
- mysql - MYSQL 将文字 NULL 导入数字字段
- python - spaCy:尝试加载序列化文档时出错
- javascript - 网页刷新后保存的计数器变量
- asp.net-core - 如何在 javascript 中从 Microsoft CultureInfo 中找到 cldr 名称?
- android - Android Studio 在启动模拟器时出现以下错误
- excel - VBS 运行启用宏的工作簿错误 800A9C68
- python - 线程锁——什么时候真正需要?
- asp.net - Razor 在 ASP.NET MVC 中将呈现的文本发布到服务器
- url - DRF - 与 ModelViewSet 的相对 URL