2012-08-04 29 views
6

मैं .mp4 प्रारूप में संग्रहीत वीडियो पर कुछ छवि विश्लेषण करना चाहता हूं। इसलिए मुझे जावा में इस मूवी की छवियों को पाने का एक तरीका चाहिए। मैंने बहुत कुछ गड़बड़ कर लिया और कुछ पुस्तकालयों जैसे कि जेकोडसी और जाद पाया। लेकिन मैं इन पुस्तकालयों के साथ चल रही चीजें पाने में सक्षम नहीं था। और जैसा कि मैंने पाया, उदाहरण थे (कम से कम मुझे कोई नहीं मिला) जो मेरे उपयोगकेस को दिखाता है।जावा में एक एमपी 4-मूवी की एकल छवियों को कैसे प्राप्त करें

क्या आप मेरी मदद कर सकते हैं? क्या आपको कोई लाइब्रेरी पता है जो मुझे चाहिए और कम से कम Win7 64 बिट पर चल रहा है। या क्या आप जानते हैं कि इसे jcodec के साथ कैसे पूरा किया जाए?

धन्यवाद एक बहुत + सादर, एंडी

संपादित करें:

जैसा कि मैंने लिखा था, मैं इसे jcodec साथ की कोशिश की। मुझे पता चला कि फ्रेम के डेटा को कैसे प्राप्त किया जाए, लेकिन यह नहीं कि मैं इसे बुफर्ड इमेज या ऐसा कुछ कैसे प्राप्त कर सकता हूं। मुझे उम्मीद है कि ये डेटा एक साधारण आरजीबी प्रारूप में नहीं बल्कि किसी संकुचित प्रारूप में है। (क्या मैं इसके साथ सही हूं?) मुझे इस डेटा को डीकोड करने के बारे में पता नहीं है।

आप इस प्रकार (कम से कम जहाँ तक मुझे यह समझ के रूप में) jcodec के साथ एक फ्रेम के डेटा प्राप्त कर सकते हैं:

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

मैं भी follwing पाया: http://code.google.com/p/jcodec/source/browse/trunk/src/test/java/org/jcodec/containers/mp4/DitherTest.java?r=70 लेकिन यह काम नहीं कर रहा (डाउनलोड करने योग्य जार-पैकेज के साथ त्रुटियों को संकलित किया गया है)।

आपकी मदद के लिए धन्यवाद!

+0

मेरी अद्यतन सवाल पर किसी को भी मदद कर सकते हैं? – andy

उत्तर

0

यह लिंक आपको कैसे करना है इसके बारे में कुछ बुनियादी विचार दे सकता है। आप followinf कार्यक्रम मैं एक वीडियो से तख्ते निकालने हूँ में (http://jcodec.org/) jcodec इस्तेमाल कर सकते हैं इस प्रयास करें ..

http://krishnabhargav.blogspot.in/2008/02/processing-videos-in-java.html

+0

क्षमा करें कि मैं यह कहना भूल गया था: मेरे पास 64 बिट सिस्टम है और जेएमएफ वास्तव में 64 बिट पर काम नहीं करता है ... – andy

+0

तो आपको इस सहायता से अपने आप को कुछ काम करने की ज़रूरत है। –

3

/* 
* 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

यदि मैं इस कोड का उपयोग करता हूं तो मुझे ArrayIndexOutOfBoundsException मिलता है। क्या कोई मेरा स्टैक ट्रेस देख सकता है? http://pastebin.com/YQVVH559 – Matt

+0

आप किस आईडीई का उपयोग कर रहे हैं?, मैंने नेटबीन्स का इस्तेमाल किया और फिर जेकोडसी लाइब्रेरी (बाहरी जेएआर/लाइब्रेरी आयात विकल्प) आयात किया। आयात के बाद यह काम करना चाहिए। –

+0

इसके अलावा लूप का भी ख्याल रखना, उदाहरण के ऊपर वीडियो में 57 से अधिक फ्रेम थे। तो लूप के लिए यह मानना ​​सुरक्षित था। अपने उपयोग के मामले में संशोधन करें। –

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

यह प्रोग्राम आपको एमपी 4 वीडियो का पहला फ्रेम देगा। –

संबंधित मुद्दे