I run FFmpeg on my server using PHP exec()
.
It currently uses 100% of the cpu thread while encoding.
I followed this gude that uses a program called cpulimit to reduce it to 30%.
PHP
$args = "nice -19 cpulimit -l 30 -- ffmpeg -y -i intput.avi -vcodec libx264 -acodec aac -b:a 192k -threads 1 output.mp4"
exec(escapeshellcmd($args));
FFmpeg/PHP works, and it will work with nice
/cpulimit
through the terminal, but after addingnice -19 cpulimit -l 30 --
to the PHP script it no longer works with exec()
.
Output
FFmpeg output returns blank. I'm not able to see the full output, I tried using:
$output = shell_exec($args);
echo "<p>$output</p>"
and
file_put_contents("/var/www/mysite/logs/$output.log", $line . PHP_EOL, FILE_APPEND);
But they return 1 empty line.
Solution
My thought is that www-data runs FFmpeg and nice
/cpulimit
may need root?
How can I get PHP exec()
to work with FFmpeg args and cpulimit?
Or is there an alternative way to limit the usage %?