Quantcast
Channel: Library Questions - Processing 2.x and 3.x Forum
Viewing all articles
Browse latest Browse all 2896

Problems with saving every frame from videostream with dropping framerate

$
0
0

I got a sketch like below. I want to save every frame from the video but the framerate is dropping and processing only process every fourth frame from the videostream and saves it with saveFrame.

How can I process and save every frame? How can I halt the next frame from the videostream until the frame is processed and saved?

Below is a print of the videoFrame from the videostream and the frame that is saved. As you can see only about every fourth frame is processed and saved

VideoFrame: 0 FRAMERATE: 18.936382
savedFrame: 1
VideoFrame: 1 FRAMERATE: 22.489614
VideoFrame: 2 FRAMERATE: 22.489614
VideoFrame: 3 FRAMERATE: 22.489614
VideoFrame: 4 FRAMERATE: 22.489614
VideoFrame: 5 FRAMERATE: 22.489614
VideoFrame: 6 FRAMERATE: 22.489614
savedFrame: 7
VideoFrame: 7 FRAMERATE: 20.717686
VideoFrame: 8 FRAMERATE: 20.717686
VideoFrame: 9 FRAMERATE: 20.717686
VideoFrame: 10 FRAMERATE: 20.717686
savedFrame: 11
VideoFrame: 11 FRAMERATE: 19.62102
VideoFrame: 12 FRAMERATE: 19.62102
savedFrame: 13
VideoFrame: 13 FRAMERATE: 18.655874
VideoFrame: 14 FRAMERATE: 18.655874
VideoFrame: 15 FRAMERATE: 18.655874
savedFrame: 16
VideoFrame: 16 FRAMERATE: 17.817186
VideoFrame: 17 FRAMERATE: 17.817186
VideoFrame: 18 FRAMERATE: 17.817186
VideoFrame: 19 FRAMERATE: 17.817186
savedFrame: 20
VideoFrame: 20 FRAMERATE: 17.098238
VideoFrame: 21 FRAMERATE: 17.098238
savedFrame: 22
VideoFrame: 22 FRAMERATE: 16.579494
VideoFrame: 23 FRAMERATE: 16.579494

Heres my sketch:

import processing.video.*;

Movie m;

int res = 5;
PVector loc;
int frameCounter = 0;
boolean export = false;
int frame = 0;

void settings() {
  size(960, 540);
}

void setup() {
  m = new Movie(this, "video.mp4");
  loc = new PVector(0, 0);
  m.play();
  m.loop();

  background(255);
  ellipseMode(LEFT);
}

void movieEvent(Movie m) {
  if (m.available()) {
    println("VideoFrame: " + frame + "  FRAMERATE: " + frameRate);
    frame++;
    m.read();
  }
}

void draw() {
  println("savedFrame: " + frame);
  run();
}

void run() {
  for (int i = 0; i <  m.width/res; i++) {
    for (int j = 0; j < m.height/res; j++) {
      loc.x = i*res;
      loc.y = j*res;

      color col = m.pixels[(int)loc.x  + (int)loc.y * m.width];
      noStroke();
      fill(col);
      ellipse(loc.x, loc.y, res, res);
    }
  }

  if (export && frameCounter < 3600) {
    saveFrame("frames/####.png");
    frameCounter++;
  }

  if (frameCounter > 3598) {
    println("EXPORT KLAR");
  }
}

void keyReleased() {
  println("export"+ export + "  frameRate: " + frameRate + " frameCounter: " + frameCounter);
  if (key == 'e') {
    frameCounter = 0;
    println("export"+ export + "  frameRate: " + frameRate);
    export = !export;
  }
}

Viewing all articles
Browse latest Browse all 2896

Trending Articles