如何编写Bash递归脚本批量将照片序列转视频且跳过已存在任务
自动化转换Shell脚本
你可以直接在你的output根目录下创建并运行以下脚本:
#!/bin/bash # 遍历所有data_前缀的数据集目录 for data_dir in data_*/; do # 去掉目录末尾的斜杠,提取数据集名 data_name=$(basename "${data_dir%/}") # 遍历当前数据集下所有version_前缀的版本目录 for version_dir in "${data_dir}"version_*/; do # 去掉目录末尾的斜杠,提取版本号 version_name=$(basename "${version_dir%/}") # 构造目标视频文件名 target_video="${version_dir}${data_name}_${version_name}.mov" # 构造photos目录路径 photos_dir="${version_dir}photos/" # 校验目标视频是否已存在,存在则跳过当前版本 if [ -f "${target_video}" ]; then echo "跳过已处理的版本:${data_name}/${version_name},视频已存在" continue fi # 校验photos目录是否存在 if [ ! -d "${photos_dir}" ]; then echo "跳过异常版本:${data_name}/${version_name},未找到photos目录" continue fi # 执行ffmpeg转码 echo "开始处理:${data_name}/${version_name}" ffmpeg -i "${photos_dir}%6d.jpg" -y "${target_video}" # 转码成功后才删除photos目录 if [ $? -eq 0 ]; then echo "转码完成,删除原photos目录" rm -r "${photos_dir}" else echo "转码失败,保留photos目录,请检查错误信息" fi done done
使用说明
- 请将脚本保存为
batch_convert.sh,放在你的output根目录下执行 - 运行前先执行
chmod +x batch_convert.sh给脚本添加执行权限 - 脚本默认保留你原有的ffmpeg参数,如果你需要调整画质、编码格式可以自行在ffmpeg命令中添加对应参数
- 新增了异常判断逻辑:photos目录不存在、转码失败的情况都会跳过删除操作,避免误删原始图片
- 处理过程会打印对应日志,方便排查问题
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

