嗨,我正在处理图像处理,需要转换所有类型视频的一系列帧。
我已经尝试了JCodec,仅适用于.mp4类型的视频。
下面的代码显示了我以前从视频、中获取帧的操作
try {
int frameNumber = 0;
BufferedImage frame = null;
for(int i=0;i<100;i++)
{
frameNumber = i;
//video from which frames can be retrieved, declare frame number,
//returns numbered frame from video
frame = FrameGrab.getFrame(new File("D:\Traffic.mp4\"), frameNumber);
//write frame as image declare image format and file path where image
//is to be write
ImageIO.write(frame, "png", new File("D:\Frames2\frame_"+frameNumber+".png\"));
}
System.out.println("Finished");
} catch (Exception e) {
e.printStackTrace();
}
在上面的代码中,我试图阅读Traffic.mp4视频并获得前100帧。此代码适用于所有类型的.mp4视频,但当我尝试使用.flv、.avi类型的视频时,它正在提供meNullPointer异常。
那么是否有任何其他Java API我可以尝试接受所有类型的视频。
您可以尝试使用Xugler,一个用于java的FFMpeg包装器。FFMpeg支持处理单个帧,所以我想Xuggler离它不远了,演示DecodeAndCaptureFrames.java似乎在做你想要的事情。
看看Marvin Framework。它使用JavaCV作为相机和媒体文件的接口。查看此示例,展示如何从WMV文件中获取每个视频帧以用于图像处理。
在JavaCV组中,有一个关于支持的文件格式的讨论。