PHP exec () не работает с ffmpeg - PullRequest
4 голосов
/ 09 марта 2010

Я пытаюсь запустить следующую команду в PHP (в Ubuntu):

<?php
 if (exec("/home/johnboy/ffmpeg/ffmpeg -i test1.mp4 -acodec aac -ab 128kb -vcodec mpeg4 -b 1220kb -mbd 1 -s 320x180 final_video.mov")) 
      { echo "Success"; }
      else { echo "No good"; }

И я всегда получаю ответ «Нет хорошего», и файл не создается.

Интересно, что если я точно так же выполню команду в Shell, она будет работать, без проблем.

Кроме того, когда я запускаю тот же код, что и выше, но заменяю "whoami" вместо ffmpeg, это работает. (Эхо возвращается "Успех")

Есть идеи, почему это не сработает? Благодаря.

Ответы [ 8 ]

4 голосов
/ 27 августа 2010

получите, stderr даст результат

попробовать

ffmpeg -i inputfile [more_params] 2>&1
2 голосов
/ 28 апреля 2011

Используйте это

$ffmpeg = "ffmpeg Installed path";
$flvfile = "source video file with root path";
$png_path " "Destination video file with root path and file type";


exec("$ffmpeg -y -i $flvfile -vframes 1 -ss 00:01:60 
     -an -vcodec png -f rawvideo -s 110x90 $png_path");
2 голосов
/ 09 марта 2010

Может ли пользователь apache / web достичь /home/johnboy/ffmpeg/ffmpeg? То есть, возможно /home/johnboy это 0700 вместо 0755?

Возможно, существуют ли ограничения ресурсов, влияющие на загрузку такой большой программы и всех ее библиотек?

Если вы запустите скрипт на php cli sapi, он будет вести себя правильно? Даже при работе в качестве пользователя apache?

Что показывает strace -ff, когда веб-пользователь apache запускает скрипт php через php cli?

1 голос
/ 17 марта 2010

Могут возникнуть проблемы, если вы захотите выполнить что-то таким образом.
1. Возможно, у вас возникли проблемы с разрешением, у веб-сервера есть ограничение на выполнение некоторых операций в системе. 2. Возможно, ваш путь к файлу неверен.
3. вы можете попытаться использовать shell_exec для выполнения системы.

Во всяком случае, то, что я хотел бы сделать, чтобы моя казнь прошла гладко, Я напишу 2 программы с передачей сообщений между ними, например клиент-серверную программу. Сервер будет ожидать некоторых сообщений от клиента для выполнения какой-либо команды (для всей команды не будет проблем с разрешениями). Все, что вам нужно сделать в своей сети, - это позвонить клиентскому приложению.

Что я подчеркиваю, так это построение некоторого интерфейса из Интернета и системы. Это решило бы много проблем с разрешениями.

надеюсь, что это поможет.

1 голос
/ 09 марта 2010

Вы используете относительные пути к именам файлов. Вы уверены, что выполняете команду в правильном каталоге?

0 голосов
/ 02 августа 2012
<code>$output = shell_exec('/home/person/www/ffmpeg 2>&1');
echo "<pre>$output
";

Обратите внимание на 2> & 1 часть ...

0 голосов
/ 08 февраля 2011

Включите безопасный режим, и он будет работать

0 голосов
/ 09 марта 2010

Функция exec () возвращает только последнюю строку вывода, я подозреваю, что последняя строка этой команды пуста. если вам нужно все содержимое команды, вы должны использовать shell_exec ().

Также отслеживайте, где выполняется команда, попробуйте: print(shell_exec("pwd"));

...