Je travaille sur un projet javaCV et j'ai besoin d'afficher et d'enregistrer ce que la webcam capture. Le problème est que la vidéo de sortie dans mon code a une vitesse plus élevée que le réel. J'ai essayé de changer le frameRate du FrameGrabber et du FrameRecorder mais ce n'est pas la solution.Vitesse de sortie de la vidéo avec FrameGrabber JavaCV
Je vous serais reconnaissant si quelqu'un pouvait me aider: Voici mon code:
public static void main(String[] args) throws Exception, org.bytedeco.javacv.FrameGrabber.Exception, org.bytedeco.javacv.FrameRecorder.Exception{
// Display dimension
int ancho = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
int alto = java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
int screenNumber = CanvasFrame.getScreenDevices().length > 1 ? 1 : 0;
FrameGrabber grabber = FrameGrabber.createDefault(0);
grabber.setFrameRate(24);
FrameRecorder recorder = FrameRecorder.createDefault("output.avi", ancho, alto);
recorder.setFrameRate(24);
recorder.start();
// CanvasFrame is a JFrame containing a Canvas component, which is hardware accelerated.
// It can also switch into full-screen mode when called with a screenNumber.
// We should also specify the relative monitor/camera response for proper gamma correction.
//Fullscreen mode
CanvasFrame frame = new CanvasFrame("Prueba Webcam", CanvasFrame.getDefaultGamma()/grabber.getGamma());
DisplayMode displaymode = frame.getDisplayMode(screenNumber);
frame.dispose();
CanvasFrame frame2 = new CanvasFrame("Prueba 2", screenNumber, displaymode,CanvasFrame.getDefaultGamma()/grabber.getGamma());
while (frame2.isVisible()) {
// Exit with "Esc"
frame2.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) { // handler
if(ke.getKeyCode() == ke.VK_ESCAPE) {
try {
buildResults();
System.out.println("escaped ?");
System.exit(0);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
System.out.println("not escaped");
}
}
});
//Display and record image
frame2.showImage(grabber.grab());
recorder.record(grabber.grab());
}
frame2.dispose();
recorder.stop();
grabber.stop();
}
}