多目录递归编码MP4视频时ffmpeg输出文件名格式错误的修正咨询
修正FFmpeg批量编码的文件名问题
你的问题出在文件名后缀的处理逻辑上:原命令里的${1##*/}会保留原文件的.mp4后缀,导致拼接后变成xxx.mp4_processed,既没补上正确的.mp4后缀,还把原后缀留在了中间。
直接用下面修正后的命令即可解决:
find -mindepth 2 -type f ! -path '*processed.mp4' -name '*.mp4' -exec bash -c 'ffmpeg -loglevel warning -i "$1" -vf fps=23.976025 "${1%.*}_processed.mp4"' _ {} \;
关键修改说明:
${1%.*}:这是Bash的参数扩展语法,作用是去掉$1(原文件的完整路径)中最后一个.及其后面的所有内容,也就是剥离了.mp4后缀,得到原文件所在目录/原文件名(不带后缀)- 直接拼接
_processed.mp4,最终生成的路径就是原文件所在目录/原文件名_processed.mp4,完全符合你的要求。
测试技巧(避免误操作):
如果怕命令出错,可以先把ffmpeg换成echo,先验证输出文件名是否正确:
find -mindepth 2 -type f ! -path '*processed.mp4' -name '*.mp4' -exec bash -c 'echo "源文件: $1" "输出文件: ${1%.*}_processed.mp4"' _ {} \;
内容的提问来源于stack exchange,提问作者menteith
相关产品推荐
相关产品推荐

