2012-10-22 244 views
6

我想從視頻中提取幀並在其上應用一些濾鏡,如gabor/hough等。哪個Java庫適合處理各種視頻編碼?我一直在尋找GStreamer,JMF,Xuggler等,但我無法決定哪一個最好。我還在尋找編輯框架並用新框架製作視頻。用於Java的視頻處理庫

回答

8

如果您想要進行低級操作,比如提取幀並操作它們,那麼Xuggler將是最好的選擇,因爲API是圍繞這個低級別進行的。它適用於ffmpeg,因此可以處理所有類型的視頻編碼。

不要對任何事情使用JMF,它是舊的,過時的和錯誤的 - GStreamer是好的,但API本身更適合播放視頻而不是操縱幀。

+0

謝謝!我想這是Xuggler。它看起來像OpenCV的Java可以手動配置http://answers.opencv.org/question/2137/wrapping-opencv-with-desktop-java-building-for-64/ - 任何想法,如果這會更好? – abhishek

+0

我還沒有使用過OpenCV,所以不能真正發表評論,但仍然可能傾向於Xuggler,因爲它是一個純Java API,它可以讓任務更輕鬆。 – berry120

1

JMF是一個不錯的選擇。但是如果處理時間在代碼中很重要,最好使用Xuggler。顯然,JMF比Xuggler更普遍。

0

Xuggler,是的。但是如果你打算進行大量的圖像處理,你應該使用OpenImaj。這個庫使用Xuggler作爲它的依賴,但這並不是它所做的。想想Opencv的能力,而不是你在Java中獲得的速度。而且,它所需要的只是添加一個Maven依賴關係,而且你很好。代碼量也減少了。

注意:我仍在評論圖書館,並會不斷更新我的答案。

介紹視頻:https://www.youtube.com/watch?v=TNEQ0eNqLgA

1

你可以試試Marvin Framework。它使用JavaCV進行視頻編碼和設備訪問,但所有圖像處理算法都是純Java。

加載視頻和實時處理幀非常容易,如下面的邊緣檢測示例所示。

enter image description here

的源代碼:

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); 
    } 
}