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

编写Shell循环脚本实现多目录全格式视频转MP4并删除原文件

多目录视频批量转码并压缩脚本

以下是修改后的脚本,实现遍历所有子目录、转换非MP4视频为MP4并自动删除原文件的功能:

#!/bin/bash
# 遍历指定目录及子目录,将所有非MP4格式视频转换为MP4并压缩体积,完成后删除原文件

SourceFiles='/home/raed/Desktop/workfolder'

# 使用find遍历所有非MP4的视频文件,兼容带空格的文件名
find "$SourceFiles" -type f \( -name "*.mkv" -o -name "*.avi" -o -name "*.mov" -o -name "*.flv" -o -name "*.wmv" -o -name "*.mpeg" \) | while IFS= read -r video; do
    # 获取不带扩展名的文件名
    filename="${video%.*}"
    # 目标MP4文件路径
    output_file="${filename}.mp4"

    # 带进度条转码,沿用原压缩配置
    ffmpeg-bar -i "$video" -vcodec libx264 -crf 28 -preset faster -tune film "$output_file"
    
    # 转码成功才删除原文件,避免意外丢失
    if [ $? -eq 0 ]; then
        echo "转码完成,删除原文件: $video"
        rm "$video"
    else
        echo "转码失败,保留原文件: $video"
        # 清理转码失败生成的无效MP4文件
        rm -f "$output_file"
    fi
done

echo ""
echo "**********************************"
echo "****** 所有转码任务处理完成 *******"
echo "**********************************"
echo ""

exit 0

关键改动说明

  • 递归遍历子目录:用find命令递归扫描目标目录下所有层级的文件,支持文件名含空格或特殊字符的场景
  • 扩展支持多格式:新增AVI、MOV、FLV等常见视频格式的转换,可自行添加更多格式到find的匹配规则中
  • 安全删除机制:仅在转码命令执行成功时才删除原文件,避免转码失败导致文件丢失
  • 容错处理:转码失败时自动清理生成的不完整MP4文件,避免残留无效文件

注意事项

  • 需提前安装ffmpeg-bar:先执行sudo apt install npm安装npm,再运行npm install --global ffmpeg-progressbar-cli
  • 可调整压缩参数:crf值(0-51,值越小画质越高体积越大)、preset参数(可选ultrafast/fast/medium/slow等,速度越慢压缩率越高)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:00:29