2014-01-25 134 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