You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg批量转码脚本优化需求:转完即移文件、兼容多格式等

优化FFmpeg视频转码与原文件移动脚本

以下是满足你需求的优化后脚本:

# 开启nullglob,避免通配符无匹配时传递无效参数
shopt -s nullglob

# 遍历所有MOV/AVI格式的大小写文件
for f in *.{mov,MOV,avi,AVI}; do
    # 执行FFmpeg转码,-y参数覆盖已存在的MP4文件
    ffmpeg -y -i "$f" "${f%.*}.mp4"
    
    # 检查转码是否成功,仅成功时移动原文件
    if [ $? -eq 0 ]; then
        # 根据文件后缀(统一转小写判断)确定归档目录
        case "${f,,}" in
            *.mov)
                mv -f "$f" /Users/me/Videos/mov
                ;;
            *.avi)
                mv -f "$f" /Users/me/Videos/avi
                ;;
        esac
        echo "处理完成:$f"
    else
        echo "转码失败:$f,原文件未移动"
    fi
done

# 关闭nullglob,还原shell默认行为(可选)
shopt -u nullglob

优化细节说明

1. 单文件转码完成后立即归档

  • 将移动操作整合到循环内部,仅在FFmpeg转码成功后通过$? -eq 0判断退出状态码执行移动,避免转码失败时误移原文件。
  • 单个文件处理完就归档,脚本中断时已完成的文件都已整理到位,剩余未处理文件清晰可见,无需重新核对进度。

2. 一次性处理所有目标格式文件

  • 使用*.{mov,MOV,avi,AVI}通配符,直接匹配所有大小写的MOV/AVI文件,无需手动修改通配符切换格式。
  • 配合shopt -s nullglob,当某个后缀没有匹配到文件时,通配符会自动忽略该模式,不会传递无效参数给循环。

3. 消除MV命令无文件报错问题

  • 循环内针对单个文件执行mv,不存在批量匹配不到文件的场景,从根源避免报错。
  • 通过${f,,}将文件名转为小写后判断后缀,统一处理大小写格式的归档路径,无需重复编写多条mv命令。
  • nullglob选项确保当没有匹配到任何目标文件时,循环不会执行空命令(比如不会出现for f in *.mov无匹配时,$f变成字符串*.mov的问题)。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:26:12