留刻(MomentStays)使用手册

适用版本:留刻 1.4.0(macOS 12 或更高版本) 本手册介绍图形界面(App)的全部功能,以及附带的命令行工具。英文版见 USER_GUIDE.md。

高清候选封面选择与多照片导出从 1.2.0 起包含在安装包中,较早版本的安装包没有这些选项。

留刻在 Mac 上把 Android 动态照片(Motion Photo)转换成 Apple 实况照片(Live Photo),也能反向转换。全过程遵循三条原则:

  1. 封面帧不变——你选定的那一帧仍是封面,按真实时间线对齐到帧;
  2. 音视频不重新编码——视频与音频只重新封装,逐个样本校验,保留原有质量;图片格式转换与候选帧导出可能需要图片编码;
  3. HDR 如实保留——能保留的增益图原样保留,处理不了的明确报告,绝不伪造。

所有转换与校验都在本机完成,不上传任何照片。


目录


1. 快速上手

打开 DMG,将 MomentStays(留刻)拖入右侧的 Applications,再从「应用程序」启动。安装窗口仅显示应用与 Applications 链接,以箭头示意拖拽方向。手册通过应用内帮助按钮打开,许可文件保存在应用包内。

  1. 打开留刻,点「添加照片」,或把文件直接拖进队列;也可以从菜单选择「扫描系统照片图库…」直接从「照片」图库取图。
  2. 确认转换方向:安卓 → 苹果实况(默认)或苹果实况 → 安卓。
  3. 在顶部「保存到」及「更多选项…」中核对输出方式(保存到文件夹 / 导入图库 / 共享等)、目标格式与 HDR 选项。
  4. 点「开始转换」(快捷键 ⌘Return)。参数在任务开始时会被快照锁定,运行中不可修改。
  5. 完成后在报告里查看每张照片的结果;点「最近结果…」可以重试交付、定位文件或打开输出文件夹。

转换一份照片会生成一个结果目录(见 §9 的命名规则),而不是散落的文件。

首次打开提示:发布版为自签名(ad-hoc),未做 Apple 公证。若 macOS 拦截首次打开,请到「系统设置 → 隐私与安全性」放行,或在访达中 Control-点按应用图标选择「打开」。安装后的 App 不依赖 Python、FFmpeg、ExifTool 或 Homebrew。

2. 界面与导入

2.1 照片队列

界面采用单一工作台。顶部集中放置转换方向、添加照片、保存位置与「更多选项…」。照片区常驻「待转换 / 已完成 / 静态照片 / 需检查 / 全部」分类及数量,默认显示待转换。右侧预览默认关闭,可通过「预览」按钮或 ⌥⌘P 打开;窄窗口自动调整布局。界面跟随系统深浅色外观,强调色采用接近琥珀色的系统原生橙色。

扫描与转换采用受内存预算约束的有限并行处理。已确认的静态照片单独计数并跳过,不占动态转换进度;来源清单变化时会要求重新扫描。

照片区域可在缩略图与列表之间切换,较窄时自动显示列表。列表仍显示文件名、格式/HDR、可用时的封面时间与状态;选中照片后可查看厂商、文件路径及识别详情。

打开预览窗格后,照片下方有时间条:封面标记表示原始封面位置,鼠标悬浮时在卡片中显示对应的视频帧和实际时间,移开后恢复静态照片。缺失或有歧义的封面会提示,无法读取的视频不提供伪造预览。预览只读取原始动态主轨,不修改封面。

分类只筛选显示,开始转换仍处理全部已选来源,其中已确认的静态照片会跳过。历史任务通过「最近结果…」打开。

2.2 四种导入来源

来源 说明
选择文件 文件选择器,可多选
选择文件夹 递归读取其中照片
拖放 把文件直接拖入队列区域
扫描系统图库 通过 PhotoKit 枚举图库资产并识别格式,可限定相册范围(见 §8)

2.3 快捷键

快捷键 功能
⌘O 选择照片
⌘R 重新扫描
⌘Return 开始转换
⌘. 停止
⌘, 导出设置

2.4 任务运行规则

3. 转换方向与格式支持

厂商支持的口径是「解析器能验证的布局」,不是对所有机型与固件版本的承诺。编辑过、被聊天软件转发过的照片可能已经丢失内嵌视频,丢失的视频无法凭静态图恢复。

3.1 安卓 → 苹果

输入 说明
Google 兼容 Motion Photo(JPEG) 支持主 XMP、Extended XMP,以及经完整验证的封面元数据恢复
华为 / 荣耀(LIVE_ 尾标) 含以原始帧号记录封面的特殊路径(见 §4)
三星 SEF 含 SEF 尾标结构
三星 HEIC 仅已验证的 mpvd/SEF 布局;保留原始 HEVC 图像项目,不转码为 JPEG
OPPO / 一加 OPPO 容器布局
vivo V2 vivo V2 容器布局

输出为 Live Photo 配对:静态图(JPEG/HEIC)+ 独立 MOV。静态图与 MOV 通过内容标识(ContentIdentifier)配对,输出只包含经验证的静态图像载荷与必要扩展,动态视频与音频只存在于 MOV 中。

3.2 苹果 → 安卓

按 Apple 内容标识匹配完整静态图与 MOV,读取其中的 still-image-time 定时标记并对齐实际视频帧。

目标 厂商
JPEG Google/通用、小米、三星(写 SEF 尾标)、华为、荣耀、OPPO、vivo V2
HEIC 仅三星;保留已有图像、缩略图、增益图编码与属性。JPEG 不会为此重新编码成 HEIC。Google 与小米的动态照片不使用 HEIC,这两个目标请用 JPEG

4. 核心机制一:封面帧如何定位

封面时间指动态视频中被选作封面的那个瞬间,与照片的拍摄日期是两回事,不要混淆。

转换时,留刻读取源文件记录的封面时间,沿实际媒体时间线映射到真实帧,再写入 Live Photo 的 still-image-time 定时标记;反向转换时读回该标记,恢复安卓侧的封面位置。

关键规则:

5. 核心机制二:不重新编码与逐样本校验

发布与源文件保护:

遇到同名旧结果时:

批次中每份结果的状态为四种之一:converted(已转换)、resumed(已验证跳过)、skipped(已跳过)、failed(失败)。

6. 核心机制三:HDR 的处理方式

输入情况 处理
已有 Ultra HDR(JPEG 增益图) 增益图与参数原样保留,主图保留原始编码
旧 Apple 增益图(HEIC/JPEG) 按 Apple 公开的 Rec.709 亮度模型转换成 Ultra HDR 增益图;只重编码增益图本身,SDR 主图从不重编码。增益头程(stops)有效范围为 (0, 16]
ISO 增益数据(ISO/TS 21496-1) 参数完整可解释时保留编码图像、仅补充元数据,可升级为 Ultra HDR + ISO 输出
HEIC 直通 保留编码图像项目、辅助数据与受支持属性;tmap 等变体在 HEIC 内保留,不臆测成旧增益模型
荣耀私有 EHDR 静态扩展以不透明数据原样保留并做字节校验。注意:保留不等于 Apple 设备能按荣耀私有模型渲染
SDR 保持 SDR,不凭空生成增益图
未知/私有 HDR(未知 tmap、PQ/HLG、复杂 HEIF 等) 不静默转成 SDR、不虚构增益图,明确报告;可选择保留原 HEIC 编码

细节与边界:

7. 辅助轨:一般人不知道的第二条视频轨

7.1 什么是辅助轨

部分动态照片的内嵌视频里不止一条视频轨:与封面对应的连续动态视频是主运动轨;同容器里的第二条视频轨叫辅助影像轨(简称辅助轨)。实测样片中,辅助轨可能只有 1 帧、分辨率却更高(如 2048px 宽)——它更像一张高清关键帧,而不是一段视频。引擎的规则是:一张动态照片最多允许一条辅助轨。

注意别与另外两个概念混淆:JPEG 里的 MPF 辅助图像(增益图等,清单字段 auxiliary_sha256 指它)和 HEIC 的辅助数据,都不是这里说的辅助轨。辅助轨特指视频辅助轨。

7.2 导出模式

在「导出设置 → 输出内容」中选择(仅安卓 → 苹果方向):

模式 行为
仅 Live Photo(默认) 只用选定轨道生成 Live Photo
Live Photo + 辅助轨 生成 Live Photo 之外,把辅助轨另存为独立文件 <原名>.auxiliary.mov。请与实况配对分开保存
仅导出辅助轨 只导出辅助轨为独立 MOV(结果目录后缀 .auxiliary-export),不生成 Live Photo、不含音频;此模式下交付目标只能是文件夹
Live Photo + 高清候选照片 导出选定封面的 Live Photo,并为其余高清封面分别导出照片;可选择全部实况或仅主照片实况

原片没有辅助轨时,独立辅助视频操作会报错;多照片模式仍会导出原始封面的 Live Photo,并在详情中报告没有额外候选。

7.3 拿辅助轨当动态视频?有条件

「视频轨道」可以在主运动轨 / 辅助影像轨之间切换,但规则很严:

界面里也会直接提示:「辅助轨可能只有一帧,不能代替连续动态视频。」

7.4 独立导出的规格

7.5 高级:修复零时长辅助轨

个别辅助轨唯一帧的时长字段为 0,系统读不到有效样本,默认导出会失败。高级参数里有开关「允许修复辅助轨的零时长」(默认关闭):

7.6 在应用中选择高清候选封面

照片卡片的「封面」菜单可以切换原始照片与辅助轨中的高清候选。列表视图可右键选择「选择高清候选封面…」。选择按照片分别保存,转换运行期间不能修改。

切换封面只替换静态照片,并将实况封面标记移到对应时间;连续动态仍使用主运动轨。Google 高清帧元数据中的时间优先于辅助轨自身的 PTS,不能映射到主视频的候选不能用于实况封面。

候选画面会按视频方向解码为 JPEG;不会挪用原始封面的 HDR 增益图。零时长帧仅在临时解码副本补帧长,不改原片或导出主视频的时间表。此过程不代表照片编码的无损直拷。

7.7 多照片模式的两种交付方式

选择「Live Photo + 高清候选照片」后,可在「候选照片的格式」中选择:

辅助候选文件使用 .candidate-001.jpg 等名称;另存的原封面使用 .original 后缀。全部实况模式同时生成同名 MOV。导入系统图库时,每份候选作为独立照片入库,不藏在同一资产的 alternatePhoto 中。默认只保存文件,选择图库交付后才入库。

候选 JPEG 内记录其相对视频时间和候选序号;JSON 清单开启时还会记录完整的封面选择、解码及配对校验信息。未验证任意厂商的 HDR 辅助视频能保留 HDR。

8. 系统图库:识别、导入与监测

留刻只用公开的 PhotoKit 接口访问「照片」图库,不直接读写图库文件。图库权限在你首次进入图库功能时才申请,应用启动时不会自动索取。

8.1 扫描与识别

8.2 原片与编辑版

图库版本(导出设置)二选一,默认未修改原片(保留原始 HDR):

8.3 直接导入图库

8.4 iCloud 与增量监测

9. 批量、交付与共享

9.1 交付目标

交付方式 安卓→苹果 苹果→安卓
保存到文件夹 ✓ ✓
导入系统图库 ✓ —
文件夹并导入图库 ✓ —
直接共享 — ✓
文件夹并共享 — ✓

「仅导出辅助轨」模式下只能保存到文件夹。主按钮文案会随交付方式变化(如「转换并导入图库」「导出辅助轨」)。

9.2 输出命名

每个源文件生成一个结果目录(静态图与 MOV 默认名为 photo.jpg / photo.mov,原始文件名记录在清单的 original_filename 中,输出文件的修改时间沿用源文件时间):

情形 目录名
安卓 → 苹果 <相对路径>.livephoto(内含静态图 + MOV,及开启时的清单)
仅导出辅助轨 <相对路径>.auxiliary-export
苹果 → 安卓 <相对路径>.motionphoto

9.3 系统共享(苹果 → 安卓)

9.4 报告与最近结果

10. 设置全表

打开方式:顶部「更多选项…」打开设置面板。带 * 的为高级参数,默认折叠。

分组 设置 选项 / 默认值
方向 转换方向 安卓→苹果实况(默认)/ 苹果实况→安卓
输出位置 输出方式 见 §9.1,随方向与模式联动
输出位置 目标相册名 默认「留刻转换结果」,留空回退默认
输出位置 图库版本 未修改原片(默认)/ 当前编辑版
输出内容(→苹果) 导出模式 仅 Live Photo(默认)/ +辅助轨 / 仅辅助轨
输出内容(→苹果) 视频轨道 主运动轨(默认)/ 辅助影像轨
HDR(→苹果) 尝试兼容非 Ultra HDR 默认开
目标格式(→安卓) 目标厂商 Google/通用(默认)、小米、三星、华为、荣耀、OPPO、vivo V2
目标格式(→安卓) 照片格式 JPEG·Ultra HDR / HEIC·保留原编码(仅三星可选,其余厂商强制 JPEG)
图像质量(→安卓) 保留 JPEG 原图编码 默认开(开时不重压)
图像质量(→安卓) 主图质量 / 增益图质量 滑杆 1%–100%,默认均为 95%
校验与报告 导出清单与 JSON 报告 默认关(见 §11)
高级 * 封面时间未记录时 报告错误(默认,推荐)/ 使用视频中点
高级 * 封面时间的含义(时间域) 自动检查(默认,推荐)/ media(样本时间)/ presentation(播放时间)
高级 * 允许修复辅助轨的零时长 默认关(见 §7.5)

高级区警示原文:「自动模式检查封面位置,遇到歧义会报告错误。仅在了解原片时间轴时修改。」

11. 清单(manifest)与报告

每个结果目录在开启「导出清单与 JSON 报告」时包含一份 manifest.json(该开关默认关:关时仅导出媒体,但内部校验照常进行,本次报告仍可在应用内查看;图库导入不依赖清单文件)。清单主要字段:

字段 含义
source / source_sha256 源文件路径与指纹
identifier 本次配对的内容标识 UUID
source_format 识别到的源格式(如 samsung-sef、vivo-v2)
source_timestamp_us / source_timestamp_tag 源封面时间与来源标签
timing 时间线报告:时间域、封面秒数、对齐误差 snap_error_seconds、计时策略(源 XMP / 视频元数据 / 华为帧号 / 中点)、所选轨道与角色、帧数与分辨率
hdr 输入/输出 HDR 状态与原因
primary_coding_sha256 静态主图编码哈希
auxiliary_sha256 静态图内 MPF 辅助图像(增益图等)逐张哈希——注意这是图像辅助数据,不是 §7 的视频辅助轨
auxiliary_video 辅助轨导出信息(轨道号、帧数、分辨率、时长、哈希、是否含音频、零时长修复记录)
output_sha256 / warnings 输出文件哈希与全部警告

批次报告文件名为 report-<日期>-<时间>-<随机>.json,含计数与逐文件结果,历史报告不自动删除。

隐私提醒:报告与清单可能包含源文件路径、EXIF、日期与哈希,请只保存在本地,不要公开上传。留刻本身不上传任何内容。

12. 命令行工具(CLI)

仓库附带一个独立的 Python 命令行工具,与 App 共用原生引擎的部分能力。范围提醒:CLI 只提供 Google Motion Photo(JPEG)工作流,不包含 App 的 HEIC、厂商容器、辅助轨与图库功能。

环境:Python 3.9+、macOS 12+、Xcode Command Line Tools。首次运行会自动编译原生组件(有提示),之后直接使用。

# 在仓库根目录
./motion-live --help
./motion-live --version        # 0.1.0

# 1) 只读扫描:查看封面时间、HDR 与格式问题(文件或目录,递归)
./motion-live scan ~/Photos/待转换

# 2) 批量转换(输出目录必填,必须位于输入目录之外)
./motion-live convert ~/Photos/待转换 -o ~/Photos/已转换

# 3) 校验已有结果与转换时记录的校验值是否一致
./motion-live verify ~/Photos/已转换/sample.jpg.livephoto

convert 的选项:

选项 默认 说明
--missing-time {error,midpoint} error 缺封面时间时报错;midpoint 用视频中点,必须主动选择
--legacy-hdr {auto,preserve} auto auto 尝试转换已有的旧 Apple 增益图;普通 SDR 不生成 HDR;preserve 原样保留
--time-domain {auto,media,presentation} auto 检查样本与播放两条时间线,歧义时报错;可显式指定

行为说明:输入只接受 .jpg/.jpeg(跳过符号链接);普通静态 JPEG 记为 skipped,损坏的动态照片记为 failed,有失败时退出码为 1;每份结果生成 <原名>.livephoto/ 目录(photo.jpg + photo.mov + manifest.json),并在输出根目录写批次报告;已存在且指纹/设置一致的结果记为 resumed,不一致则报错要求更换输出目录。CLI 发布采用不覆盖的一次性原子发布,并把源文件的访问/修改时间保留到输出上。

解析严格性(了解即可):动态照片的判定依赖 GCamera XMP 与容器结构,视频必须位于文件尾部并通过完整的 box 结构校验,绝不靠搜索文件签名猜测;Ultra HDR 声明了却没有 MPF 辅助图会直接报错。

13. 疑难排解

现象 / 报错 原因与处理
导入后在 iPhone 上不动 多半是文件未经转换直接拷贝,或配对/封面标记不完整。用留刻转换并通过图库导入或配对文件传输后,在「照片」中长按即可播放
「封面时间缺失」 源文件没有可验证的封面时间。确认原片未经聊天软件/编辑器处理;确需继续时在高级参数改「使用视频中点」(结果会注明策略)
「封面时间有歧义(media / presentation 指向不同帧)」 两条时间线不一致。在高级参数中指定时间域,或换回未经编辑的原片
「辅助轨只有 1 帧,不能作为动态视频」 预期行为。改用主运动轨,或用「仅导出辅助轨」把它单独导出为普通视频
「原片没有辅助视频轨」 该照片只有一条视频轨,辅助轨相关模式不适用
「同名输出已存在且内容或设置不同」 旧结果与本次不一致,应用拒绝覆盖。换输出目录,或在弹窗中明确选择覆盖
「图库去重记录不可读,已停止写入」 去重记录损坏时为防重复导入而停写。检查 ~/Library/Application Support/Motion-Live/ 下记录文件,或联系开发者
HEIC 转 JPEG 时提示 HDR 不能安全提取 该 HEIC 的 HDR 结构不受支持。改选「HEIC · 保留原编码」输出
转换后 HDR 不显示 可能用了图库「编辑版」(编辑版可能无增益图),改用未修改原片;或源本身是 SDR/未知私有 HDR,报告中会写明原因
首次打开被 macOS 拦截 自签名未公证。在「系统设置 → 隐私与安全性」放行,或访达中 Control-点按 → 打开
图库扫描不到/提示需下载原件 资源只在 iCloud。在图库选择界面开启下载选项后重试

14. 已知限制


本手册依据留刻当前源码、产品说明与校验范围编写。若手册与应用内提示不一致,以应用内提示与结果报告为准。