private void checkEndOfVideo() { // 10 frames from the end. if (grabber.getFrameNumber() + 10 > grabber.getLengthInFrames()) { try { grabber.setFrameNumber(0); } catch (FrameGrabber.Exception ex) { Logger.getLogger(CameraFFMPEG.class.getName()).log(Level.SEVERE, null, ex); } } }
public void toAnimatedGif(FFmpegFrameGrabber frameGrabber, AnimatedGifEncoder gifEncoder, int start, int end, int speed) throws FrameGrabber.Exception { long startFrame = Math.round(start * frameGrabber.getFrameRate()); long endFrame = Math.round(end * frameGrabber.getFrameRate()); Java2DFrameConverter frameConverter = new Java2DFrameConverter(); for (long i = startFrame; i < endFrame; i++) { if (i % speed == 0) { // Bug if frameNumber is set to 0 if (i > 0) { frameGrabber.setFrameNumber((int) i); } BufferedImage bufferedImage = frameConverter .convert(frameGrabber.grabImage()); gifEncoder.addFrame(bufferedImage); } } frameGrabber.stop(); gifEncoder.finish(); } }
@Override protected List<List<Writable>> loadData(File file, InputStream inputStream) throws IOException { List<List<Writable>> record = new ArrayList<>(); try (FFmpegFrameGrabber fg = inputStream != null ? new FFmpegFrameGrabber(inputStream) : new FFmpegFrameGrabber(file)) { if (numFrames >= 1) { fg.start(); if (startFrame != 0) fg.setFrameNumber(startFrame); for (int i = startFrame; i < startFrame + numFrames; i++) { Frame grab = fg.grabImage(); record.add(RecordConverter.toRecord(imageLoader.asRowVector(converter.convert(grab)))); } } else { if (framesPerSecond < 1) throw new IllegalStateException("No frames or frame time intervals specified"); else { fg.start(); for (double i = 0; i < videoLength; i += framesPerSecond) { fg.setTimestamp(Math.round(i * 1000000L)); Frame grab = fg.grabImage(); record.add(RecordConverter.toRecord(imageLoader.asRowVector(converter.convert(grab)))); } } } } return record; }
grabFrame.setFrameNumber(1); Frame prevFrame = grabFrame.grabImage(); int noFrames = grabFrame.getLengthInFrames(); grabFrame.setFrameNumber(i + 1); nextFrame = grabFrame.grabImage(); grabFrame.setFrameNumber(p + 1); nextFrame = grabFrame.grabImage();