使用ffmpeg在文件名中遇到空格时如何避免批量视频转码错误

时间:2019-02-20 13:49:28

标签: bash ffmpeg

我正在运行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)

1 个答案:

答案 0 :(得分:2)

您可以尝试摆脱for循环,而只需使用find命令,例如,如下所示:

find $dir -iname *.AVI -o -iname *.MOV | while read line; do ffmpeg -i "$line" ${line%%.*}.mp4  -hide_banner; done