Mac终端下用FFmpeg批量处理GoPro MP4文件报错:*.mp4不存在
解决Mac终端批量处理GoPro MP4文件的循环命令报错问题
首先,你遇到的"*.mp4: No such file or directory"错误,大概率是文件名大小写匹配的问题——GoPro默认导出的视频文件后缀是大写的.MP4,而你的命令里用的是小写的*.mp4。Mac默认的Shell(zsh或bash)在文件名匹配时是区分大小写的,所以系统找不到任何小写后缀的文件,才会抛出这个错误。
下面给你几个针对性的解决方案:
方案1:直接匹配大写后缀
既然GoPro文件是.MP4,直接修改命令里的匹配规则即可:
for i in *.MP4; do ffmpeg -i "$i" -vf "hflip,vflip" "${i%.*}_r.mp4"; done
方案2:开启大小写不敏感匹配
如果你的目录里同时存在大小写后缀的MP4文件,可以临时让Shell忽略大小写:
- 如果你用的是zsh(Mac默认Shell):
先执行这条命令开启不敏感匹配,再运行你的循环:setopt nocaseglob for i in *.mp4; do ffmpeg -i "$i" -vf "hflip,vflip" "${i%.*}_r.mp4"; done - 如果你用的是bash:
先执行这条命令,再运行循环:shopt -s nocaseglob for i in *.mp4; do ffmpeg -i "$i" -vf "hflip,vflip" "${i%.*}_r.mp4"; done
方案3:zsh专属的大小写不敏感匹配语法
zsh支持在glob表达式后加(#i)来单独忽略当前匹配的大小写,不用全局设置:
for i in *.mp4(#i); do ffmpeg -i "$i" -vf "hflip,vflip" "${i%.*}_r.mp4"; done
验证小技巧
你可以先运行echo *.mp4测试:如果输出是*.mp4本身,说明确实没有匹配到任何小写后缀的文件;如果输出是具体的文件名,那再检查是否有其他特殊字符(不过你已经用双引号包裹了$i,空格这类特殊字符应该已经被正确处理了)。
内容的提问来源于stack exchange,提问作者Aron
相关产品推荐
相关产品推荐

