Mac终端下FFmpeg批量转码带空格文件的命名异常问题
问题解决:转码后文件名异常的修复
问题根源
你的命令中$(basename $i)没有给$i添加双引号,当路径包含空格时,Shell会将带空格的路径拆分成多个独立参数传递给basename。比如./01. Original Recording/xxx.m4a会被拆成./01.、Original、Recording/xxx.m4a三个参数,basename只会处理第一个参数,最终输出错误的文件名前缀,空格被替换为?是Shell分词导致的显示异常。
修复方案
方案1:给basename的参数加引号
修正后的命令:
for i in "./01. Original Recording"/*.m4a; do ffmpeg -i "$i" -b:a 64k "./02. Compressed/$(basename "$i")"; done
给$i加上双引号后,basename能接收完整的带空格路径,正确提取仅包含文件名的部分。
方案2:用Shell参数扩展替代basename(更高效)
无需调用外部basename命令,直接通过Shell内置的参数扩展提取文件名:
for i in "./01. Original Recording"/*.m4a; do ffmpeg -i "$i" -b:a 64k "./02. Compressed/${i##*/}"; done
${i##*/}的作用是从变量i的开头删除最长的*/匹配内容,也就是去掉路径前缀,只保留文件名,效果和basename一致,但执行效率更高。
内容的提问来源于stack exchange,提问作者Vihung
相关产品推荐
相关产品推荐

