2017-07-18 48 views
0

我使用下面的代码获取视频的持续时间,以获得视频长度,如何使用的ffmpeg

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只为所有视频。所以,我怎么能得到的视频长度,请帮助我。

+0

由于'$ duration'包含的'爆炸()'的结果,它_should_是一个数组。做一个'的var_dump($时间)',并检查它包含什么。 –

+0

@MagnusEriksson的var_dump($持续时间)示出了类似这样的 阵列(6){ [0] => 串(10) “持续时间” [1] => 串(3) “00” [2] = > 串(2) “00” [3] => 串(12) “06.52,启动” [4] => 串(18) “0.000000,比特率” [5] => 串( 9) “350 kb/s的” } – Kevin

回答

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是绝对