Javascript how to extract frame from video?

后端 未结 1 1943
予麋鹿
予麋鹿 2021-01-02 11:22

Hello I have the following JS code that creates a video from a file input:

Your browser does not support the HTML5 canvas         


        
相关标签:
1条回答
  • 2021-01-02 11:38

    Add a listener on seeked and loadeddata events and set currentTime in the loadeddata event in order to get the correct video.duration. The seeked event will get called and draw your video frame at this moment :

    var video = document.createElement("video");
    
    var canvas = document.getElementById("prevImgCanvas");
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    
    video.addEventListener('loadeddata', function() {
      reloadRandomFrame();
    }, false);
    
    video.addEventListener('seeked', function() {
      var context = canvas.getContext('2d');
      context.drawImage(video, 0, 0, canvas.width, canvas.height);
    }, false);
    
    var playSelectedFile = function(event) {
      var file = this.files[0];
      var fileURL = URL.createObjectURL(file);
      video.src = fileURL;
    }
    
    var input = document.querySelector('input');
    input.addEventListener('change', playSelectedFile, false);
    
    function reloadRandomFrame() {
      if (!isNaN(video.duration)) {
        var rand = Math.round(Math.random() * video.duration * 1000) + 1;
        video.currentTime = rand / 1000;
      }
    }
    <input type="file" accept="video/*" />
    <input type="submit" onClick="reloadRandomFrame()" value="load random frame" /><br/>
    <canvas id="prevImgCanvas">Your browser does not support the HTML5 canvas tag.</canvas>

    The same code in a JSFiddle here

    0 讨论(0)
提交回复
热议问题