2012-08-04 4 views
6

Voglio fare qualche analisi dell'immagine su un video che è memorizzato in formato .mp4. Quindi ho bisogno di un modo per ottenere le immagini di questo film in Java. Ho fatto un sacco di cose e ho trovato alcune librerie come jcodec e jaad. MA non ero in grado di ottenere le cose in esecuzione con queste librerie. E come ho scoperto, c'erano degli esempi (almeno non ne ho trovati) che mostravano il mio caso.Come ottenere le singole immagini di un mp4-Movie in Java

Potete aiutarmi? Conosci una libreria in grado di fare ciò di cui ho bisogno ed è in esecuzione almeno su Win7 a 64 bit. O sai come farlo con jcodec?

Grazie mille + migliori saluti, Andy

edit:

Come ho scritto, ho provato con jcodec. Ho scoperto come ottenere i dati di un frame, ma non come posso ottenerlo in qualcosa come BufferedImage o così. Mi aspetto che questi dati non siano in un semplice formato RGB ma in qualsiasi formato compresso o così. (Ho ragione?) Non so per decodificare questi dati.

È possibile ottenere i dati di un telaio con jcodec come segue (almeno per quanto ho capito questo):

public static void main(String[] args) throws IOException, MP4DemuxerException { 
    String path = "videos/video-2011-09-21-20-07-21.mp4"; 

    MP4Demuxer demuxer1 = new MP4Demuxer(new FileInput(new File(path))); 
    DemuxerTrack videoTrack = demuxer1.getVideoTrack(); 

    Packet firstFrame = videoTrack.getFrames(1); 
    byte[] data = firstFrame.getData(); 
} 

Ho anche trovato il follwing: http://code.google.com/p/jcodec/source/browse/trunk/src/test/java/org/jcodec/containers/mp4/DitherTest.java?r=70 Ma questo non sta funzionando (ha errori di compilazione) con il pacchetto jar scaricabile.

Grazie per il vostro aiuto!

+0

Chiunque può aiutare la mia domanda aggiornato? – andy

risposta

3

si potrebbe usare jcodec (http://jcodec.org/) nel programma ripercorrono sto estraendo fotogrammi da un video.

/* 
* To extract frames from a mp4(avc) video 
* 
*/ 
package avc_frame; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import org.jcodec.api.FrameGrab; 
import org.jcodec.api.JCodecException; 

public class Avc_frame { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws IOException, JCodecException { 

     long time = System.currentTimeMillis(); 
     for (int i = 50; i < 57; i++) { 
      BufferedImage frame = FrameGrab.getFrame(new File("/Users/jovi/Movies/test.mp4"), i); 
      ImageIO.write(frame, "bmp", new File("/Users/jovi/Desktop/frames/frame_"+i+".bmp")); 
     } 
     System.out.println("Time Used:" + (System.currentTimeMillis() - time)+" Milliseconds"); 
    } 
} 
+0

Se uso questo codice ottengo ArrayIndexOutOfBoundsException. Qualcuno potrebbe controllare la mia traccia dello stack? http://pastebin.com/YQVVH559 – Matt

+0

Che IDE stai usando?, ho usato Netbeans e ho importato la libreria jcodec (opzione di importazione JAR/libreria esterna). Dopo l'importazione dovrebbe funzionare. –

+0

Prenditi anche cura del ciclo for, nell'esempio sopra il video aveva più di 57 frame. Quindi era sicuro presumere che per ciclo. Modifica per il tuo caso d'uso. –

1
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import org.bytedeco.javacpp.opencv_core.IplImage; 
import org.bytedeco.javacv.FFmpegFrameGrabber; 
import org.bytedeco.javacv.FrameGrabber.Exception; 

public class Read{ 
    public static void main(String []args) throws IOException, Exception 
    { 
     FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("C:/Users/Digilog/Downloads/Test.mp4"); 
     frameGrabber.start(); 
     IplImage i; 
     try { 

      i = frameGrabber.grab(); 
      BufferedImage bi = i.getBufferedImage(); 
      ImageIO.write(bi,"png", new File("D:/Img.png")); 
      frameGrabber.stop(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 
} 
+0

Questo programma ti darà il primo fotogramma di video mp4. –

Problemi correlati