FrameGrab.getFrame 中的 NullPointerException [英] NullPointerException in FrameGrab.getFrame
问题描述
我想使用 jcodec 从视频中获取帧,但出现 NullPointerException.
I would like to get frame from video using jcodec, but I get 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 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);
}
}
}
堆栈跟踪:
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)
推荐答案
没有看到你的堆栈跟踪很难说,但是这一行.-
Hard to say without seeing your stacktrace, but this line.-
ImageIO.write(frame, "png", new File("frame_150.png"));
可能会抛出 Exception
它 frame
恰好是 null
.我会像这样重写代码.-
may be throwing the Exception
it frame
happens to be null
. I'd rewrite the code like this.-
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);
}
请注意,如果您在下一行重新分配一个 new BufferedImage
,则实例化它是没有意义的,并且运行第三行 (ImageIO.write
>) 如果 FrameGrab.getFrame
返回 null
(这很可能就是这里发生的事情).
Notice that there's no sense in instantiating a new BufferedImage
if you're reassigning it in the next line, and there's no sense in running the third line (ImageIO.write
) if FrameGrab.getFrame
returns null
(which is most probably what's happening here).
这篇关于FrameGrab.getFrame 中的 NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!