通过PHP调用ffmpeg,但不要等待它

swg*_*r14 1 php ffmpeg

我有上传脚本来处理文件上传,然后调用exec(ffmpeg -i ......

我打电话给ffmpeg 3次.一个转换为mp4,一个转换为wemb,一个转换为缩略图.

问题是,如果调查员上传了他的所有镜头,他不想坐在那里等待它转换,然后才能做其他事情.那么如何发送3个命令然后退出脚本呢?

我还想运行exec(rm -r/path/to/original)以便原始视频被删除,但显然我必须等待转换才能完成才能运行

vbe*_*nce 5

您可以在命令后使用&符号在后台运行它并立即返回提示符(控件).

我建议创建一个bash脚本,如:

#!/bin/sh
ffmpeg -i $1 -ab 64k -vb 420k $1.mp4
ffmpeg -i $1 -ab 64k -vb 420k $1.webm
Run Code Online (Sandbox Code Playgroud)

然后从php运行它,如:

system ('myscript.sh tempfile &');
Run Code Online (Sandbox Code Playgroud)

以下示例使用if结构来决定是使用声音还是不使用声音.第一个参数是文件名,如果第二个参数等于0mp4上没有声音,如果第三个参数为零,则webm上没有声音.

#!/bin/sh
if [ $2 -eq 0 ]
then
    ffmpeg -i $1 -an -vb 420k $1.mp4
else
    ffmpeg -i $1 -ab 64k -vb 420k $1.mp4
fi


if [ $3 -eq 0 ]
then
    ffmpeg -i $1 -an -vb 420k $1.webm
else
    ffmpeg -i $1 -ab 64k -vb 420k $1.webm
fi
Run Code Online (Sandbox Code Playgroud)

你可以在PHP中使用它:

system ('myscript.sh ' . $tempfile . ' ' . (0 + $mp4sound) . ' ' . (0 + $webmsound) . ' &');
Run Code Online (Sandbox Code Playgroud)

...但是记住你甚至可以启动一个PHP文件而不是一个shellcript,如:

system ("php converter.php \"$tempfile\" \"$mp4sound\" \"$webmsound\" &');
Run Code Online (Sandbox Code Playgroud)