77 lines
1.6 KiB
Plaintext
77 lines
1.6 KiB
Plaintext
|
/**
|
||
|
* Frames
|
||
|
* by Andres Colubri.
|
||
|
*
|
||
|
* Moves through the video one frame at the time by using the
|
||
|
* arrow keys. It estimates the frame counts using the framerate
|
||
|
* of the movie file, so it might not be exact in some cases.
|
||
|
*/
|
||
|
|
||
|
import processing.video.*;
|
||
|
|
||
|
Movie mov;
|
||
|
int newFrame = 0;
|
||
|
|
||
|
void setup() {
|
||
|
size(640, 360);
|
||
|
background(0);
|
||
|
// Load and set the video to play. Setting the video
|
||
|
// in play mode is needed so at least one frame is read
|
||
|
// and we can get duration, size and other information from
|
||
|
// the video stream.
|
||
|
mov = new Movie(this, "transit.mov");
|
||
|
|
||
|
// Pausing the video at the first frame.
|
||
|
mov.play();
|
||
|
mov.jump(0);
|
||
|
mov.pause();
|
||
|
}
|
||
|
|
||
|
void movieEvent(Movie m) {
|
||
|
m.read();
|
||
|
}
|
||
|
|
||
|
void draw() {
|
||
|
background(0);
|
||
|
image(mov, 0, 0, width, height);
|
||
|
fill(255);
|
||
|
text(getFrame() + " / " + (getLength() - 1), 10, 30);
|
||
|
}
|
||
|
|
||
|
void keyPressed() {
|
||
|
if (key == CODED) {
|
||
|
if (keyCode == LEFT) {
|
||
|
if (0 < newFrame) newFrame--;
|
||
|
} else if (keyCode == RIGHT) {
|
||
|
if (newFrame < getLength() - 1) newFrame++;
|
||
|
}
|
||
|
}
|
||
|
setFrame(newFrame);
|
||
|
}
|
||
|
|
||
|
int getFrame() {
|
||
|
return ceil(mov.time() * 30) - 1;
|
||
|
}
|
||
|
|
||
|
void setFrame(int n) {
|
||
|
mov.play();
|
||
|
|
||
|
// The duration of a single frame:
|
||
|
float frameDuration = 1.0 / mov.frameRate;
|
||
|
|
||
|
// We move to the middle of the frame by adding 0.5:
|
||
|
float where = (n + 0.5) * frameDuration;
|
||
|
|
||
|
// Taking into account border effects:
|
||
|
float diff = mov.duration() - where;
|
||
|
if (diff < 0) {
|
||
|
where += diff - 0.25 * frameDuration;
|
||
|
}
|
||
|
|
||
|
mov.jump(where);
|
||
|
mov.pause();
|
||
|
}
|
||
|
|
||
|
int getLength() {
|
||
|
return int(mov.duration() * mov.frameRate);
|
||
|
}
|