Java FrameGrab.getFrame中的NullPointerException
我想使用从视频中获取帧,但我得到NullPointerExceptionJava FrameGrab.getFrame中的NullPointerException,java,video,video-capture,Java,Video,Video Capture,我想使用从视频中获取帧,但我得到NullPointerException import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import org.jcodec.api.FrameGrab;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import org.jcodec.api.FrameGrab;
import org.jcodec.api.JCodecException;
public class App
{
public static void main( String[] args )
{
int frameNumber = 150;
try {
BufferedImage frame = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
try {
frame = FrameGrab.getFrame(new File("/Users/AG/Downloads/video.mp4"), frameNumber);
} catch (JCodecException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
ImageIO.write(frame, "png", new File("frame_150.png"));
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Stacktrace:
Exception in thread "main" java.lang.NullPointerException
at org.jcodec.codecs.h264.decode.deblock.DeblockingFilter.calcBsH(DeblockingFilter.java:167)
at org.jcodec.codecs.h264.decode.deblock.DeblockingFilter.deblockFrame(DeblockingFilter.java:80)
at org.jcodec.codecs.h264.H264Decoder$FrameDecoder.decodeFrame(H264Decoder.java:101)
at org.jcodec.codecs.h264.H264Decoder.decodeFrame(H264Decoder.java:61)
at org.jcodec.api.specific.AVCMP4Adaptor.decodeFrame(AVCMP4Adaptor.java:40)
at org.jcodec.api.FrameGrab.decodeLeadingFrames(FrameGrab.java:184)
at org.jcodec.api.FrameGrab.seekToFramePrecise(FrameGrab.java:111)
at org.jcodec.api.FrameGrab.getFrame(FrameGrab.java:331)
at com.mycompany.video_extractor.App.main(App.java:27)
很难说没有看到你的stacktrace,但是这一行-
ImageIO.write(frame, "png", new File("frame_150.png"));
可能正在抛出异常
它的帧
恰好是null
。我会像这样重写代码-
try {
BufferedImage frame = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
frame = FrameGrab.getFrame(new File("/Users/AG/Downloads/video.mp4"), frameNumber);
if (frame != null) {
ImageIO.write(frame, "png", new File("frame_150.png"));
}
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} catch (JCodecException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
请注意,如果要在下一行中重新分配新的BuffereImage,则实例化它没有意义,如果
FrameGrab.getFrame
返回null
(这很可能是这里发生的情况),则运行第三行(ImageIO.write
)没有意义,您进行了哪些诊断?请注意,如果您得到一个JCodeceException
,frame
将不会被分配一个新值-但您正在调用ImageIO.write
无论如何……我在frame=FrameGrab.getFrame行上得到异常。我没有进行诊断,只是检查了FrameGrab类并找到了编译后的代码。。