Step 1:
Do screen grab at every frame and encode the captured image to JPEG format. The solution could come from Java 3D but using Robot seems to be a more stable method (from I read from different forums).
Step 2:
Stitch the still images into a movie using ffmpeg:
or
Bit rate is probably the main factor for quality. Choose wisely. The default bit rate of 200 yields low quality result.
Do screen grab at every frame and encode the captured image to JPEG format. The solution could come from Java 3D but using Robot seems to be a more stable method (from I read from different forums).
try {
//setLocationRelativeTo(null);
Rectangle win = getBounds();
Robot robot = new Robot(getGraphicsConfiguration().getDevice());
BufferedImage image =
robot.createScreenCapture(new Rectangle(win.x, win.y,
win.width, win.height));
FileOutputStream out = new FileOutputStream("image" + jpgCount + ".jpg");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
param.setQuality(0.9f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(image);
out.close();
} catch(AWTException e) {
e.printStackTrace();
} catch(IOException e) {
System.err.println("I/O exception!");
}
jpgCount++;
Step 2:
Stitch the still images into a movie using ffmpeg:
ffmpeg -i image%d.jpg -b 800 movie.mpg
or
ffmpeg -i image%d.jpg -sameq movie.mpg
Bit rate is probably the main factor for quality. Choose wisely. The default bit rate of 200 yields low quality result.
Comments
ffmpeg -i image\image%%d.jpg -sameq movie.mpg