使用FFmpeg获取视频时长的PHP函数

3
我已经安装了FFMpeg并且知道它可以正常工作,但是我想通过PHP从flv视频中获取持续时间,但是当我使用以下代码时:
function mbmGetFLVDuration($file){
/*  
* Determine video duration with ffmpeg   
* ffmpeg should be installed on your server.  
*/  

//$time = 00:00:00.000 format   
$ffmpeg = "../ffmpeg/ffmpeg";

$time =  exec("$ffmpeg -i $file 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");   

$duration = explode(":",$time);   
$duration_in_seconds = $duration[0]*3600 + $duration[1]*60+ round($duration[2]);   

return $duration_in_seconds;   

}

and:

$duration = mbmGetFLVDuration('http://www.videoaddsite.com/videos/intro.flv'); echo $duration;

我的输出是220。这个视频的长度是3:40。请问有谁能告诉我我做错了什么,或者是否可以使用其他方法?


您将在几秒钟内获得输出。220秒= 3:40分钟。 - Deadlock
3个回答

3

我认为没有问题。220秒等于3分40秒。

要获得分钟和秒数,请使用以下转换:

<?php
$seconds = 220;
$minutes = $seconds/60;
$real_minutes = floor($minutes);
$real_seconds = round(($minutes-$real_minutes)*60);
?>

$real_minutes 将会是 3,$real_seconds 将会是 40。


哈,现在我感觉有点傻。我一直工作得太多了,往往会忽略一些小细节。虽然还没有尝试过,但非常感谢你! - keithp

0

以下代码对我有效

$file='http://techslides.com/demos/sample-videos/small.mp4';

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

echo $seconds + ($minutes*60) + ($hours*60*60);

参考资料


0
$ffmpeg = "../ffmpeg/ffmpeg";

$time = exec("$ffmpeg -i $file 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,//");   

$duration = explode(":", $time);   
$duration_in_seconds = ($duration[0] * 3600) + ($duration[1] * 60) + round($duration[2]);   

return $duration_in_seconds;   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接