We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hello, I am very new on processing and try to make a capture movie with recorded video, but unfortunately, I can not fix it for many days and nights. I am very tired of all this. I want to quit but must to do for a college, and maybe in the future for installation. Can any of you help me please, and show me where is the problem(s)? Thank you (sorry for my English languages, are not my native languages)
import processing.video.*;
int numPixels;
// Number of columns and rows in the system
int[] previousFrame;
// Variable for capture device
Movie movie;
Capture video;
void setup() {
size(640, 480);
movie = new Movie(this, "VROXI.mp4");
movie.loop();
}
// Step 4. Read new frames from the movie.
void movieEvent(Movie movie) {
movie.read();
}
// Step 5. Display movie.
void draw() {
image(movie, 0, 0);
video = new Capture(this, width, height);
// Start capturing the images from the camera
video.start();
video.read(); // Read the new frame from the camera
video.loadPixels(); // Make its pixels[] array available
numPixels = video.width * video.height;
// Create an array to store the previously captured frame
previousFrame = new int[numPixels];
loadPixels();
}
// When using video to manipulate the screen, use video.available() and
// video.read() inside the draw() method so that it's safe to draw to the screen
{int movementSum = 0; // Amount of movement in the frame
for (int i = 0; i < numPixels; i++) { // For each pixel in the video frame...
color currColor = video.pixels[i];
color prevColor = previousFrame[i];
// Extract the red, green, and blue components from current pixel
int currR = (currColor >> 16) & 0xFF; // Like red(), but faster
int currG = (currColor >> 8) & 0xFF;
int currB = currColor & 0xFF;
// Extract red, green, and blue components from previous pixel
int prevR = (prevColor >> 16) & 0xFF;
int prevG = (prevColor >> 8) & 0xFF;
int prevB = prevColor & 0xFF;
// Compute the difference of the red, green, and blue values
int diffR = abs(currR - prevR);
int diffG = abs(currG - prevG);
int diffB = abs(currB - prevB);
// Add these differences to the running tally
movementSum += diffR + diffG + diffB;
// Render the difference image to the screen
pixels[i] = color(diffR, diffG, diffB);
// The following line is much faster, but more confusing to read
//pixels[i] = 0xff000000 | (diffR << 16) | (diffG << 8) | diffB;
// Save the current color into the 'previous' buffer
previousFrame[i] = currColor;
}
// To prevent flicker from frames that are all black (no movement),
// only update the screen if the image has changed.
if (movementSum > 0) {
updatePixels();
println(movementSum); // Print the total amount of movement to the console
}
}
Answers
edit post, highlight code, press ctrl-o to format...
It's ok now. :)
this shouldn't be within draw. this is you creating a new Capture every frame. move it to setup()
lines 40 to 64 aren't even in a method. i don't know what that is about. same with lines 65 onwards.
Thanks for the reply. I tried to do Frame Differencing but with a video. So already have a sketch with a video, and the other one from the library (Fr. Dif.) and then mix those together. But only video plays, but none capture.
do you want Capture though? he library reference says:
"The Capture class grabs frames of video from an attached capture device such as a camera."
Hello again my dear, can you tell me about this? It's one that I did it before a month for rain sketch and added a frame differencing example. So it works only one, and webcamera it's open, but without result (no captures). Please help me!
`import processing.video.*;
Capture video; Drop[] drops = new Drop[500];
void setup() { size(320, 240); for (int i = 0; i < drops.length; i++) { drops[i] = new Drop(); } }
class Drop { float x = random(width); float y = random(-400, -80); float yspeed = random (6, 12); float len = random(10, 20);
void fall() { y = y + yspeed; yspeed = yspeed + 0.1;
}
void show() { stroke(#EEEDF0); line(x, y, x, y+len); } }
void draw() { background (#201F24); for (int i = 0; i < drops.length; i++) { drops[i].fall(); drops[i].show(); } import processing.video.*;
int numPixels; int[] previousFrame; Capture video;
// This the default video input, see the GettingStartedCapture // example if it creates an error video = new Capture(this, width, height);
// Start capturing the images from the camera video.start();
numPixels = video.width * video.height; // Create an array to store the previously captured frame previousFrame = new int[numPixels]; loadPixels(); if (video.available()) { // When using video to manipulate the screen, use video.available() and // video.read() inside the draw() method so that it's safe to draw to the screen video.read(); // Read the new frame from the camera video.loadPixels(); // Make its pixels[] array available
} }`
edit post, highlight code, press ctrl-o to format...
is your input a video from a file or video from a camera?
The first it is from file mp4. The new one it is from file, sketch I done. Here you can see it. [https://www.openprocessing.org/sketch/483954]
But I want to add Capture movie, and don't know how.
(Hope to understand my horrible english)
the Capture class is for getting images from cameras - this is not what you want
there is a video-export library for making movies. https://www.funprogramming.org/VideoExport-for-Processing/
or you can just save the frames to disk and create a video from them later.
ignore the frame-differencing for now.
just get the video playing.
then add saveFrame() to get it saving those frames.
post the code. format it nicely so we can read it.
Than you very much for your advices!
I do not want to make any videos. I would like to play videos and also have a vision, perhaps with a capture ... (?) I tried once with a video mp4, and then with a sketch. Maybe stay to the last one and try with this. Anyway, I'm very confused.
edit post, highlight code, press ctrl-o to format.
we can't fix what we can't read.
Sorry I can't fix it. I tried many times but seems wrong. If you can understanding, it's ok. If not never mind. :)
Ohhhhh! Now it's ok!!! (after many, many times!)
but your first post said
i am confused.
do you want the video in the background with the rain over the top of it?
where does the frame differencing come in?
In this post seems like mine, but I can explain. https://forum.processing.org/two/discussion/16946/movie-read-frame-differencing