Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 当使用ffmpeg在文件名中遇到空白时,如何避免批处理视频转码错误_Bash_Ffmpeg - Fatal编程技术网

Bash 当使用ffmpeg在文件名中遇到空白时,如何避免批处理视频转码错误

Bash 当使用ffmpeg在文件名中遇到空白时,如何避免批处理视频转码错误,bash,ffmpeg,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

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

您可以尝试摆脱for循环,只需使用find命令,例如下面的smth命令:

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

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

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

您需要在
${OUTPUT%%.*}.mp4
周围加引号。错误消息返回时包含整个文件名,这是因为您引用了输入选项-请使用正确引用的相同文件名手动尝试调用。也许
ffmpeg
有一个bug?另一个问题-您的
find
正在查找
*.MOV
,但您的错误消息是
/srv/videos/file with white spaces.MOV
-我假设您使用的是windoze系统(和我一样)。如果您更改案例,它是否可以手动工作,但如果您不更改案例,它仍然会失败?(我会很惊讶,但我肯定会检查一下。)识别代码中的几个问题,并且它的报告包含足够的信息,可以引导您找到一个好的解决方案。
${OUTPUT%%.*}
可能会删除太多的
输出
字符串
${OUTPUT%.*}
将仅删除
.avi'或
.mov`(或
.mov
,…)。您需要在
${OUTPUT%.*}.mp4
周围加引号。错误消息返回时包含整个文件名,这是因为您引用了输入选项-请使用正确引用的相同文件名手动尝试调用。也许
ffmpeg
有一个bug?另一个问题-您的
find
正在查找
*.MOV
,但您的错误消息是
/srv/videos/file with white spaces.MOV
-我假设您使用的是windoze系统(和我一样)。如果您更改案例,它是否可以手动工作,但如果您不更改案例,它仍然会失败?(我会很惊讶,但我肯定会检查一下。)识别代码中的几个问题,并且它的报告包含足够的信息,可以引导您找到一个好的解决方案。
${OUTPUT%%.*}
可能会删除太多的
输出
字符串
${OUTPUT%.*}
将只删除
.avi'或
.mov`(或
.mov
,…)。