【发布时间】:2011-07-11 04:51:59
【问题描述】:
有没有简单的方法在 java/scala 中解码视频?
我只需要框架并且必须对它们进行一些计算。无需快速或实时。
我尝试了处理,但效果不佳,我无法将其嵌入到我的项目中。我也看到了 jmf,但它似乎从 2004 年起就不再维护了。
【问题讨论】:
-
目前它是带有 DivX 的 AVI。但如果需要,我们应该能够更改容器/编解码器。但它必须是压缩格式。
有没有简单的方法在 java/scala 中解码视频?
我只需要框架并且必须对它们进行一些计算。无需快速或实时。
我尝试了处理,但效果不佳,我无法将其嵌入到我的项目中。我也看到了 jmf,但它似乎从 2004 年起就不再维护了。
【问题讨论】:
您可以使用 JCodec (http://jcodec.org) 中的“FrameGrab”类。
目前它支持 MP4(ISO BMF、QuickTime)文件格式,内含 AVC(H.264)视频。
只需要一帧
int frameNumber = 150;
BufferedImage frame = FrameGrab.getFrame(new File("filename.mp4"), frameNumber);
ImageIO.write(frame, "png", new File("frame_150.png"));
JCodec 在 maven 中可用:
<dependency>
<groupId>org.jcodec</groupId>
<artifactId>jcodec</artifactId>
<version>0.1.3</version>
</dependency>
或在其网站上下载。
【讨论】:
使用velvet-video,可以轻松地从压缩为 FFMpeg 支持的任何格式的视频文件中获取帧:
IVideoLib lib = new FFMpegVideoLib();
IDemuxer demuxer = lib.demuxer(new File("path-to-video-file"));
while(demuxer.nextPacket(frame -> {
BufferedImage image = frame.image();
// You get frames as BufferedImages here
}, null));
免责声明:我是 velvet-video 的作者。
【讨论】: