2013-01-31 39 views
1

所以我寫了一個bash腳本把新寫的視頻文件,並轉碼他們在我這裏的服務器播放和流媒體是腳本Intepreting字符串中使用inotifywait和avconv

while true; do 
    printf -v filename '%q' "$(inotifywait --format "%w""%f" -r -e close_write /var/$ 
    echo $filename 
      if [[ $filename == *".mp4"* ]]; then 
        echo "1" 
        avconv -i "$filename" "`echo ${filename%.mp4}.webm`" 
      fi 

      if [[ $filename == *".mkv"* ]]; then 
        echo "2" 
        avconv -i "$filename" "`echo ${filename%.mkv}.mp4`" 
        avconv -i "$filename" "`echo ${filename%.mkv}.webm`" 
      fi 

      if [[ "$filename" == *".avi"* ]] 
        then echo "3" 
        avconv -i "$filename" "`echo ${filename%.avi}.mp4`" & 
        avconv -i "$filename" "`echo ${filename%.avi}.webm`"& 
       fi 
     done 

腳本工作還算不錯但是如果$文件名中包含空格avconv休息和腳本返回:

 Watches established. 
     /var/www/media2net/tv/The\ Daily.mkv 
     2 
     avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav s 
     built on Nov 6 2012 16:51:33 with gcc 4.6.3 
     /var/www/media2net/tv/The\: No such file or directory 
     avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav 
     built on Nov 6 2012 16:51:33 with gcc 4.6.3 
     /var/www/media2net/tv/The\ Daily.mkv: No such file or directory 
     Setting up watches. Beware: since -r was given, this may take a while! 
     Watches established. 

然而,這是不正確的,因爲我可以查看它的相應的目錄裏面說的文件,我還測試了avconv在以下外殼和一切正常工作y和avconv轉碼視頻

 avconv -i /var/www/media2net/The\ Daily.mkv /var/www/media2net/tv/The\ Daily.webm 

基本上我想知道我在做什麼錯在我的腳本或者其他任何人經歷了使用avconv或ffmpeg的(因爲2非常相似,並avconv是Ubuntu的叉了類似的問題該項目)任何幫助將不勝感激! 在此先感謝 -brendan

回答

1

您的轉義反斜槓和引號的使用似乎存在一些不一致之處。事實上,你只需要其中的一個,而使用起來更容易的就是引號。

因此,刪除文件名中的反斜槓將是第一件好事。

此外,

"$(inotifywait --format "%w""%f"... 

應該被糾正:

"$(inotifywait --format '%w%f'... 

此外,該理解是這樣的線:

"`echo ${filename%.mkv}.mp4`" 

是有些模糊,如在,事實上,你在迴應 - 如果在$filename有一個空格 - 兩個字符鏈 - 。它應該糾正在:

"${filename/%.mkv/.mp4}" 
+0

謝謝,爲此...你確實是正確的,對於遲到抱歉我真的不明白網站的細微差別! – brendosthoughts