所以我编写了一个bash脚本,用于将新写入视频文件并对其进行转码以进行播放,并在我的服务器中进行流式处理,这是脚本
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
该脚本运行得相当好,但是如果$ filename包含空格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.
然而这是不正确的,因为我可以在它的相应目录中查看所述文件,我还在shell中测试了以下内容的avconv,一切正常并且avconv转码视频
avconv -i /var/www/media2net/The\ Daily.mkv /var/www/media2net/tv/The\ Daily.webm
基本上我想知道我在我的脚本中做错了什么或者是否有其他人使用avconv或ffmpeg遇到了类似的问题(因为2是相当类似的,avconv是ubuntu的项目分支)任何帮助都将非常感谢! 提前致谢 -brendan
答案 0 :(得分:1)
您使用转义反斜杠和引号时似乎存在一些不一致之处。事实上,你只需要两个中的一个,而且更容易使用的当然是引号。
因此,删除文件名中的反斜杠是第一件好事。
此外,
"$(inotifywait --format "%w""%f"...
应更正:
"$(inotifywait --format '%w%f'...
此外,理解类似的内容:
"`echo ${filename%.mkv}.mp4`"
有点含糊不清,事实上,如果$filename
中有一个空格 - 两个字符链 - 你正在回应 - 。它应该在:
"${filename/%.mkv/.mp4}"