2016-04-25 85 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' * *將無法在後臺運行。從外殼它將暫停,直到你再次放在前臺。 –