FFMpeg работает в командной строке, но не на PHP, используя exec ();

Я использую 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'.

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

Спасибо.

Related of "FFMpeg работает в командной строке, но не на PHP, используя exec ();"

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

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

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

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

Я бы, наверное, попытался:

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

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