如何在Bash脚本中记录FFmpeg批量转换完成的文件路径?
批量转换AVI到MP4并记录转换文件路径
原脚本的问题
- 输出重定向
> text.txt放在-exec单条命令中,每次转换都会覆盖文件内容,最终仅保留最后一个转换文件的路径 - FFmpeg输出文件名格式错误,缺少
.分隔符,会生成AAA.avi-CONVERTEDmp4这类不符合要求的文件名,而非期望的AAA.avi-CONVERTED.mp4 - 未判断FFmpeg转换是否成功,可能将失败任务的路径也写入记录;同时
sh -c包裹的命令存在变量展开逻辑问题
修正后的脚本
format4find='.avi' format4output='mp4' # 清空记录文件(若需保留历史记录可删除此行) > text.txt # 遍历文件并执行转换,成功后追加记录路径 find . -iname "*$format4find" -type f -exec sh -c ' for file do output="${file}-CONVERTED.${format4output}" # -n参数避免覆盖已存在的输出文件,转换成功才写入记录 ffmpeg -n -i "$file" "$output" && echo "$output" >> text.txt done ' sh {} +
关键说明
-type f确保仅处理文件,避免误操作目录- 采用
-exec sh -c '...' sh {} +批量传递文件,比逐个执行-exec更高效 - 提前定义
output变量,保证文件名格式符合要求 - 通过
&&判断转换成功后再写入记录,避免无效路径混入文件
内容的提问来源于stack exchange,提问作者manuel
相关产品推荐
相关产品推荐

