The following is two methods to get the duration either as a colon separated value, or in seconds, of a given media file using FFmpeg.

/**
 * Get duration of media file from ffmpeg
 * @param $file
 * @return bool|string
 */
function getDuration($file){
   $dur = shell_exec("ffmpeg -i ".$file." 2>&1");
   if(preg_match("/: Invalid /", $dur)){
      return false;
   }
   preg_match("/Duration: (.{2}):(.{2}):(.{2})/", $dur, $duration);
   if(!isset($duration[1])){
      return false;
   }
   return $duration[1].":".$duration[2].":".$duration[3];
}
/**
 * Get duration in seconds of media file from ffmpeg
 * @param $file
 * @return bool|string
 */
function getDurationSeconds($file){
   $dur = shell_exec("ffmpeg -i ".$file." 2>&1");
   if(preg_match("/: Invalid /", $dur)){
      return false;
   }
   preg_match("/Duration: (.{2}):(.{2}):(.{2})/", $dur, $duration);
   if(!isset($duration[1])){
      return false;
   }
   $hours = $duration[1];
   $minutes = $duration[2];
   $seconds = $duration[3];
   return $seconds + ($minutes*60) + ($hours*60*60);
}

Leave a Reply