FFmpeg с PHP вызывает внутреннюю ошибку сервера - PullRequest
1 голос
/ 27 октября 2011

У меня есть PHP-скрипт, который вызывает exec () для конвертации видеофайлов с помощью ffmpeg.Сценарий отлично работает с файлами меньшего размера, но большие файлы, обычно размером около 20 МБ, выдают внутреннюю ошибку сервера 500 после того, как преобразование длится около 45 секунд.

Для max_execution_time установлено значение 600 секунд (10 минут) иМаксимальный размер сообщения и загрузки составляет 1000 МБ.Сервер основан на Unix и не работает в безопасном режиме.

Хотя проблема возникает только при больших размерах, я даже не уверен, что это проблема размера файла.Сценарий будет работать с MOV-файлом размером 12,6 МБ, но не будет работать с MP4-файлом размером 11 МБ.

Ниже приведена строка exec () из моего сценария:

exec('ffmpeg -y -i '.escapeshellarg($uploadFile).' -vcodec libx264 -ab 128k -ac 2 -b 640k -g 300 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -maxrate 10M -bufsize 10M -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 '.$convertFile);

Спасибо!

1 Ответ

1 голос
/ 22 февраля 2012

У меня были похожие проблемы с PHP и тайм-аутами с использованием mod_fcgid и Apache.Кажется, у mod_fcgid есть проблема со сценариями, которые выполняются долгое время, и, несмотря на количество изменений значений тайм-аута, я все равно не мог заставить его играть все время.

Некоторые варианты, которые я нашел дляРешите это:

  1. Не используйте PHP-скрипт - используйте PHP CLI и задание cron
  2. Не используйте mod_fcgid на сайте, который вы используете для кодирования,использовать CGI-оболочку или даже mod_php

Я редактирую это, поскольку нашел очень полезный набор ссылок, которые решили мою проблему:

http://profiles.ysn.com/supportforum/viewtopic.php?f=7&t=283&start=15#p1300

http://www.virtualmin.com/node/19879

Я добавил:

<IfModule !mod_fastcgi.c>
    AddHandler fcgid-script fcg fcgi fpl
    IdleScanInterval 10800
    BusyScanInterval 10800
    ZombieScanInterval 60
</IfModule>

в мой файл fcgid.conf и

IPCConnectTimeout 10800
IdleTimeout 10800
ProcessLifeTime 10800
BusyTimeout 10800

в мой httpd.conf врелевантный <VirtualHost>, перезапустил apache и время ожидания остановилось.

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