2012-10-02 83 views
3

我想在我的服務器上編碼許多視頻,但FFMPEG是資源密集型的,所以我想設置某種形式的排隊。我的網站的其餘部分使用PHP,但我不知道是否應該使用PHP,Python,BASH等。我想我可能需要使用CRON,但我不確定如何告訴ffmpeg啓動新任務(從列表中)完成之後的任務。如何設置ffmpeg隊列?

回答

7

我們將在bash腳本中使用FIFO(先進先出)。該腳本需要cron之前運行(或任何腳本,調用該FIFO任何終端)發送ffmpeg命令,這個腳本:

#!/bin/bash 

pipe=/tmp/ffmpeg 

trap "rm -f $pipe" EXIT 

# creating the FIFO  
[[ -p $pipe ]] || mkfifo $pipe 

while true; do 
    # can't just use "while read line" if we 
    # want this script to continue running. 
    read line < $pipe 

    # now implementing a bit of security, 
    # feel free to improve it. 
    # we ensure that the command is a ffmpeg one. 
    [[ $line =~ ^ffmpeg ]] && bash <<< "$line" 
done 

現在(在腳本運行時),我們可以發送任何ffmpeg命令命名管道使用語法:

echo "ffmpeg -version" > /tmp/ffmpeg 

和錯誤檢查:

if [[ -p /tmp/ffmpeg ]]; then 
    echo "ffmpeg -version" > /tmp/ffmpeg 
else 
    echo >&2 "ffmpeg FIFO isn't open :/" 
fi 

他們將自動排隊。

+0

是的,但我的視頻將被動態添加。所以我不想手動轉換它們。當我的服務器上下載了新視頻時,我希望它將視頻添加到隊列中 –

+0

POST從頭開始重寫以適合您的需求。 –

+0

美麗的我會試試這個當我回家 –

1

感謝您的支持。應用這種技術來創建一個ffmpeg隊列。 雖然我做了一個小小的改變。出於某種原因,此隊列僅適用於2個項目。第一個項目完成後,我只能發送第三個項目。

我相應的修改腳本:

while true; do 

# added tweak to fix hang 
exec 3<> $pipe 

# can't just use "while read line" if we 
# want this script to continue running. 
read line < $pipe 

我此基礎上: https://stackoverflow.com/questions/15376562/cant-write-to-named-pipe

只是覺得我應該分享這個對於這個任何可能的將來使用。

+0

嗯,這意味着作爲評論StardustOne的出色答案 – Joost

相關問題