2012-08-17 63 views
0

我想使用xuggle從視頻捕捉圖像。在lib文件夾中添加xuggle-xuggler-3.0.660.jar。它提供了以下錯誤:從Java視頻創建圖像幀時出錯

java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
    at com.xuggle.ferry.JNILibraryLoader.<clinit>(JNILibraryLoader.java:47) 
    at com.xuggle.xuggler.XugglerJNI.<clinit>(XugglerJNI.java:19) 
    at com.xuggle.xuggler.Global.<clinit>(Global.java:240) 
    at testing.VideoThumbnailsExample.<clinit>(VideoThumbnailsExample.java:55) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    ... 4 more 
Exception in thread "main" Java Result: 1 

我寫了下面的代碼:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package testing; 

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import com.xuggle.mediatool.IMediaReader; 
import com.xuggle.mediatool.MediaListenerAdapter; 
import com.xuggle.mediatool.ToolFactory; 
import com.xuggle.mediatool.event.IVideoPictureEvent; 
import com.xuggle.xuggler.Global; 

public class VideoThumbnailsExample { 
    public static final double SECONDS_BETWEEN_FRAMES = 10; 
    private static final String inputFilename = "D:/bailey.mpg"; 
    private static final String outputFilePrefix = "c:/photo/a/mysnapshot"; 
    // The video stream index, used to ensure we display frames from one and 
    // only one video stream from the media container. 
    private static int mVideoStreamIndex = -1; 
    // Time of last frame write 
    private static long mLastPtsWrite = Global.NO_PTS; 
    public static final long MICRO_SECONDS_BETWEEN_FRAMES = (long)(Global.DEFAULT_PTS_PER_SECOND * SECONDS_BETWEEN_FRAMES); 

    public static void main(String[] args) { 
     IMediaReader mediaReader = ToolFactory.makeReader(inputFilename); 
     // stipulate that we want BufferedImages created in BGR 24bit color space 
     mediaReader.setBufferedImageTypeToGenerate(BufferedImage.TYPE_3BYTE_BGR); 
     mediaReader.addListener(new ImageSnapListener()); 
     // read out the contents of the media file and 
     // dispatch events to the attached listener 
     while (mediaReader.readPacket() == null) ; 
    } 

    private static class ImageSnapListener extends MediaListenerAdapter { 
     public void onVideoPicture(IVideoPictureEvent event) { 
      if (event.getStreamIndex() != mVideoStreamIndex) { 
       // if the selected video stream id is not yet set, go ahead an 
       // select this lucky video stream 
       if (mVideoStreamIndex == -1) 
        mVideoStreamIndex = event.getStreamIndex(); 
       else // no need to show frames from this video stream 
       return; 
      } 

      // if uninitialized, back date mLastPtsWrite to get the very first frame 
      if (mLastPtsWrite == Global.NO_PTS) 
       mLastPtsWrite = event.getTimeStamp() - MICRO_SECONDS_BETWEEN_FRAMES; 
      // if it's time to write the next frame 
      if (event.getTimeStamp() - mLastPtsWrite >= MICRO_SECONDS_BETWEEN_FRAMES) { 
       String outputFilename = dumpImageToFile(event.getImage()); 
       // indicate file written 
       double seconds = ((double) event.getTimeStamp())/Global.DEFAULT_PTS_PER_SECOND; 
       System.out.printf("at elapsed time of %6.3f seconds wrote: %s\n", seconds, outputFilename); 
       // update last write time 
       mLastPtsWrite += MICRO_SECONDS_BETWEEN_FRAMES; 
      } 
     } 

     private String dumpImageToFile(BufferedImage image) { 
      try { 
       String outputFilename = outputFilePrefix + System.currentTimeMillis() + ".png"; 
       ImageIO.write(image, "png", new File(outputFilename)); 
       return outputFilename; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return null; 
      } 
     } 
    } 
} 

請告訴我,我應該怎麼辦?

回答

1

根據這一java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory您必須包括sl4j jar文件到你的項目構建路徑,可以從here

+0

jenuine下載它,我有加SLF4J-簡單1.6.1.jar和slf4j.api-1.6.1 .jar建立path.but現在它給出以下錯誤 – Sumit 2012-08-17 07:15:32

+0

可以發佈錯誤後添加罐子 – jenuine 2012-08-17 07:16:42

+0

[main]錯誤com.xuggle.ferry.JNILibraryLoader - 無法加載庫:xuggle-xuggler;版本:3;請訪問http://www.xuggle.com/xuggler/faq/以找到此問題的常見解決方案 java.lang.UnsatisfiedLinkError:com.xuggle.xuggler.XugglerJNI.Global_NO_PTS_get()J \t at com.xuggle.xuggler。 XugglerJNI.Global_NO_PTS_get(Native Method) \t at com.xuggle.xuggler.Global。 (Global.java:240) \t at testing.VideoThumbnailsExample。 ( – Sumit 2012-08-17 07:17:41