我有我的上傳腳本處理該文件的上傳,然後調用exec(ffmpeg的-i ......ffmpeg的電話,但不要等待它
我打電話ffmpeg的3倍,其中一個轉換到mp4,一個轉換爲wemb,另一個轉換爲縮略圖
問題是,如果調查人員上傳了所有他的素材,他不想坐在那裏等待它轉換,然後他可以做任何事情。我如何發送3個命令,然後退出腳本?
我也想運行exec(rm -r/path/to/original),所以原始視頻被刪除,但顯然我必須wa它可以在轉換完成之前完成
我有我的上傳腳本處理該文件的上傳,然後調用exec(ffmpeg的-i ......ffmpeg的電話,但不要等待它
我打電話ffmpeg的3倍,其中一個轉換到mp4,一個轉換爲wemb,另一個轉換爲縮略圖
問題是,如果調查人員上傳了所有他的素材,他不想坐在那裏等待它轉換,然後他可以做任何事情。我如何發送3個命令,然後退出腳本?
我也想運行exec(rm -r/path/to/original),所以原始視頻被刪除,但顯然我必須wa它可以在轉換完成之前完成
您可以在命令後面使用&符號在後臺運行它,並立即獲得提示(控制)。
我建議創建一個bash腳本,如:
#!/bin/sh
ffmpeg -i $1 -ab 64k -vb 420k $1.mp4
ffmpeg -i $1 -ab 64k -vb 420k $1.webm
然後從喜歡PHP運行:
system ('myscript.sh tempfile &');
下面的示例使用if
結構來決定是否使用聲音或沒有。第一個參數是文件名,如果第二個參數等於0
則mp4上沒有聲音,如果第三個參數爲零,則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
您可以使用它從PHP這樣的:
system ('myscript.sh ' . $tempfile . ' ' . (0 + $mp4sound) . ' ' . (0 + $webmsound) . ' &');
...但要記住,你甚至可以啓動PHP文件,而不是一個shell腳本,如:
system ("php converter.php \"$tempfile\" \"$mp4sound\" \"$webmsound\" &');
也許您可以將執行轉換的代碼移動到由cron作業調用的腳本中。
例如,用戶可以將視頻上傳到目錄,也可以將記錄插入包含所有未轉換視頻的數據庫表中。
然後cron作業每x分鐘運行一次,檢查數據庫中是否有未轉換的視頻,然後轉換它們。完成之後,腳本可以刪除原始視頻並從數據庫中刪除該行。
不知道它什麼意義,什麼我想的比你做一切事情立刻。 添加少許技巧來緩解面前的痛苦
嘗試在一頁中分別處理所有ffmpeg轉換。例如:convert.php
上傳完成。發送隱藏請求到convert.php?id = someid
在convert.php的頂部使用ignore_user_abort(TRUE);
即使用戶關閉瀏覽器,該進程也會運行。 如果用戶沒有關閉那個頁面仍然在那個頁面上,並且有Ajax響應更新狀態。
我希望它可以幫助拿個主意..
如果你在Linux上,尾隨符號在EXEC命令的運行() - 調用會在後臺啓動的過程。
你可能也想從ffmpeg的輸出重定向到/ dev/null的
ffmpeg -i (...) > /dev/null 2>&1 &
同樣的方法可以用來調用一個shell腳本,如果你想轉換後進行清理。
確定現在會怎樣我通過更多的變量,而不僅僅是像你在那裏列出的文件名?視頻編解碼器和大小保持不變,但我可以選擇包含音頻或不包含,所以我有一個名爲$ mp4Audio和$ webmAudio的變量。 – swg1cor14
@ swg1cor14請參閱編輯。 – vbence
好吧,我得到它使用shell_exec工作。只要使用exec,腳本仍然等待它完成 – swg1cor14