Как заставить shell exec работать в фоновом режиме, пока php продолжается - PullRequest
9 голосов
/ 22 января 2012

У меня ffmpeg есть преобразование видео в файл PHP, и оно работает как надо.Проблема в том, что это может занять до минуты.Я думал, что это может быть легко сделать, но я могу заставить его работать в фоновом режиме, только когда я использую только одну команду (например, однопроходное преобразование без mp4box), как это

exec("nohup " . $ffmpegPath . " -i " . $srcFile . " -f mp4 -vcodec libx264 -crf 27 -s " . $srcWidth . "x" . $srcHeight . " -an -r 20 " . $destFile . ".mp4 > /dev/null 2>&1 &");

Проблема в том, что мне нужноиспользуйте три разные команды для правильного преобразования.До сих пор мои команды выглядели так в файле PHP, и это работает, но с большой задержкой:

exec($ffmpegPath . " -y -i " . $srcFile . " -f mp4 -pass 1 -passlogfile " . $video_pass_log . " -vcodec libx264 -vpre ipod640 -b:v 2M -bt 4M -an " . $destFile . ".mp4");
exec($ffmpegPath . " -y -i " . $srcFile . " -f mp4 -pass 2 -passlogfile " . $video_pass_log . " -vcodec libx264 -vpre ipod640 -b:v 2M -bt 4M -acodec libfaac -ac 2 -ar 44100 -ab 96k " . $destFile . ".mp4");
exec($mp4boxpath . " -tmp /tmp -hint " . $destFile . ".mp4");

Как я могу заставить exec оболочки работать в фоновом режиме, пока PHP продолжается?

1 Ответ

25 голосов
/ 22 января 2012

См. Есть ли способ использовать shell_exec без ожидания завершения команды?

Добавление > /dev/null 2>/dev/null & удалит выходные данные и запустит команду в другом процессе (& создает новый процесс, > и 2> перенаправляет нормальный и вывод ошибок)

...