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
    How to Create a RetroPie on Raspberry Pi – Graphical Guide

    Today we get to play amazing games on our super powered game consoles, PCs, VR headsets, and even mobile devices.  While I enjoy playing new games these days, I do long for the retro gaming systems I had when I was a kid: the original Nintendo...

  • By
    How I Stopped WordPress Comment Spam

    I love almost every part of being a tech blogger:  learning, preaching, bantering, researching.  The one part about blogging that I absolutely loathe:  dealing with SPAM comments.  For the past two years, my blog has registered 8,000+ SPAM comments per day.  PER DAY.  Bloating my database...

Incredible Demos

  • By
    Create a Spinning, Zooming Effect with CSS3

    In case you weren't aware, CSS animations are awesome.  They're smooth, less taxing than JavaScript, and are the future of node animation within browsers.  Dojo's mobile solution, dojox.mobile, uses CSS animations instead of JavaScript to lighten the application's JavaScript footprint.  One of my favorite effects...

  • By
    Highlighter: A MooTools Search & Highlight Plugin

    Searching within the page is a major browser functionality, but what if we could code a search box in JavaScript that would do the same thing? I set out to do that using MooTools and ended up with a pretty decent solution. The MooTools JavaScript Class The...

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!