如何编写Bash脚本批量清除目录中MP4文件的元数据?
批量清除目录中所有MP4文件元数据的低交互Bash脚本
没问题,既然你已经搞定单个文件的ffmpeg命令了,那批量处理的脚本其实很容易实现,而且能做到几乎零交互——全程只需要你运行脚本,剩下的交给它自动处理就行。
这里给你写一个稳妥且低干扰的脚本,它会递归遍历当前目录(包括子目录)下的所有MP4文件,生成清除元数据后的新文件(不会覆盖原文件,避免误操作风险):
#!/bin/bash # 递归遍历当前目录下的所有MP4文件,批量清除元数据 find . -type f -name "*.mp4" -print0 | while IFS= read -r -d '' file; do # 构造输出文件名:原文件名后添加_cleaned后缀 output_file="${file%.mp4}_cleaned.mp4" # 执行ffmpeg命令,关闭冗余输出以减少交互 ffmpeg -i "$file" -map_metadata -1 -c:v copy -c:a copy -hide_banner -loglevel error "$output_file" # 输出处理结果提示 if [ $? -eq 0 ]; then echo "✅ 处理完成: $output_file" else echo "❌ 处理失败: $file" fi done
脚本细节说明:
- 文件名兼容性:用
find -print0和read -d ''组合,完美处理带空格、特殊字符的文件名,不会出现识别错误。 - 低交互设计:ffmpeg命令加了
-hide_banner(关闭启动横幅)和-loglevel error(只显示错误信息),全程不会弹出冗余输出,只有处理结果的简洁提示。 - 安全优先:默认生成带
_cleaned后缀的新文件,绝对不会覆盖原文件,你可以对比验证后再处理原文件。
使用步骤:
- 把上面的代码复制保存为
clean_mp4_metadata.sh - 给脚本添加执行权限:
chmod +x clean_mp4_metadata.sh - 切换到需要处理的目录,运行脚本:
./clean_mp4_metadata.sh
可选调整:
- 如果不想处理子目录,只处理当前目录下的MP4,把
find命令改成:find . -maxdepth 1 -type f -name "*.mp4" -print0 - 如果确定要直接覆盖原文件(风险较高,谨慎操作),把
output_file那行改成:output_file="$file"
内容的提问来源于stack exchange,提问作者sd100
相关产品推荐
相关产品推荐

