FFMPEG работает в командной строке.Не в PHP - is_executable () это правда - PullRequest
0 голосов
/ 13 января 2012

Я пытаюсь запустить FFMPEG ( библиотека Windows ) для видео, чтобы создать для него миниатюру. Команды отлично запускаются из команды propmpt, но не работают из PHP. Я дважды проверил свои разрешения, и у пользователя IIS есть полный доступ к каталогу. Кроме того, is_executable() возвращает true в файле. Я уверен, что это не проблема с разрешениями.

Я так же сильно чувствую, что это, вероятно, выход из ситуации, и мне трудно найти здесь правильную комбинацию.

когда я пытался сделать $test = system ($cmd, $returnVal); и повторить $test, оно было пустым (false?).

Я что-то упустил?

PHP-код с тремя различными способами выполнения команды

$ffmpeg = dirname(__FILE__) .'\files\video\ffmpeg.exe';  
echo "<strong>ffmpeg location:</strong> ".$ffmpeg.'<br /><br />';

if (file_exists($ffmpeg)) echo "file_exists() = true<br /><br />";
if (is_executable($ffmpeg)) echo "is_executable() = true<br /><br />";  

//Attempt 1
$cmd = "$ffmpeg -i $video -deinterlace -an -ss $second -t 00:00:16 -r 1 -y -vcodec mjpeg -f mjpeg $image 2>&1";
echo "<strong>Executing</strong>: ".$cmd."<br /><br />";
system   ($cmd, $returnValue);
echo "Return Value: $returnValue<br/><hr /><br />";    

//Attempt 2
$cmd2= escapeshellcmd($cmd);
echo "<strong>Executing</strong>: ".$cmd2."<br /><br />";
system   ($cmd2, $returnValue);
echo "Return Value: $returnValue<br/><hr /><br />";

//Attempt 3        
$cmd3 = str_replace('\\',"\\\\",escapeshellarg($ffmpeg)." -i ".escapeshellarg($video)." -deinterlace -an -ss $second -t 00:00:16 -r 1 -y -vcodec mjpeg -f mjpeg ".escapeshellarg($image)." 2>&1"); 
echo "<strong>Executing</strong>: ".$cmd3."<br /><br />";
system   ($cmd3, $returnValue);
echo "Return Value: $returnValue<br/><hr /><br />";   

RESUTLS (все результаты в -1)

ffmpeg location: C:\www\alphacom\files\video\ffmpeg.exe
file_exists() = true
is_executable() = true

Executing: C:\www\alphacom\files\video\ffmpeg.exe -i C:\www\alphacom\files\video\test_video_ae.avi -deinterlace -an -ss 1 -t 00:00:16 -r 1 -y -vcodec mjpeg -f mjpeg C:\www\alphacom\files\video\test_video_ae.jpg 2>&1
Return Value: -1

Executing: C:^\www^\alphacom^\files^\video^\ffmpeg.exe -i C:^\www^\alphacom^\files^\video^\test_video_ae.avi -deinterlace -an -ss 1 -t 00:00:16 -r 1 -y -vcodec mjpeg -f mjpeg C:^\www^\alphacom^\files^\video^\test_video_ae.jpg 2^>^&1
Return Value: -1

Executing: "C:\\www\alphacom\\files\\video\\ffmpeg.exe" -i "C:\\www\\alphacom\\files\\video\\test_video_ae.avi" -deinterlace -an -ss 1 -t 00:00:16 -r 1 -y -vcodec mjpeg -f mjpeg "C:\\www\\alphacom\\files\\video\\test_video_ae.jpg" 2>&1
Return Value: -1

Executing: \"C:\\www\\alphacom\\files\\video\\ffmpeg.exe\" -i \"C:\\www\\alphacom\\files\\video\\test_video_ae.avi\" -deinterlace -an -ss 1 -t 00:00:16 -r 1 -y -vcodec mjpeg -f mjpeg \"C:\\www\\alphacom\\files\\video\\test_video_ae.jpg\" 2>&1
Return Value: -1

ОБНОВЛЕННЫЙ КОД ОТЛАДКИ

    $cmd = "$ffmpeg -i $video -deinterlace -an -ss $second -t 00:00:16 -r 1 -y -vcodec mjpeg -f mjpeg $image 2>&1";
    echo "<strong>Executing</strong>: ".$cmd."<br /><br />";
    $test = system($cmd, $returnValue);
    echo "Return Value: $returnValue<br/><hr /><br />";    
    var_dump($test);

$test выход NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...