Featured image of post Mac 导出照片怎么整理?按年月归档,保留 Live Photo,分离重复文件

Mac 导出照片怎么整理?按年月归档,保留 Live Photo,分离重复文件

用 Gallery Organizer 整理已经导出的照片和视频:按拍摄年月归档,保留 Live Photo 与伴随文件,预览重复项,并单独检查日期不明的文件。

作者: 小景

文章来源: https://jingyuan-zheng.github.io/zh/p/gallery-organizer/

本文介绍怎样用 Gallery Organizer 整理已经导出的 Mac 照片库:先预览移动计划,再按拍摄年月归档,并把 Live Photo、重复副本和日期不明的素材分别处理。网页和命令行两种入口都可以完成前两轮整理。

为什么导出的照片越整理越乱

手机和相机都会反复使用 IMG_0001 这样的文件名。几次导出重叠后,同名文件可能拍摄于不同年份,也可能是同一张照片的副本。Live Photo 导出后常变成一张 HEIC 加一段 MOV,旁边还可能有记录编辑信息的 .aae 或 .xmp。如果只按文件名移动,很容易拆散这些关系;如果只看修改时间,复制当天又可能被误当成拍摄日期。

Gallery Organizer 的做法是先区分能确认的相机素材,再检查剩下的截图、录屏、下载图片和信息有冲突的文件。它只处理已经导出的文件夹,不会从 iPhone 或 Apple 照片 App 提取照片;也不要直接把照片图库包交给它。项目仅在 macOS 上运行。

先准备目录和备份

先独立备份原始导出,再挑一个熟悉的小批次试用。打开项目的 config.ini,设置照片根目录和输出位置。默认结构可以这样理解:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
~/Pictures/GalleryOrganizer/
├── Incoming/
│   ├── Stage0/Batch A/       ← 尚未整理的导出批次
│   └── Stage1/Batch A/       ← 第一轮结束后留下的批次
└── Gallery/
    ├── Main/                 ← 已确认的相机照片、视频
    ├── SortedFromUnsorted/   ← 第二轮认出的相机素材
    ├── Screenshots/          ← 截图、录屏
    ├── OtherMedia/           ← 保存的图片等其他素材
    ├── NeedsRepair/          ← 日期或伴随文件待检查
    └── Duplicate/            ← 已确认的重复副本

这些是可能出现的目录,不代表每次都会创建。归档通常采用 2024/2024-06/ 的年月结构;同名但内容不同的文件不会互相覆盖,必要时会再加日期目录。config.ini 中的 language = zh 可以让报告和新建分类目录使用中文,但不会重命名已经存在的文件夹。

用网页先预览第一轮

在项目目录打开终端,运行:

1
2
3
4
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements-api.txt
uvicorn api.app:app --host 127.0.0.1 --port 8000

浏览器访问 http://127.0.0.1:8000/,保持终端窗口开启。在网页选择主整理工具,输入 Incoming/Stage0/Batch A 的完整路径,先点 Scan / Dry Run。逐项看目标位置、同名冲突、Live Photo 配对和待人工复核项,再点 Apply changes。执行前工具会重新扫描;成功后整批目录移到 Stage1,仍需处理的文件留在里面。

Gallery Organizer 中文网页中选择整理工具和目录
图 1:网页先扫描并列出整理计划,确认后再应用。截图来自项目仓库。

网页可切换中英文;详细报告使用 config.ini 的语言设置。任务历史会保留供回看,但中断的任务不会自动接着运行,也没有整批撤销按钮。重新运行前先核对报告和文件实际位置。

喜欢终端,也可以走同样的两轮

命令行适合已有固定导出目录、想逐批处理的人。下面的路径要换成自己的。每轮第一条只预览,第二条带 --apply 才会移动文件:

1
2
3
4
5
python3 organize_gallery_media.py "/你的照片根目录/Incoming/Stage0/Batch A"
python3 organize_gallery_media.py "/你的照片根目录/Incoming/Stage0/Batch A" --apply

python3 organize_leftover_media.py "/你的照片根目录/Incoming/Stage1/Batch A"
python3 organize_leftover_media.py "/你的照片根目录/Incoming/Stage1/Batch A" --apply

第一轮把能确认的相机照片与视频放进 Gallery/Main/年份/年-月/;照片、Live Photo 视频及能确认归属的伴随文件会尽量待在一起。第二轮检查 Stage1 留下的内容:截图和录屏进 Screenshots,保存或下载的图片进 OtherMedia,仍认不准的进 NeedsRepair。第二轮才确认的相机素材会进入 SortedFromUnsorted。

例如 IMG_0100.HEIC、IMG_0100.MOV 和 IMG_0100.HEIC.xmp 可以一起出现在 Gallery/Main/2024/2024-06/。不确定归属的 .xmp 则应先留在待检查目录。相机缩略图 .thm、低分辨率视频 .lrv 等文件也可能是素材的一部分,整理结束前不要因为扩展名陌生就删除。

第一次配置,只改自己能确认的路径

假设照片都放在外接盘,可以先把 backup_root 改成那块盘里的专用目录,其他子目录沿用默认值。gallery_root = Gallery 是相对于照片根目录的路径,main_library_root = Main 又是相对于 Gallery;它们不是三个互不相关的位置。路径里有空格时,config.ini 中不用加引号,命令行参数则需要保留示例中的引号。

把一批导出放到 Incoming/Stage0/Batch A,处理时选择这个批次,不要直接把整个 Stage0 当输入。根目录也是工具允许处理的来源与目标边界,所以不要把输入随意指到根目录外。先让配置对应的文件夹结构清楚,再尝试不同分类位置,能少掉很多“文件到底移到哪了”的困惑。

requirements-api.txt 安装的是本地网页需要的 Python 包,不代表所有媒体读取程序也都包含在里面。如果扫描提示缺少某个外部工具,按提示检查 [tools]:留空表示搜索系统,也可以填写已安装程序的完整路径。不要把工具所在的文件夹当成可执行文件路径。

一次试运行应该检查哪些结果

先挑一批包含普通照片、一组 Live Photo、几张截图和一份重复导出的样本。Dry Run 以后重点看四件事:拍摄年月是否符合记忆;Live Photo 的照片与短视频是否在一起;截图是否仍混在待分类项里;重复副本保留的是哪一份。日期明显不对时,先调查元数据,不要为了完成整理就直接应用。

确认第一轮后,再对 Stage1 中同一批次运行第二轮。两个脚本不是一条会自动走到底的流水线;第二轮也是独立预览、独立执行。完成以后,在目标目录抽查几张照片、播放一段视频,再确认待检查项为什么被留下。分类目录清楚,比文件全部“消失在输入文件夹”更有意义。

JPEG 日期修复更适合放在整理之后的专项检查里。比如一批旧照片只有复制日期,不能因为文件名看起来像某天,就把整批时间全部写进去。先确定时区、允许修改的日期范围和要人工保留的月份,再使用工具提供的备份与报告。NeedsRepair 是提醒你继续判断的入口,不是应该直接删除的废料箱。

重复文件和日期异常另做一轮

主整理会把确认的重复副本单独放置;另有可选工具检查已经进入主库的重复文件。完全重复和“看起来相似”不是一回事:连拍、修图版、不同格式导出,都值得先看内容再决定保留哪一份。网页的图片对照默认关闭,需要时再打开;HEIC 首次生成预览可能稍慢。

Gallery Organizer 的重复图片并排预览
图 2:并排预览能辅助判断,路径和整理报告也要一起看。

JPEG 日期修复是另一项独立操作。写入前先在 config.ini 确认时区和可处理日期范围,保留它生成的备份与报告。一次只允许一个网页或终端任务应用更改。若只想先核对某张照片的拍摄参数,可用 View Media Info 查看。更多路径配置和可选工具见 项目 README。

隐私政策 网站地图 仪表盘
由 Hugo & Stack v4.0.3
本站已运行 0 天