我正在运行bash脚本,以使用find和ffmpeg在LAMP服务器上批量转码视频
dir="/srv/videos"
for OUTPUT in "$(find $dir -iname *.AVI -o -iname *.MOV)"
do
ffmpeg -i "$OUTPUT" "${OUTPUT%%.*}.mp4" -hide_banner
done
如果文件包含空格,ffmpeg返回错误
/srv/videos/file with white spaces.MOV: No such file or directory
对于没有空格的文件,它可以正常工作。
如果我在引号中打印文件名,则看起来应该可以使用
for OUTPUT in "$(find $dir -iname *.MOV)"; do echo "$OUTPUT";done
返回
/srv/videos/file with white spaces.MOV
为了避免该错误,我需要更改什么?
编辑 在$ {OUTPUT %%。*}。mp4中添加了“”,我得到了相同的错误,并纠正了扩展名的大写字母(移动到MOV)
答案 0 :(得分:2)
您可以尝试摆脱for循环,而只需使用find命令,例如,如下所示:
find $dir -iname *.AVI -o -iname *.MOV | while read line; do ffmpeg -i "$line" ${line%%.*}.mp4 -hide_banner; done