2016-04-25 38 views
-1

我想在php exec()的背景下执行多个单行命令。我的脚本对视频进行水印并删除原始视频,并将带水印的视频重命名为原始名称。我想在后台运行整个代码。我已经尝试了round()和curly {}大括号,但是在下面的末尾失败了,这是我尝试在后台运行的代码。背景中的多个bash命令

(/usr/bin/ffmpeg -i video.mp4 -i watermark.png -filter_complex 'overlay=10:10' video_watermarked.mp4 && rm -rf video.mp4 && mv video_watermarked.mp4 video.mp4) & 
+1

你有没有得到任何错误? – Quinn

+1

它在后台运行失败的本质是什么? –

+0

检查你的路径。您同时使用了'/ video_watermarked.mp4'和'video_watermarked.mp4'(不带前导斜杠) – Tibrogargan

回答

-1

如果ffmpeg无法访问标准输出,它将自动挂起。

你有两个选择:
nohup /usr/bin/ffmpeg ...会照顾重定向你,并放置的ffmpeg的输出在一个名为nohup.out的

文件或右括号后的参数添加2>&1>/dev/null给exec ()。这会将标准错误和标准错误发送到/ dev/null。

-1

你的命令看起来不错。也许你不喜欢该背景命令仍输出到控制台?在这种情况下重定向输出(注意&>的/ dev/null的在指令结尾):

(/usr/bin/ffmpeg -i video.mp4 -i watermark.png -filter_complex 'overlay=10:10' /video_watermarked.mp4 && rm -rf video.mp4 && mv video_watermarked.mp4 video.mp4) &>/dev/null & 

甚至更​​好,你可能会迫使后台命令其输出追加到一些日志文件:

(/usr/bin/ffmpeg -i video.mp4 -i watermark.png -filter_complex 'overlay=10:10' /video_watermarked.mp4 && rm -rf video.mp4 && mv video_watermarked.mp4 video.mp4) &>>/home/$USER/watermarking.log & 
+0

仅供参考:如果不重定向输出,'ffmpeg' * *将无法在后台运行。从外壳它将暂停,直到你再次放在前台。 –