Mac OS X下MP4视频压缩迁移脚本优化:仅成功压缩后移动原文件
嘿,这个需求太务实了——毕竟没人想因为压缩失败弄丢珍贵的原视频对吧?针对Mac OS X环境,我给你整理了一套靠谱的优化方案,核心就是把压缩成功作为后续操作的前置条件,具体如下:
优化方案:确保压缩成功后再操作原文件
1. 核心逻辑:依赖命令退出状态码做校验
在Mac的Shell环境里,任何命令执行完成都会返回一个退出码(通过$?变量获取):
- 命令成功执行时返回
0 - 失败(比如编码错误、文件损坏、参数错误)时返回非0值
我们要做的就是:只有当压缩命令的退出码为0时,才执行「移动原文件」和「导入Lightroom」的操作,从根源避免误操作。
2. 具体脚本示例(以FFmpeg为例)
假设你原本用FFmpeg做压缩,调整后的脚本大概是这样(可以直接替换你的配置参数):
#!/bin/bash # -------------------------- 配置参数 -------------------------- SOURCE_DIR="/Users/xxx/Camera/RawVideos" # 原视频存放目录 COMPRESSED_DIR="/Users/xxx/Camera/Compressed" # 压缩文件输出目录 ARCHIVE_DIR="/Users/xxx/Camera/ArchivedRaw" # 原文件归档目录 LIGHTROOM_CATALOG="/Users/xxx/Pictures/Lightroom Catalog.lrcat" # Lightroom目录路径 # ------------------------------------------------------------- # 遍历目录下的原视频(这里以mp4为例,可根据实际格式调整,比如*.mov) for RAW_VIDEO in "$SOURCE_DIR"/*.mp4; do # 跳过空目录(如果没有匹配到任何视频文件的话) [ -e "$RAW_VIDEO" ] || continue # 生成压缩后的文件名(比如在原文件名后加"_compressed"后缀) BASENAME=$(basename "$RAW_VIDEO" .mp4) COMPRESSED_VIDEO="$COMPRESSED_DIR/${BASENAME}_compressed.mp4" # 执行压缩命令(这里用H.265编码,压缩率高且画质损失小,适合Mac) ffmpeg -i "$RAW_VIDEO" -c:v libx265 -crf 28 -c:a aac -b:a 128k "$COMPRESSED_VIDEO" # 检查压缩是否成功 if [ $? -eq 0 ] && [ -f "$COMPRESSED_VIDEO" ]; then echo "✅ 压缩成功:$RAW_VIDEO" # 移动原文件到归档目录 mv "$RAW_VIDEO" "$ARCHIVE_DIR/" echo "📦 原文件已归档:$RAW_VIDEO -> $ARCHIVE_DIR" # 导入压缩文件到Lightroom(用第三方工具lrtool,需要先通过brew install lrtool安装) lrtool import --catalog "$LIGHTROOM_CATALOG" "$COMPRESSED_VIDEO" echo "📸 已导入Lightroom:$COMPRESSED_VIDEO" else echo "❌ 压缩失败:$RAW_VIDEO,跳过后续操作" # 可选:删除生成失败的残缺压缩文件 rm -f "$COMPRESSED_VIDEO" fi done
3. 额外优化建议
- 用HandBrakeCLI替代FFmpeg:如果你更习惯HandBrake的预设,也可以替换压缩命令,校验逻辑完全一致:
HandBrakeCLI -i "$RAW_VIDEO" -o "$COMPRESSED_VIDEO" --preset "Fast 1080p30" if [ $? -eq 0 ] && [ -f "$COMPRESSED_VIDEO" ]; then # 后续归档+导入操作 fi - 添加日志记录:可以把脚本的运行日志写入文件,方便后续排查问题,在脚本开头加上:
exec > >(tee -a /Users/xxx/Logs/VideoCompress.log) 2>&1 - 原生Lightroom导入:如果不想用第三方工具
lrtool,可以用AppleScript触发Lightroom的原生导入,在Shell脚本里这样调用:osascript -e "tell application \"Adobe Lightroom Classic\"" \ -e "import from POSIX file \"$COMPRESSED_VIDEO\" into catalog \"$LIGHTROOM_CATALOG\"" \ -e "end tell" - 权限检查:确保脚本对原文件目录、压缩目录、归档目录都有读写权限,Lightroom的目录也要允许脚本访问。
内容的提问来源于stack exchange,提问作者user877206
相关产品推荐
相关产品推荐

