0

I'm trying to create a Mendix Java Action which generates a thumbnail jpeg from a movie. I'm using javaCV 5.4 but I'm struggling to generate a Frame from the frameGrabber, for some reason it's always null?

this.InputFile = __InputFile == null ? null : system.proxies.FileDocument.initialize(getContext(), __InputFile);

this.TargetFileImage = __TargetFileImage == null ? null : system.proxies.Image.initialize(getContext(), __TargetFileImage);

// BEGIN USER CODE

ILogNode logger = Core.getLogger("GeneratePosterImage");

try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
   InputStream inputStream = Core.getFileDocumentContent(getContext(), __InputFile);
   FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(inputStream, 0);

   frameGrabber.start();

   logger.info("Frame Count: " + frameGrabber.getLengthInFrames());
   logger.info("Format: "+ frameGrabber.getFormat() + " width: "+ frameGrabber.getImageWidth() + " height: " + frameGrabber.getImageHeight());
   Java2DFrameConverter c = new Java2DFrameConverter();

   //Frame frame = frameGrabber.grabImage();
   //Frame frame = frameGrabber.grab();
   Frame frame = frameGrabber.grabKeyFrame();

   BufferedImage bufferedImage = c.convert(frame);
   logger.info("Height: " + bufferedImage.getHeight() + "Width: " + bufferedImage.getWidth());

   ImageIO.write(bufferedImage, "jpeg", outputStream);

   Core.storeFileDocumentContent(getContext(), __TargetFileImage, new ByteArrayInputStream(outputStream.toByteArray()));     

   frameGrabber.stop();

} catch (IOException e)
{
       logger.error(e.getMessage());
}

I'm very new to Java, can anyone advise where I'm going wrong?

The output from the first two log messages are: Frame Count: 96, Format: mov,mp4,m4a,3gp,3g2,mj2 width: 1312 height: 756

Thanks Adrian

1 Answers1

1

I'm posting this in case it helps anyone else.

My Colleague has figured it out - I didn't need the second parameter to FFmpegFrameGrabber() - I should have used:

FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(inputStream);

Thanks Adrian