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