2014-01-25 115 views
0

我试图只抓住视频文件的持续时间。为什么我不能str_replace?

我打算使用ffmpeg抓取任意长度的视频文件的确切10个缩略图。 为此,我需要找出拳头的持续时间,然后除以10.做ffmpeg。

结果是一样的。 str_replace不起作用。 结果:

b: [FORMAT] duration=6.048000 [/FORMAT] 
bb: [FORMAT] duration=6.048000 [/FORMAT] 
bbbb: [FORMAT] duration=6.048000 [/FORMAT] 



$_b = array(shell_exec("C:\\ffmpeg\\bin\\ffprobe -v quiet -v fatal -show_format_entry duration $videoFile")); 

$b = $_b[0]; 
echo "b: " .$b . "<br/>"; 
$bb = str_replace("[FORMAT] duration=","",$b); 
echo "bb: " .$bb . "<br/>"; 
$bbbb = str_replace(" [/FORMAT]", "", $bb); 
echo "bbbb: " .$bbbb . "<br/>"; 

//var partsArray = coolVar.split('-'); 



    for($num=1; $num<=3; $num++) 
    { 
     $interval=$num*3; 
     shell_exec("$ffmpeg -i $videoFile -an -ss $interval -s $size $num.jpg"); 
     echo "Thumbnail Created........! - $num.jpg <br />"; 

    } 
    echo "<br/>$num thumbnails Created!"; 

回答

3

使用preg_match_all()代替:

preg_match_all('~(\w+):.*?duration=([\d.]+).*~', $data, $matches); 

,并显示它,你可以使用一个循环:

for ($i=0; $i < count($matches); $i++) { 
    echo $matches[1][$i]. ' : ' . $matches[2][$i] . PHP_EOL; 
} 

输出:

b : 6.048000 
bb : 6.048000 
bbbb : 6.048000 
+0

我觉得这是最好的方法。我认为str_replace不起作用,因为它不是位于[FORMAT]标签之间的实际空间,而是字符代码或其他值。 – SyntaxLAMP