FFMpeg работает в командной строке, но не в PHP, используя exec (); - PullRequest
4 голосов
/ 25 февраля 2011

Я использую FFMpeg для скрытия видео, а работает нормально из командной строки .Я использую следующую команду:

ffmpeg -i input.mpg  -vcodec libx264 -b 819200 -s 100x100 -g 15 -bf 3 -b_strategy 1 -coder 1 -qmin 10 -qmax 51 -sc_threshold 40 -flags +loop -cmp +chroma -me_range 16 -me_method hex -subq 5 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -directpred 1 -flags2 +fastpskip -dts_delta_threshold 1 -acodec libfaac -ab 48000 output.m4v

Однако, когда я запускаю команду с помощью PHP exec (), , выходное видео кодируется неправильно, искажается и обрезается .Я использую в PHP следующее:

$output = exec($cmd . ' 2>&1', $output, $return);

Выходные данные $ возвращают успешный код «0».

У кого-нибудь есть предложения?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 25 февраля 2011

Это необычно. Возможно, у вас установлено более одного двоичного файла ffmpeg, и тот, который вызывается пользователем PHP / Apache, отличается от того, который вызывается вашим пользователем из командной строки.

Попробуйте указать полный путь к вашему двоичному файлу ffmpeg (/ usr / bin / ffmpeg или как угодно) внутри exec ().

1 голос
/ 25 февраля 2011

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

  1. написать сценарий оболочки на лету (из PHP), который имеет все правильные аргументы команды (сделать его исполняемым)
  2. выполнить скрипт оболочки (из PHP)
0 голосов
/ 25 февраля 2011

Я бы наверное попробовал:

1) изменить '2> & 1' на '2> & 1 &'

Кроме того, транскодирование может занять некоторое время. Вы уверены, что ждете завершения транскодирования?

...