import processing.opengl.*; import com.xuggle.xuggler.*; import com.xuggle.mediatool.*; import java.awt.image.BufferedImage; import java.awt.image.ImageObserver; import java.util.concurrent.TimeUnit; IMediaWriter imw; IStreamCoder isc; BufferedImage bgr; int vidRate; long sTime; long fTime; void setup() { size(1024,768); vidRate = 30; ellipseMode(CENTER); imw = ToolFactory.makeWriter(sketchPath("output.mp4")); imw.addVideoStream(0,0, ICodec.ID.CODEC_ID_MPEG4, IRational.make((double)vidRate), width, height); isc = imw.getContainer().getStream(0).getStreamCoder(); bgr = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); sTime = fTime = System.nanoTime(); } void draw() { background(sin(frameCount/25f)*255); ellipse(mouseX,mouseY, 100,100); loadPixels(); long cTime = System.nanoTime()-fTime; if(cTime >= (double)1000/vidRate) { // bgr.setRGB(0, 0, width, height, pixels, 0, width); bgr.getGraphics().drawImage(g.getImage(), 0, 0, new ImageObserver() { public boolean imageUpdate(Image i, int a, int b, int c, int d, int e){return true;} }); imw.encodeVideo(0, bgr, System.nanoTime()-sTime, TimeUnit.NANOSECONDS); fTime = System.nanoTime(); } } void mouseClicked() { imw.close(); exit(); }