编写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
相关产品推荐
相关产品推荐

