Get HTML5 Video Duration

By  on  

HTML5 video is exciting, if only for the reason that we no longer need Flash or other third party plugins to render media.  We can also create custom controls and displays around the video, and one of those displays should be the duration of the video.  Let me show you how to get and display the video duration!

The JavaScript

video elements have a duration property which represents the number of seconds in the video.  To display the duration in a pretty fashion, you'll need to use parseInt and modulus (%):

// Assume "video" is the video node
var i = setInterval(function() {
	if(video.readyState > 0) {
		var minutes = parseInt(video.duration / 60, 10);
		var seconds = video.duration % 60;

		// (Put the minutes and seconds in the display)

		clearInterval(i);
	}
}, 200);

It's important to use setInterval and check the video's readyState in case the video hasn't loaded by the time you attempt to pull the duration.  parseInt is used to get the minute number and modulus is used to get the second count.

Recent Features

  • By
    Camera and Video Control with HTML5

    Client-side APIs on mobile and desktop devices are quickly providing the same APIs.  Of course our mobile devices got access to some of these APIs first, but those APIs are slowly making their way to the desktop.  One of those APIs is the getUserMedia API...

  • By
    5 HTML5 APIs You Didn’t Know Existed

    When you say or read "HTML5", you half expect exotic dancers and unicorns to walk into the room to the tune of "I'm Sexy and I Know It."  Can you blame us though?  We watched the fundamental APIs stagnate for so long that a basic feature...

Incredible Demos

  • By
    Google-Style Element Fading Using MooTools or jQuery

    Google recently introduced an interesting effect to their homepage: the top left and top right navigation items don't display until you move your mouse or leave the search term box. Why? I can only speculate that they want their homepage as...

  • By
    Sexy Opacity Animation with MooTools or jQuery

    A big part of the sexiness that is Apple software is Apple's use of opacity. Like seemingly every other Apple user interface technique, it needs to be ported to the web (</fanboy>). I've put together an example of a sexy opacity animation technique...

Discussion

  1. alexander farkas

    There are two events you can use instead of an interval

    a) loadedmetadata
    b) durationchange

    Of course you still need to check readyState initially.

    (function(){
    	var video = document.querySelector('video');
    	var onDurationChange = function(){
    		if(video.readyState){
    			//to your thing
    		}
    	};
    
    	video.addEventListener('durationchange', onDurationChange);
    	onDurationChange();
    })();
    
  2. Sin

    You need to divide video duration by 60 to get minutes, then use parseInt with radix 10. We should test if video duration > 0 before our division.

    var minutes = parseInt(video.duration / 60, 10);
  3. Sin

    You need to divide video duration by 60 to get minutes, then use parseInt with radix 10.

    if (video.duration > 0) {
      var minutes = parseInt(video.duration / 60, 10);
      var seconds = video.duration % 60;  
    }
  4. Tune

    David,

    You forgot to divide the duration (seconds) by 60 to get minutes:

    var minutes = parseInt(video.duration / 60, 10);
    

    Thanks for the great articles!

  5. Hristo Chakarov

    Since when (and on which platforms) setInterval passes the interval ID as argument to the callback function?

  6. HTML5 video is really great, gone are the days struggling with Flash codes and easily display our videos. Thanks for the JS code.

  7. Ron

    Thanks for the code! What if I want also to get the hours and display them as a HH:mm:ss format accordingly?

  8. I m trying to buid the video using jquery. Please help to fetch the video duration before loaded

    var video=$('');    				
    var source= $('');
    $(source).appendTo(video);
    $(source).attr('src',php.mp4);
    $(source).attr('type','video/mp4');	
    //var d=	$(video).duration;
    var d=document.querySelector('video').duration;
    console.log(d);
    
  9. You could just use the javascript while function…

     while (true) {
     if (video.readyState) {
      //blabla code
      break;
     }
     //code to execute if not accomplished
    }
    

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!