IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multimédia Java Discussion :

[JMF] Récupération des frames d'une vidéo


Sujet :

Multimédia Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut [JMF] Récupération des frames d'une vidéo
    je veux savoir comment je peux découper une vidéo en images avec la jmf.
    plus précisemment je veux générer les séquences d'images qui constituent une vidéo.

  2. #2
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    salut,
    ça m'a pris trop de temps mais en fin ça marche très bien.
    voici le code qui permet d'en extraire toutes le images d'une vidéo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     /*
    Code écrit par Mehdiing
    Avant d'éxécuter le code vous devriez installer le package JMF.
    Ce code ne marche que pour les médias de format AVI.
     */
     
     
    import javax.media.*;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.FileOutputStream;
    import javax.media.control.FrameGrabbingControl;
    import javax.media.control.FramePositioningControl;
    import javax.media.format.VideoFormat;
    import javax.media.util.BufferToImage;
     
     
     
     
    public class Video_Images implements  ControllerListener{
     
      Buffer buf = null;
      Image img = null;
      BufferToImage btoi = null;
      private Player player = null;
     
     
    //Constructeur
    public Video_Images(String a)
    {
    super();
        try
        {
        /*La création du lecteur et le chargement du fichier à lire.*/
        player = Manager.createPlayer( new MediaLocator(a) );
        /*L'ajout d'un écouteur sur le player pour pouvoir gérer les évenements
         de ce dernier*/
        player.addControllerListener( this ) ;
        /*Cette fonction permet au player d'acquérir toutes les informations et
         toutes les ressources qui lui sont nécessaires sur le média*/
        System.out.println("Acquésition des ressources et des informations média en cours.");
        System.out.println("Patientez S'il vous plait.");    
        player.realize();
        }
        catch (Exception e)
        {
        /*Traitement des erreurs qui peuvent survenir lors de la création du lecteur.*/
        System.out.println("Error creating player");
        return;
        }
    }
     
    /*On implimente la fonction controllerUpdate de la classe ControllerListener qui nous permet
       de gérer les évenemnts du player.*/
    public void controllerUpdate( ControllerEvent ce )
    {
      /*
       une fois les ressources et les informations nécessaires pour le média sont reconnus
       on passe au traitement.*/
    if ( ce instanceof RealizeCompleteEvent )
    {
        int NomImage = 1;
        int dest;
        FramePositioningControl fpc;
        FrameGrabbingControl fgc;
        Time duration = player.getDuration();
        int totalFrames = FramePositioningControl.FRAME_UNKNOWN;
        fpc = (FramePositioningControl) player.getControl("javax.media.control.FramePositioningControl");
        if (fpc == null)
        {
          System.out.println("Le média ne supporte pas les FramePositioningControl.");
        }
        else
        {
            /*
            On calcul le nombre d'images dans le média.
            */
          totalFrames = fpc.mapTimeToFrame(duration);
          System.out.println("Nombre total des images dans le média : " + totalFrames);
     
          /*
          boucle de parcours des images de le média.
           */
          while (NomImage <= totalFrames)
          {
            /*
             La fonction skip nous permet d'avancer dans les images par exemple si 
             le player pointe sur l'image 45 de le média et on fait dest = fpc.skip(10);
             le player pointera sur l'image 55.
             Pour la fonction seek on peut accéder directement à l'image qu'on désire
             par exemple quelque soit l'image sur laquelle pointe le player et on fait
             dest = fpc.seek(10) le player pointera sur l'image 10.
             */
            dest = fpc.skip(1);//avec dest = fpc.seek(NomImage); ça marche aussi.
            /*
            On capture l'image pointé par le player.     
             */
            fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
            /*
            On met l'image dans un buffer.
             */
            buf = fgc.grabFrame();
            /*
             On convertit l'image dans le buffer.
             */
            btoi = new BufferToImage( (VideoFormat) buf.getFormat());
            img = btoi.createImage(buf);
            /*
    Ici vous pouvez soit enregistrez l'image ou bien l'afficher dans un JPanel ...
    je vous laisse e choix.
    */
     
            System.out.println("Image " + NomImage + "extraite");
            NomImage = NomImage + 1;
          }
        }
      }
    }
     
    /*La fonction main.
     N'oubliez pas de changer le chemin de la video.
     */
    public static void main(String[] args)
    {
      new Video_Images("file:C:\\video.avi" );
    }
    }

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Mercibeaucoup au nom de ceux qui pourront réutiliser ton travail par la suite (même si personellement, pour l'instant je n'en ais aucunement l'utilité)...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    Pour l'utilité, crois moi c'est vraiment très utile.
    car ça simplifie beaucoup la tâche de traitement de la vidéo.
    avec ça en peut aider à la détection de mouvement, on applique des filtres aux vidéos : détection de contours, transformation niveaux de gris...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    hey dis donc !
    Moi c'est exactement l'inverse que je veux faire ?
    vous pourriez m'aider ?

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    bon tu peux trouver le code sur le site de sun.
    ce code te permet de générer une vidéo .mov(quicktime movie)
    voilà le lien
    http://java.sun.com/products/java-me...esToMovie.html
    il existe un autre dans le même site celui ci te permet de générer un fchier .avi
    http://forum.java.sun.com/thread.jsp...sageID=2394574

  7. #7
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 112
    Points : 74
    Points
    74
    Par défaut
    J'avoue merci beaucoup pour le code, il me fait beaucoup progresser dans mon projet !!
    Cependant, reste un hic :
    ma variable fpc est null, le programme m'indiquant alors
    "Le média ne supporte pas les FramePositioningControl."
    Sachant que ma vidéo est en .mpg et que JMF la supporte!!

    Quelqu'un a-t-il une idée de l'origine du problème ??

    Merci d'avance.

  8. #8
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 48
    Points
    48
    Par défaut
    merci
    Mais le problème qu'il me signale des erreurs et puisque je suis débutante je ne sais pas quoi faire ou d'ou vient le problème j'ai essayé avec un video.avi::

    Unable to handle format: MJPG, 320x240, FrameRate=7.4, Length=230400 0 extra bytes
    Exception in thread "JMF thread: SendEventQueue: com.sun.media.content.unknown.Handler" java.lang.NullPointerException
    at PFE.Video_Images.controllerUpdate(Video_Images.java:129)
    at com.sun.media.BasicController.dispatchEvent(BasicController.java:1254)
    at com.sun.media.SendEventQueue.processEvent(BasicController.java:1286)
    at com.sun.media.util.ThreadedEventQueue.dispatchEvents(ThreadedEventQueue.java:65)
    at com.sun.media.util.ThreadedEventQueue.run(ThreadedEventQueue.java:92)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 92
    Points : 77
    Points
    77
    Par défaut
    Unable to handle format: MJPG, 320x240, FrameRate=7.4, Length=230400 0 extra bytes
    Ca veut dire que JMF ne sait pas lire ce format de vidéo. JMF supporte très peu de format.

  10. #10
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par anaranjado Voir le message
    Ca veut dire que JMF ne sait pas lire ce format de vidéo. JMF supporte très peu de format.
    j'ai essayé plusieurs type de vidéo avi mpg mais c tjrs le meme probleme merci

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 23
    Points
    23
    Par défaut
    j ai le même probleme que nadou114, mon lecteur ne supporte que les MP3, jmf ne supporte pas tous les formats, comment remédier à ce problème,en fait j'ai posté cette question plusieurs fois mais mon problème reste le même

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    cc mehdi c amira, dans le code qui décompose la vidéo en images, vous avez écris dans un commentaire( ici je vous laisse le choix si vous voulez enregistrer ou affichez les images) j'ai essayé de les enregistrer et les afficher par la suite mais sa n'a pas marché. si vous pouvez me dire comment je dois faire

  13. #13
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    Citation Envoyé par mizmiz Voir le message
    cc mehdi c amira, dans le code qui décompose la vidéo en images, vous avez écris dans un commentaire( ici je vous laisse le choix si vous voulez enregistrer ou affichez les images) j'ai essayé de les enregistrer et les afficher par la suite mais sa n'a pas marché. si vous pouvez me dire comment je dois faire
    Bonjour,

    Pour enregistrer les images ajoute ce bout de code après la ligne 107

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImageIO.write(img, "png", "c:\\monimage"+NomImage+".png");

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    j'ai essayé ce bout de code mais une erreur s'affiche sur cette meme ligne. voici l'erreur:
    (The method write(RenderedImage, String, ImageOutputStream) in the type ImageIO is not applicable for the arguments (Image, String, String)

  15. #15
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    423
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 423
    Points : 303
    Points
    303
    Par défaut
    Pardon,
    Il faut convertir d'abord img de Image vers BufferedImage (rajoute cette méthode dans la classe)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private BufferedImage toBufferedImage(Image src) {
            int w = src.getWidth(null);
            int h = src.getHeight(null);
            int type = BufferedImage.TYPE_INT_RGB;  // other options
            BufferedImage dest = new BufferedImage(w, h, type);
            Graphics2D g2 = dest.createGraphics();
            g2.drawImage(src, 0, 0, null);
            g2.dispose();
            return dest;
        }
    et le 3ème argument doit être un fichier et non une chaine de caractère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImageIO.write(toBufferedImage(img), "png", new File("c:\\monimage"+NomImage+".png"));

  16. #16
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    merci d'avoir répondu, ouii j'ai remarqué que l'image n'était pas convertis en bufferImage, j'ai essayé mais j'ai toujours un problème d'affichage. de toute façon c'est rien je vais le régler. En ce moment je suis entrain de développer une application de détection de mouvement avec le flux optique. et je voudrais savoir si vous avez travaillez avec!!

  17. #17
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjr,
    Mais les images ne seront pas enregistré dans le repertoire C:\
    pourquoi!!!?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VB6: Récupération des meta d'une page HTML avec HTMLDocument
    Par Matounet dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/09/2011, 07h55
  2. calculer la moyenne des frames d'une vidéo
    Par jad777 dans le forum C++Builder
    Réponses: 1
    Dernier message: 26/10/2008, 11h32
  3. Extraction des frames d'une vidéo
    Par jacques_henry dans le forum C++
    Réponses: 6
    Dernier message: 05/01/2006, 18h46
  4. Récupération des paramètres d'une requête
    Par TomPad dans le forum Access
    Réponses: 10
    Dernier message: 16/06/2005, 15h11
  5. Récupération des paramètres avec une procedure stockée
    Par samlerouge dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2004, 22h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo