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

JavaScript Discussion :

Extraire une image à partir d'une vidéo (Projekktor)


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Extraire une image à partir d'une vidéo (Projekktor)
    Bonjour,

    Mon souci est le suivant:

    Comment extraire une image à partir d'une vidéo à un temps bien précis.C'est à dire quand l'utilisateur clique sur une position sur le timeline de la vidéo, je récupère la position puis je stocke l'image correspondante dans un dossier dans mon projet.

    NB: Le player que j'utilise est Projekktor

    J'ai deja fait le code qui me permet de récupérer la position, mais comment obtenir l'image?

    voila l'ensemble de fonctions(getters) de ce player http://www.projekktor.com/docs/api#getters

    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
    <!DOCTYPE HTML>
    <html>
    <head>
        <title>Projekktor - simply mighty video</title>
        <style type="text/css">
        body { background-color: #fdfdfd; padding: 0 20px; color:#000; font: 13px/18px monospace; width: 800px;}
        a { color: #360; }
        h3 { padding-top: 20px; }
        </style>
     
        <!-- Load player theme -->
        <link rel="stylesheet" href="themes/maccaco/projekktor.style.css" type="text/css" media="screen" />
     
        <!-- Load jquery -->
        <script type="text/javascript" src="jquery-1.9.1.min.js"></script>
     
        <!-- load projekktor -->
        <script type="text/javascript" src="projekktor-1.3.09.min.js"></script>
     
    </head>
    <body>
    <video class="projekktor" poster="http://www.projekktor.com/wp-content/manual/intro.png" title="This is Projekktor" width="640" height="385" controls id="player_a">
        <source src="http://www.projekktor.com/wp-content/manual/intro.mp4" type="video/mp4" />
        <source src="http://www.projekktor.com/wp-content/manual/intro.webm" type="video/webm" />
        <source src="http://www.projekktor.com/wp-content/manual/intro.ogv" type="video/ogg" />
    </video>
    <script type="text/javascript">
    /*
    This script is just an example and included to build up the "demo status panel".
    For daily practice installing the player to your site is MUCH simpler and stright forward.
    Please take a look at http://www.projekktor.com/docs/quickinstall
    */
    jQuery(document).ready(function($) {
     
        // two video items we can dynamically inject for testing purposes:
        var videoOne = { 0:{src: 'http://www.youtube.com/watch?v=emvpc0N0WR4', type: 'video/youtube'} }
        var videoTwo = { 0:{src: 'http://www.youtube.com/watch?v=emvpc0N0WR4', type: 'video/youtube'} }
     
        /*********************************************************************
        Some player event listeners to set general status information:
        *********************************************************************/
     
           var seekListener=function(Obj) {   
       $('#mouseclick').html(myPlayer.getPosition())
       //$('#mouseclick').html(myPlayer.getMediaType())
     
       //alert(projekktor('video').getPosition())
        //$('#time').text()
        }
     
     
        /*********************************************************************
          Configure and instantiate the player and
          apply an "onReady" callback function
        *********************************************************************/   
        var myPlayer = projekktor('#player_a', {
        debug: false,
        playerFlashMP4: 'http://www.projekktor.com/wp-content/manual/jarisplayer.swf',
        playerFlashMP3: 'http://www.projekktor.com/wp-content/manual/jarisplayer.swf',   
        plugin_display: {
               logoImage: "yourlogo.png"
        }
        }, function(player) {
     
        // add listeners
        player.addListener('seek', seekListener);
     
     
        });   
    });
    </script>
    <div id="panel">
        <ul class="info">
     
        <li>Mouse click <span id="mouseclick" ></span></li>
     
     
        </ul>
        <div style="clear:both;"></div>
    </div>
    </body>
    </html>

  2. #2
    Membre expérimenté
    Homme Profil pro
    bricoleur par les mots
    Inscrit en
    Avril 2015
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : bricoleur par les mots
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2015
    Messages : 718
    Points : 1 604
    Points
    1 604
    Par défaut
    jour

    il faut passer par un canevas afin de récupéré l'image puis on l'enregistre soit en base 64 ou en ficher par conversion en blob
    Plus vite encore plus vite toujours plus vite.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Meerci beaucoup pour votre réponse.en fait j'ai pas bien saisie ce que vous voulez dire .Pouvez-vous m'expliquez et me donner un exemple!

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    J’ajoute à la réponse de melka one : la méthode de canevas drawImage permet de récupérer une « capture » d’un élément <video>. Il suffit d’avoir une référence sur l’élément en question, le reste est pris en charge par le navigateur.

    Pour convertir en blob, il faut utiliser la méthode toBlob du canevas.

    Voici comment faire en détails :
    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
    // 1. Obtenir une référence sur l’élément <video>
    var player = document.querySelector('#player_a');
     
    // 2. Créer un canevas aux dimensions de la vidéo
    var canvas = document.createElement('canvas');
    canvas.width = player.width;
    canvas.height = player.height;
     
    // 3. Obtenir le contexte de dessin du canevas
    var cx = canvas.getContext('2d');
     
    // 4. Capturer l’image actuelle de la vidéo
    cx.drawImage(player, 0, 0, canvas.width, canvas.height);
     
    // 5. Convertir l’image capturée en fichier, et créer un lien vers ce fichier
    canvas.toBlob(function (blob) {
      var a = document.createElement('a');
      a.href = URL.createObjectURL(blob);
      a.target = '_blank';
      a.textContent = 'Voir l’image capturée';
      document.body.appendChild(a);
    });
    C’est basique mais ça te donne une idée de comment faire. Reste à trouver comment :
    capturer un instant spécifique de la vidéo
    contourner les problèmes de sécurité avec les vidéos provenant d’un autre domaine (voir https://developer.mozilla.org/fr/doc..._CORS_activees)
    envoyer les captures vers le serveur

    Reviens nous dire comment tu progresses
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    J'ai bien essayé ce code mais rien n'est changé :/
    j'ai associé votre code à l'évenement "seek" (il se déclenche quand on clique su une position dans le timeline de la 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
    <!DOCTYPE HTML>
    <html>
    <head>
        <title>Projekktor - simply mighty video</title>
        <style type="text/css">
        body { background-color: #fdfdfd; padding: 0 20px; color:#000; font: 13px/18px monospace; width: 800px;}
        a { color: #360; }
        h3 { padding-top: 20px; }
        </style>
     
        <!-- Load player theme -->
        <link rel="stylesheet" href="themes/maccaco/projekktor.style.css" type="text/css" media="screen" />
     
        <!-- Load jquery -->
        <script type="text/javascript" src="jquery-1.9.1.min.js"></script>
     
        <!-- load projekktor -->
        <script type="text/javascript" src="projekktor-1.3.09.min.js"></script>
     
    </head>
    <body>
    <video class="projekktor" poster="http://www.projekktor.com/wp-content/manual/intro.png" title="This is Projekktor" width="640" height="385" controls id="player_a">
        <source src="http://www.projekktor.com/wp-content/manual/intro.mp4" type="video/mp4" />
        <source src="http://www.projekktor.com/wp-content/manual/intro.webm" type="video/webm" />
        <source src="http://www.projekktor.com/wp-content/manual/intro.ogv" type="video/ogg" />
    </video>
    <script type="text/javascript">
    /*
    This script is just an example and included to build up the "demo status panel".
    For daily practice installing the player to your site is MUCH simpler and stright forward.
    Please take a look at http://www.projekktor.com/docs/quickinstall
    */
    jQuery(document).ready(function($) {
     
        // two video items we can dynamically inject for testing purposes:
        var videoOne = { 0:{src: 'http://www.youtube.com/watch?v=emvpc0N0WR4', type: 'video/youtube'} }
        var videoTwo = { 0:{src: 'http://www.youtube.com/watch?v=emvpc0N0WR4', type: 'video/youtube'} }
     
        /*********************************************************************
        Some player event listeners to set general status information:
        *********************************************************************/
     
           var seekListener=function(Obj) {    
       $('#mouseclick').html(myPlayer.getPosition())
    //******************Votre code******************
        // 1. Obtenir une référence sur l’élément <video>
    var player = document.querySelector('player_a');
     
    // 2. Créer un canevas aux dimensions de la vidéo
    var canvas = document.createElement('canvas');
    canvas.width = player.width;
    canvas.height = player.height;
     
    // 3. Obtenir le contexte de dessin du canevas
    var cx = canvas.getContext('2d');
     
    // 4. Capturer l’image actuelle de la vidéo
    cx.drawImage(player, 0, 0, canvas.width, canvas.height);
     
    // 5. Convertir l’image capturée en fichier, et créer un lien vers ce fichier
    canvas.toBlob(function (blob) {
      var a = document.createElement('a');
      a.href = URL.createObjectURL(blob);
      a.target = '_blank';
      a.textContent = 'Voir l’image capturée';
      document.body.appendChild(a);
    });
        }
     
     
        /*********************************************************************
          Configure and instantiate the player and
          apply an "onReady" callback function
        *********************************************************************/    
        var myPlayer = projekktor('#player_a', {
        debug: false,
        playerFlashMP4: 'http://www.projekktor.com/wp-content/manual/jarisplayer.swf',
        playerFlashMP3: 'http://www.projekktor.com/wp-content/manual/jarisplayer.swf',    
        plugin_display: {
               logoImage: "yourlogo.png"
        }, controls: true,
        addplugins: ['controlbar']
        }, function(player) {
     
        // add listeners
        player.addListener('seek', seekListener);
        //$('#player_a').addEventListener('mouseup', mouseUpListener);
        // player dom id
        $('#playerid').html(player.getId());
     
     
        });    
    });
    </script>
    <div id="panel">
        <ul class="info">
     
        <li>Mouse click <span id="mouseclick" ></span></li>
     
        </ul>
     
     
        <div style="clear:both;"></div>
    </div>
     
     
    </body>
    </html>

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    j'ai trouvé une autre solution similaire et ça marche, mais le probleme c'est que dès que je rajoute mon code de projekktor ça marche plus je ne sais pas pourquoi !!
    j'ai pris le code de ce lien : http://isithackday.com/videograbber/
    voilà le code:
    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
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    <!DOCTYPE HTML>
    <html>
    <head>
        <title>Projekktor - simply mighty video</title>
        <style type="text/css">
        body { background-color: #fdfdfd; padding: 0 20px; color:#000; font: 13px/18px monospace; width: 800px;}
        a { color: #360; }
        h3 { padding-top: 20px; }
        </style>
     
        <!-- Load player theme -->
        <link rel="stylesheet" href="themes/maccaco/projekktor.style.css" type="text/css" media="screen" />
     
        <!-- Load jquery -->
        <script type="text/javascript" src="jquery-1.9.1.min.js"></script>
     
        <!-- load projekktor -->
        <script type="text/javascript" src="projekktor-1.3.09.min.js"></script>
     
    </head>
    <body>
    <div id="video">
    <video class="projekktor" poster="http://www.projekktor.com/wp-content/manual/intro.png" title="This is Projekktor" width="640" height="385" controls id="player_a">
        <source src="http://www.projekktor.com/wp-content/manual/intro.mp4" type="video/mp4" />
        <source src="http://www.projekktor.com/wp-content/manual/intro.webm" type="video/webm" />
        <source src="http://www.projekktor.com/wp-content/manual/intro.ogv" type="video/ogg" />
    </video>
    </div>
    <div id="canvas">
      <h2>Preview (click to store images below):</h2>
      <canvas></canvas>
    </div>
    <div id="save">
      <h2>Your saved images:</h2>
      <ul></ul>
    </div>
    <script type="text/javascript">
    /*
    This script is just an example and included to build up the "demo status panel".
    For daily practice installing the player to your site is MUCH simpler and stright forward.
    Please take a look at http://www.projekktor.com/docs/quickinstall
    */
    jQuery(document).ready(function($) {
     
        // two video items we can dynamically inject for testing purposes:
        var videoOne = { 0:{src: 'http://www.youtube.com/watch?v=emvpc0N0WR4', type: 'video/youtube'} }
        var videoTwo = { 0:{src: 'http://www.youtube.com/watch?v=emvpc0N0WR4', type: 'video/youtube'} }
     
        /*********************************************************************
        Some player event listeners to set general status information:
        *********************************************************************/
     
           var seekListener=function(Obj) {    
       $('#mouseclick').html(myPlayer.getPosition())
     
     
        }
     
     
        /*********************************************************************
          Configure and instantiate the player and
          apply an "onReady" callback function
        *********************************************************************/    
        var myPlayer = projekktor('#player_a', {
        debug: false,
        playerFlashMP4: 'http://www.projekktor.com/wp-content/manual/jarisplayer.swf',
        playerFlashMP3: 'http://www.projekktor.com/wp-content/manual/jarisplayer.swf',    
        plugin_display: {
               logoImage: "yourlogo.png"
        }, controls: true,
        addplugins: ['controlbar']
        }, function(player) {
     
        // add listeners
        player.addListener('seek', seekListener);
     
     
     
        });    
     var v = document.querySelector('video'),
          n = document.querySelector('source').src.replace(/.*\/|\..*$/g,''),
          c = document.querySelector('canvas'),
          save = document.querySelector('#save ul'),
          ctx = c.getContext('2d');
     
      v.addEventListener('loadedmetadata',function(ev){
     
        var ratio = v.videoWidth/v.videoHeight,
            w = 400,
            h = parseInt(w / ratio, 10),
            time = 0,
            img = null,
            li = null;
     
        c.width = w;
        c.height = h + 40;
     
        v.addEventListener('timeupdate',function(ev){
          if(v.paused){
            ctx.fillStyle = 'rgb(0, 0, 0)';
            ctx.fillRect(0, 0, w, h);
            ctx.drawImage(v, 0, 40, w, h);
            ctx.font = '20px Calibri';
            ctx.fillStyle = 'lime';
            ctx.fillText(n, 5, 20);
            time = format(v.currentTime);
            ctx.fillStyle = 'white';
            ctx.fillText(time, 395 - ctx.measureText(time).width, 20);
          }
        },false);
     
        c.addEventListener('click',function(ev){
          li = document.createElement('li');
          img = document.createElement('img');
          li.appendChild(img);
          save.appendChild(li);
          img.src = ctx.canvas.toDataURL('image/png');
        },false);
     
      },false);
     
      function format(time){
        var hours = parseInt((time / 60 / 60) % 60, 10),
            mins = parseInt((time / 60) % 60, 10),
            secs = parseInt(time, 10) % 60,
            hourss = (hours < 10 ? '0' : '') + parseInt(hours, 10) + ':',
            minss = (mins < 10 ? '0' : '') + parseInt(mins, 10) + ':',
            secss  = (secs < 10 ? '0' : '') +(secs % 60),
            timestring = ( hourss !== '00:' ? hourss : '' ) + minss + secss;
        return timestring;
      };
    });
    </script>
    <div id="panel">
        <ul class="info">
     
        <!-- <li>Mouse click <span id="mouseclick" ></span></li> -->
     
        </ul>
     
     
        <div style="clear:both;"></div>
    </div>
     
     
    </body>
    </html>

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

Discussions similaires

  1. Chargement d'une image à partir d'une vidéo
    Par DAUDET78 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 20/04/2012, 19h41
  2. Saisir une image à partir d'une photo ou d'une vidéo
    Par lohengrin56 dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 07/07/2009, 16h17
  3. Réponses: 7
    Dernier message: 07/07/2008, 11h18

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