如何使用ffmpeg获取视频长度

时间:2017-07-18 06:08:34

标签: php ffmpeg codeigniter-3

我使用以下代码

获取视频的持续时间
if (substr(php_uname(), 0, 7) == "Windows"){            
    $time = exec("{$ffmpeg} -i $path 2>&1 | findstr Duration"); 

    echo $time;
    exit;

    $duration = explode(":", $time);                
    $seconds = ($duration[0] * 3600) + ($duration[1] * 60) + round($duration[2]);   
    $minutes = $seconds/60;
    $real_minutes = floor($minutes);
    $real_seconds = round(($minutes-$real_minutes)*60);
    $length = $real_minutes.':'.$real_seconds;
}

$time会显示Duration: 00:00:06.52, start: 0.000000, bitrate: 350 kb/s之类的输出,但$duration仅显示Array ans $length仅显示所有视频的0:0。那么如何获得视频长度请帮助我。

2 个答案:

答案 0 :(得分:1)

使用此功能可以获得持续时间。传递文件的绝对路径作为参数:

 public static function getDuration($filePath)
{
    exec('ffmpeg -i'." '$filePath' 2>&1 | grep Duration | awk '{print $2}' | tr -d ,",$O,$S);
    if(!empty($O[0]))
    {
        return $O[0];
    }else
    {
        return false;
    }
}

**确保$ filePath是绝对的

答案 1 :(得分:0)

如果您有ffmpeg.exe或已安装使用此功能,因为它对我来说非常好用,我认为对您来说应该是一样的

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];
}

演示

echo getDuration($ input); #input是文件获取持续时间的路径