2014-01-25 6 views
0

나는 비디오 파일의 지속 시간 만 잡으려고합니다.왜 내가 str_replace 할 수 없습니까?

저는 ffmpeg를 사용하여 비디오 파일의 길이에 관계없이 정확히 10 개의 미리보기 이미지를 캡처하려고합니다. 이것을 위해 나는 주먹을 찾아야하고 ffmpeg를하기 위해 10으로 나눌 필요가있다.

결과는 동일합니다. 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() :

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

나는이 생각

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

그리고 그것을 표시, 당신은 루프를 사용할 수 있습니다 가장 좋은 방법입니다. str_replace는 [FORMAT] 태그 사이의 실제 공간이 아니기 때문에 작동하지 않는다고 생각합니다. 오히려 문자 코드 또는 다른 값입니다. – SyntaxLAMP

관련 문제