Проблемы с exec ():
Я бы посоветовал вам проверить, что exec()
возвращает:
echo exec(...);
Конечно, это можетбывает, что ffmpeg
просто нет в вашем PATH
.В этом случае exec()
четко заявит об этом, и вам может потребоваться указать абсолютный путь к ffmpeg
, то есть:
Linux:
exec("/path/to/ffmpeg ...");
Windows:
exec("c:\\path\\to\\ffmpeg ...");
Фоновая задача:
Другая проблема заключается в том, что ffmpeg
может работать довольно долго, что можетпривести к таймауту.Чтобы избежать этой проблемы, вы можете выполнить ffmpeg
в фоновом режиме, добавив &
в конце вашей команды, или, для Windows, добавив cmd /C
перед вашей фактической командой:
Linux:
exec("ffmpeg -i test.mp4 -ab 96k -b:v 700k -ar 44100 -s 640x480 test.webm &");
Windows:
exec("cmd /C ffmpeg -i test.mp4 -ab 96k -b:v 700k -ar 44100 -s 640x480 test.webm");
В этом случае exec()
немедленно вернется, оставив ffmpeg()
в фоновом режиме.ffmpeg()
процесс прекратится, как только завершится его выполнение.Но, конечно, вам нужно реализовать какой-то механизм мониторинга, если вы хотите уведомить пользователя о том, что преобразование завершено и преобразованный файл доступен для загрузки.