Capture d'ecran video en Java

Résolu/Fermé
smiley5555 Messages postés 80 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 11 octobre 2013 - 9 juin 2013 à 09:56
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 - 9 avril 2014 à 21:48
Salut tout le monde,

Je suis débutant en Java et j'aimerai savoir comment faire une capture d'écran vidéo d'environ 30 secondes et qui s'enregistre ensuite dans mes images

Merci d'avance pour votre aide.
A voir également:

2 réponses

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
9 juin 2013 à 11:29
Tu peux faire des impressions écrans (très) régulièrement, pour te créer des images les unes à la suite des autres, que tu assembleras ensuite avec un logiciel de montage vidéo. Pour ça tu as la classe Robot.

Remarque : l'enregistrement des images peut être long et décaler la capture d'écran, il pourrait donc être intéressant de ne les enregistrer dans les fichiers qu'une fois toutes les captures faites, ce qui signifie stocker toutes les images en mémoire, c'est donc intéressant pour un nombre réduit d'images, dans ton cas ça devrait suffire.

Voici une première idée :

import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class Test 
{
    public static void main(String[] args) throws Exception
    {
        /////////////////////////////
        //////  CONFIGURATION  //////
        /////////////////////////////

        // Zone de la prise de vue
        Rectangle screenRect = new Rectangle(100,100,500,500);

        // Temps en secondes de la vidéo
        int duree = 5;

        // Nombres d'images par seconde
        int frequence = 10;

        // Début des noms de fichiers (ils seront complétés par _{indice}.png)
        File prefix = new File("C:/test/image");

        /////////////////////////////

        Robot robot = new Robot();

        int max = duree*frequence; // nombre d'images au total
        long delai = 1000/frequence; // temps d'attentes entre deux images (en ms)

        // tableau d'enregistrement des images
        BufferedImage[] images = new BufferedImage[max];

        System.out.println("Début des captures d'images.");

        for (int i=0; i<max; i++)
        {
            // capture de l'image
            images[i] = robot.createScreenCapture(screenRect);

            // attente entre deux images à capturer
            Thread.sleep(delai);
        }

        System.out.println("Fin des captures d'images.");

        // nom générique des images
        String format = String.format("%s_%%0%dd.png", prefix.getAbsolutePath(),String.valueOf(max).length());
        System.out.println("Début d'enregistrement des images --> "+format);

        for (int i=0; i<max; i++)
        {
            // nom spécifique de l'image
            String file = String.format(format, i);

            // enregistrement de l'image
            ImageIO.write(images[i],"png",new File(file));
        }

        System.out.println("Fin d'enregistrement des images.");
    }
}
0
int max = duree*frequence; // nombre d'images au total

Ca veut dire que si duree = 60mins(1h) et que fréquence max = 100fps, je marque donc:

int max = 3600*100;

?
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
9 avril 2014 à 21:48
Ce n'est pas forcément la peine de modifier cette partie du code, il suffit juste de changer les valeurs de durée et fréquence et de laisser le reste du code tel quel.

// Temps en secondes de la vidéo
int duree = 3600;

// Nombres d'images par seconde
int frequence = 100;
0
smiley5555 Messages postés 80 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 11 octobre 2013 22
9 juin 2013 à 14:50
merci de ton aide.
0