我想从视频中提取帧并对其应用一些过滤器,例如 gabor/hough 等。哪个 Java 库最适合处理各种视频编码?我一直在研究 GStreamer、JMF、Xuggler 等,但无法确定哪个是最好的。我也在寻找编辑帧并使用新帧制作视频。
问问题
13338 次
4 回答
12
如果您正在寻找执行低级别操作,例如提取帧并对其进行操作,那么 Xuggler 将是最佳选择,因为 API 是针对此低级别的。它适用于 ffmpeg,因此可以处理所有类型的视频编码。
不要将 JMF 用于任何事情,它陈旧、过时且有问题 - GStreamer 很好,但 API 更适合播放视频而不是操纵帧。
于 2012-10-22T12:31:35.257 回答
3
你可以试试Marvin 框架。它使用 JavaCV 进行视频编码和设备访问,但所有图像处理算法都是纯 Java。
加载视频并实时处理帧非常容易,如下面的边缘检测示例所示。
源代码:
import static marvin.MarvinPluginCollection.*;
public class SimpleVideoProcessing extends JFrame implements Runnable{
private MarvinVideoInterface videoAdapter = new MarvinJavaCVAdapter();
private MarvinImagePanel videoPanel = new MarvinImagePanel();
private MarvinImage videoFrame, videoOut = new MarvinImage(640,480);
public SimpleVideoProcessing() throws MarvinVideoInterfaceException{
super("Simple Video Processing using Marvin");
add(videoPanel);
// Load video file and start the processing thread
videoAdapter.loadResource("./res/snooker.wmv");
new Thread(this).start();
setSize(640,500);
setVisible(true);
}
public void run() {
try {
while(true){
// Request, process and show the video frame.
videoOut.clear();
videoFrame = videoAdapter.getFrame();
prewitt(videoFrame.clone(), videoOut);
videoPanel.setImage(videoOut);
}
} catch (MarvinVideoInterfaceException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws MarvinVideoInterfaceException {
new SimpleVideoProcessing().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
于 2016-06-30T03:52:04.933 回答
1
JMF 是一个不错的选择。但如果处理时间在您的代码中很重要,则最好使用 Xuggler。显然,JMF 比 Xuggler 更通用。
于 2012-10-28T20:48:01.213 回答
0
许格勒,是的。但是,如果您要进行大量图像处理,则应该使用OpenImaj。该库使用 Xuggler 作为其依赖项,但这并不是它的全部功能。想想拥有 Opencv 的功能,而不会缺乏 Java 中的速度。此外,它所需要的只是添加一个 Maven 依赖项,你就可以开始了。代码量也减少了。
注意:我仍在审查图书馆,并将继续更新我的答案。
于 2016-06-22T15:37:00.707 回答