Hi all,
I would like to know what is the best way to extract keyframe from a video.
My Status (butr I can cahnge it)
I'm Marco and I'm using JMF; I need for an help because I don't know how to extract keyframes from AVI and MPG files.
I'm using the code posted in this forum for extracting all frame in a video with the adding of an if expression that in the accessFrame method that I report below:
void accessFrame(Buffer frame) {
BufferToImage stopBuffer = new BufferToImage((VideoFormat) frame.getFormat());
Image stopImage = stopBuffer.createImage(frame);
try {
BufferedImage outImage = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
Graphics og = outImage.getGraphics();
og.drawImage(stopImage, 0, 0, size.width, size.height, null);
Iterator writers = ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer = (ImageWriter) writers.next();
File f = new File(frame.getSequenceNumber() + ".jpg");
if ((frame.getFlags() & Buffer.FLAG_KEY_FRAME) != 0){{color}
{color:#ff9900}
ImageOutputStream ios = ImageIO.createImageOutputStream(f);
writer.setOutput(ios);
{color:#ff9900}
writer.write(outImage);
ios.close();}
} catch (IOException e) {{color}
System.out.println("Error :" + e);
}
So, I'm able to extract some keyframe, but i'm not sure it is the correct way and my dubt grows out of the fact that without the if expression highlighted in red, it seems that I have more keyframes (those ones with flag ==1040). Another problem is that it works only with AVI because MPG instead of 1040, they have alternate sequence of 32 and 1056.
Cheers and thank u
Marco

Rispondi quotando