Skip to content

SCslope/livephoto-filter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Live Photo Organizer (livephoto-filter)

一个强大且智能的 Rust 工具,专门用于整理和归档 iPhone 照片库中的 Live Photos。

这个工具可以精确识别成对的 Live Photo(图片+视频),修复因系统导入或重命名导致的名称不匹配问题,并将所有非 Live Photo 文件、孤立文件以及重复版本的 Live Photo 进行分层归档,最终让您的主照片库 (100APPLE) 保持绝对的整洁。

功能亮点

  • 精确配对: 通过文件名和修改日期,精确识别 HEIC/JPG + MOV 的 Live Photo 对。
  • 智能修复: 自动修复因文件名后缀(如 IMG_1234 2.MOVIMG_1234.HEIC)导致的不匹配问题,通过比较文件名长度智能重命名,确保配对成功。
  • 分层归档:
    • 主文件夹 (100APPLE): 最终只保留最原始、最干净的 Live Photo 版本。
    • 版本文件夹 (101APPLE, 102APPLE, ...): 自动创建并归档后续重复或编辑产生的 Live Photo 新版本,每个版本占用一个文件夹,清晰明了。
    • 隔离文件夹 (Other, Other1, ...): 所有无法配对的孤立文件、非 Live Photo 文件(如截图、普通视频)以及系统临时文件,都会被隔离到此,并自动处理冲突。
  • 安全可靠: 所有移动操作都经过冲突检查,确保不会覆盖任何文件。
  • 高性能: 基于 Rust 语言开发,文件处理速度极快,轻松应对数万张照片。

处理逻辑详解

本工具的整理过程分为两个核心阶段:

阶段一:Live Photo 整理与修复

此阶段的目标是清理主文件夹 (100APPLE),只保留被识别为 Live Photo 的文件对。

  1. 精确匹配 (规则 A):

    • 对于 100APPLE 中的每一个 .MOV 文件,程序会寻找一个同名修改日期完全一致.HEIC.JPG 文件。
    • 如果找到,这对文件被视为一个完美的 Live Photo,将被保留。
  2. 模糊匹配与智能修复 (规则 B):

    • 如果精确匹配失败,程序会进入更智能的修复模式。
    • 前置检查: 只对文件名以 IMG_ 开头且长度至少为8的 .MOV 文件进行此操作。
    • 寻找候选者: 提取 .MOV 文件名的前8位 (IMG_XXXX) 作为“前缀”,然后在所有图片文件中寻找修改日期相同前8位前缀也相同的唯一候选图片。
    • 智能修复: 如果找到唯一的候选图片,程序会比较 .MOV 和图片的文件名长度,并将较短的一方重命名,使其与较长的一方文件名完全一致。
      • 示例: IMG_1234 2.MOV (长) 和 IMG_1234.HEIC (短) 配对成功,程序会自动将 IMG_1234.HEIC 重命名为 IMG_1234 2.HEIC
    • 这对被修复的文件也被视为 Live Photo,将被保留。
  3. 清理:

    • 在完成所有配对和修复后,所有未被加入“保留列表”的文件(包括孤立文件、普通照片/视频、系统文件等)都将被移动到 Other 系列文件夹中。
    • 如果 Other 文件夹中已存在同名文件,程序会自动创建 Other1, Other2... 来存放,确保万无一失。

阶段二:分层迁移与净化

此阶段的目标是处理阶段一结束后 100APPLE 中仍然存在的、带后缀的 Live Photo(即被修复过的文件),将它们迁移到独立的版本文件夹中。

  1. 识别版本文件: 程序会遍历 100APPLE 中所有文件名长度大于8个字符的 Live Photo 对(例如 IMG_1234 2.MOV + IMG_1234 2.HEIC)。

  2. 寻找可用槽位:

    • 对于每一个版本文件对,程序会提取其前缀 IMG_XXXX
    • 然后从 100APPLE 文件夹开始,检查是否存在一个名为 IMG_XXXX.mov 的文件。
    • 如果不存在: 说明 100APPLE 就是存放这个原始版本的最佳位置。程序会将 IMG_1234 2.MOVIMG_1234 2.HEIC 分别重命名为 IMG_1234.movIMG_1234.heic留在 100APPLE
    • 如果存在: 说明原始版本已被占用。程序会继续检查 101APPLE 文件夹中是否存在 IMG_XXXX.mov。如果不存在,就将文件对重命名后移入 101APPLE;如果还存在,就继续检查 102APPLE,以此类推。
  3. 最终结果:

    • 100APPLE: 只存放最原始的、文件名最短的 Live Photo。
    • 101APPLE, 102APPLE, ...: 存放后续的版本,每个版本一个文件夹。

如何使用

1. 环境准备

  • 安装 Rust: 如果您还未安装 Rust,请访问 rust-lang.org 并按照指引进行安装。
  • 下载代码: 使用 Git 克隆本仓库到您的电脑上。
    git clone https://github.com/SCslope/livephoto-filter.git
    cd livephoto-filter

2. 配置路径

打开项目中的 src/main.rs 文件 。
在文件顶部的 main 函数内,找到“用户配置区域”,并根据您的实际情况修改文件夹路径。

// --- 用户配置区域 ---
let base_dir = Path::new("/Volumes/LY/DCIM/100APPLE");   // 您的主照片文件夹
let other_dir = Path::new("/Volumes/LY/DCIM/Other");     // 基础的隔离文件夹
let versioned_base_path = Path::new("/Volumes/LY/DCIM/"); // 用于创建 10XAPPLE 和 OtherX 的父目录
// --------------------

3. 运行程序

在项目的根目录(livephoto-filter 文件夹)打开终端。
运行以下命令来编译并执行程序。使用 --release 参数可以获得最佳性能。

cargo run --release

程序会开始执行,并在终端打印出各个阶段的进度和最终的总结报告,包括修复了哪些文件以及各个文件夹的文件总数。

4. 查看结果

  • 100APPLE: 现在只包含最原始的 Live Photo 文件对。
  • 101APPLE, 102APPLE, ...: 如果有,这些文件夹将包含后续版本的 Live Photo。
  • Other, Other1, Other2, ...: 包含所有未配对的孤立文件和非 Live Photo 文件。

About

A Rust utility to organize iPhone Live Photos by pairing HEIC/JPG with MOV files.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages