我有上传脚本来处理文件上传,然后调用exec(ffmpeg -i ......
我打电话给ffmpeg 3次.一个转换为mp4,一个转换为wemb,一个转换为缩略图.
问题是,如果调查员上传了他的所有镜头,他不想坐在那里等待它转换,然后才能做其他事情.那么如何发送3个命令然后退出脚本呢?
我还想运行exec(rm -r/path/to/original)以便原始视频被删除,但显然我必须等待转换才能完成才能运行
您可以在命令后使用&符号在后台运行它并立即返回提示符(控件).
我建议创建一个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)