2013-01-31 13 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