- 添加 PRD、技术规范、交互规范文档 (V0.2) - 创建 Swift Package 和 Xcode 项目 - 实现 LivePhotoCore 基础模块 - 添加 HEIC MakerNote 元数据写入功能 - 创建项目结构文档和任务清单 - 添加 .gitignore 忽略规则
20 KiB
PRD|Live Photo 制作与动态壁纸引导 App
适用平台:iPhone / iPad(iOS / iPadOS)
文档版本:V0.2(草案)
日期:2025-12-13(Asia/Manila)
作者:——(待填)
1. 文档信息与变更记录
2. 背景与机会
用户希望把自拍视频/短片制作成“像苹果实况照片(Live Photo)一样”的内容,用于相册浏览、分享(例如发微信)、并在支持的系统版本上设置为锁屏动态壁纸。
痛点 1:现有转换工具分散,流程复杂(导入、裁剪、转码、导出、再去相册设置)。
痛点 2:很多用户不知道 iOS/iPadOS 不同版本对 Live Photo 壁纸的支持差异,导致“做出来不能动”。
痛点 3:对尺寸/时长/关键帧(封面)选择缺乏指导,成品效果不稳定。
本 App 提供一站式:导入视频 → 生成系统可识别的 Live Photo → 保存到相册 → 分步骤引导设置壁纸。
3. 产品目标与非目标
3.1 目标(Goals)
G1:用户可从“视频/照片素材”快速生成“系统相册识别的 Live Photo”,并保存到相册。
G2:提供清晰的“设置为锁屏动态壁纸”引导,降低因系统版本/设置项导致的失败率。
G3:通过模板与提示,帮助用户得到高成功率的“可播放、可分享、封面好看”的作品。
G4:适配 iPhone 与 iPad,不同屏幕与比例下提供合理裁剪与预览。
3.2 非目标(Non-goals)
不使用任何私有 API 直接替用户设置系统壁纸(App Store 会拒)。
不做云端素材社区/版权图库(可在后续版本作为增长模块另立项)。
不保证所有历史系统版本都能播放 Live Photo 壁纸动画(受系统能力限制)。
4. 目标用户与使用场景
4.1 目标用户(Personas)
P1:普通用户——想把自拍视频做成动态壁纸,但不懂格式/设置路径。
P2:内容创作者——需要批量把短视频转 Live Photo 进行分享与展示。
P3:设计/审美用户——关注裁剪、封面帧、色彩与动效节奏。
4.2 核心场景(Scenarios)
S1:用户选择一段 2-5 秒视频,生成 Live Photo,保存并设置为锁屏动态壁纸。
S2:用户选择“照片 + 视频”合成(照片做封面),并指定关键帧。
S3:用户生成后想发微信:需要在相册里保持 Live Photo 形态并可被微信识别。
S4:用户在 iPad 上制作,导出后在 iPhone 上设置壁纸(跨设备)。
5. 兼容性与约束
5.1 系统与功能可用性(建议写在 App 内)
Live Photo 生成与保存:iOS/iPadOS 14+(建议 15+)可实现(依赖 Photos / AVFoundation)。
“Live Photo 作为锁屏动态壁纸播放”:iOS 17 或更高版本支持在锁屏唤醒时播放(iPhone 官方说明)。
iPadOS 锁屏支持 Live Photo 的动效选项(官方 iPad 用户指南包含 Live Photo 动效按钮说明)。
注意:Live Photo 动效通常只作用于锁屏;主屏一般显示静态图(以系统版本为准)。
低电量模式等系统状态可能导致动效不可用(需在引导里提示)。
5.2 平台约束(必须写清)
iOS/iPadOS 没有公开 API 允许第三方 App 直接设置系统壁纸:只能引导用户在系统界面完成设置。
禁止使用私有 API、越狱方案或企业签名绕过(不符合 App Store 上架)。
6. 需求范围(MVP)
6.1 MVP 功能列表
导入:从相册选择视频;可选:选择封面照片(可不选,默认从视频自动取帧)。
编辑:裁剪比例(适配 iPhone/iPad 锁屏常见比例)、裁剪时长(建议 2-3 秒)、选择封面帧(关键帧)。
生成:将素材合成为系统可识别 Live Photo(照片 + pairedVideo + 元数据)。
保存:保存到系统相册(Live Photos 相簿 / 最近项目)。
引导:分步骤引导用户把 Live Photo 设置为锁屏动态壁纸(按系统版本展示不同路径)。
质量检测:生成后做一次本地校验(能否被系统识别为 Live Photo;失败原因提示)。
6.2 后续版本(Backlog)
模板:预设“人物/风景/文字”裁剪模板、调速/慢动作适配。
批量生成:一次导入多段视频,批量导出 Live Photo。
小组件/主题包:壁纸合集管理(订阅制/一次性购买)。
分享:一键分享(注意平台对实况/视频的支持差异)。
7. 用户流程
7.1 主流程:视频 → Live Photo → 设置锁屏
进入首页,点击【从相册导入视频】。
选择视频后进入编辑页:裁剪比例、裁剪时长、选择封面帧。
点击【生成 Live Photo】;显示进度与阶段文案(处理视频 / 写入元数据 / 保存准备)。
生成成功 → 点击【保存到相册】;提示“已保存,可在 Live Photos 相簿查看”。
进入【设置壁纸引导】:按步骤提示用户在系统【设置 > 墙纸】选择 Live Photo 并开启 Live 动效。
7.2 失败/异常流程
用户拒绝相册权限:展示解释页,并引导去系统设置开启。
生成失败(编码/元数据写入失败):提示原因 + 建议(更换视频编码、缩短时长、降低分辨率)。
保存成功但系统未识别为 Live Photo:提示“请在相册查看是否有 Live 标识”,并提供重新生成按钮。
8. 功能需求详述
8.1 首页
入口 1:导入视频(必选)。
入口 2:导入照片 + 视频(可选,作为高级模式)。
入口 3:教程/引导(包含系统版本差异、常见问题)。
展示最近生成的作品列表(MVP 可只展示最近 10 条)。
8.2 编辑页
裁剪比例:常用预设(iPhone 锁屏 / 全面屏 / 4:3 等),支持手动缩放与拖拽。
时长:默认 3 秒;可选范围 1.5-5 秒(过长降低成功率与体积)。
封面帧:滑杆选择时间点;支持“智能推荐封面”(清晰、有人脸、少抖动)。
预览:静态预览 + 动效预览(模拟锁屏唤醒播放方式)。
8.3 生成引擎(核心)
输入:视频(必选) + 可选封面照片。
输出:照片文件(建议 HEIC)+ 视频文件(MOV,H.264/HEVC)+ 绑定元数据(identifier、still-image-time 等)。
关键规则:照片与视频共享同一 content/asset identifier;视频包含 still-image-time 标记关键帧。
对视频进行重封装(re-mux)以写入元数据;必要时重新编码(可配置:优先保留编码,失败则转码)。
导出参数建议:分辨率/比特率上限以保证速度与成功率;音频可选保留/移除。
本地校验:生成后尝试用系统方式加载校验(如 PHLivePhoto 请求加载)并输出可读错误。
8.4 保存到相册
使用 Photos 写入:photo 资源 + pairedVideo 资源。
成功回调:提示“已保存”;失败回调:展示错误与建议。
相册归类:系统会自动归类到 Live Photos;App 内保存最近作品列表。
8.5 动态壁纸设置引导
按系统版本展示不同文案与截图示意。
iOS/iPadOS 17+:引导用户进入【设置 > 墙纸 > 添加新墙纸 > 照片 > Live Photo】并开启 Live 播放选项。
iOS/iPadOS 16:明确提示系统限制;提供替代方案(设置静态壁纸/升级系统建议)。
常见失败提示:低电量模式、‘Motion not available’、素材参数不兼容等。
提供按钮:打开系统设置(尽量深链;无法深链则打开设置首页)。
9. 非功能需求
9.1 性能与体验
生成过程需有可见进度与阶段提示;失败可重试。
中间文件自动清理;不占用过多存储。
错误提示要“可行动”:给出下一步(缩短时长、降低分辨率、重新选择素材)。
9.2 隐私与合规
默认本地处理:不上传用户照片/视频。
权限最小化:仅在需要时请求相册/相机/麦克风权限,并提供用途说明。
如接入统计:匿名化、可关闭,并在隐私政策中说明。
10. 数据埋点与指标
10.1 核心漏斗
导入视频 → 进入编辑 → 点击生成 → 生成成功 → 保存成功 → 进入壁纸引导 → 引导完成(点击“完成/已设置”)。
10.2 关键指标(KPIs)
生成成功率(按机型/系统版本/视频参数分层)。
保存成功率(相册写入成功)。
引导完成率(壁纸设置引导)。
7 日留存(如后续商业化,再加转化率)。
11. 里程碑建议
M0:技术预研(Live Photo 合成可行性、系统版本验证、参数边界)。
M1:MVP(导入视频 → 生成 → 保存 → 基础引导)。
M2:适配 iPad + 编辑体验提升(比例模板、预览增强)。
M3:稳定性与质量(失败提示、自动降级转码、素材建议)。
12. 验收标准(MVP)
在 iPhone(至少 2 款机型)与 iPad(至少 1 款机型)上:从相册导入视频可生成 Live Photo 并保存到系统相册。
生成的 Live Photo 在系统相册中显示为 Live Photo(有 Live 标识,长按可播放)。
在支持 Live Photo 锁屏播放的系统版本上,用户可按引导步骤完成设置并在唤醒锁屏时播放。
在不支持版本上,App 必须明确提示限制并给出替代方案,避免误导。
不使用私有 API,权限声明齐全,可通过 App Store 审核。
13. 风险与对策
R1:系统版本差异 → 版本检测 + 差异化引导文案。
R2:素材多样导致失败 → 参数归一化 + 自动降级转码 + 可读错误提示。
R3:用户期待“主屏也会动” → 产品内明确说明:通常仅锁屏动效。
R4:审核风险 → 只做引导,不做自动设置;不接触私有 API。
14. 参考资料(TBD)
Apple Support:Set a Live Photo as your Lock Screen wallpaper (iOS 17+): https://support.apple.com/120734
Apple Support:Change your iPhone wallpaper(含 Live Photo 入口说明): https://support.apple.com/102638
Apple iPad User Guide:Create a custom iPad Lock Screen: https://support.apple.com/guide/ipad/ipad782d4de8/ipados
Apple iPad User Guide:Change the wallpaper on iPad: https://support.apple.com/guide/ipad/ipad997d908e/ipados
15. 信息架构与页面清单
本节用于指导你用 AI 编码时的页面/路由/组件拆分。
15.1 信息架构(IA)
首页(Home):导入视频 / 高级合成 / 教程与FAQ / 最近作品列表
编辑页(Editor):比例裁剪、时长裁剪、封面帧选择、预览、生成按钮
生成进度页(Processing):阶段进度、取消/后台、失败原因与重试
结果页(Result):保存到相册、再次编辑、进入壁纸引导、分享(后续)
壁纸引导页(Wallpaper Guide):按系统版本展示步骤、常见问题、跳转设置
作品库(Library - MVP可选):最近作品、再次导出、删除缓存
设置(Settings):权限状态、清理缓存、隐私、关于、反馈
15.2 页面与路由(建议命名)
16. 用户故事与验收标准(更细颗粒)
16.1 用户故事(User Stories)
16.2 验收标准(按故事拆分)
US-01:生成后在系统相册中显示 Live 标识;长按可播放;不出现仅照片或仅视频的孤儿资源。
US-02:裁剪后的导出在锁屏预览时主体居中,用户可通过手势调整;导出不拉伸。
US-03:用户选定封面帧后,相册静态显示与导出封面一致(允许系统做轻微处理)。
US-05:引导页能根据系统版本显示正确路径;并提示‘低电量模式/系统限制’等常见原因。
US-06:错误提示包含:错误标题 + 可能原因 + 可点击的解决建议(例如缩短时长/降低分辨率/改用H.264)。
17. 详细功能需求表(可直接喂给 AI 编码)
17.1 功能点-输入-处理-输出
17.2 关键约束与参数建议
推荐时长:2-3秒(越长越大且更容易失败)。
推荐分辨率上限:以锁屏显示为目标,通常不需要超过 1440p;可按设备上限做自适应。
帧率:建议 30fps;高帧率素材可降到30fps以提升兼容性。
编码:优先保留原编码;失败时降级到 H.264 + AAC(更通用)。
HDR/Dolby Vision:可提示用户可能存在兼容性问题;必要时转 SDR。
18. 技术方案概述(研发实现导向)
18.1 模块划分
18.2 Live Photo 合成关键点(落地检查清单)
生成 assetIdentifier(UUID字符串)。
图片侧:写入 Apple MakerNote/相关标识(建议HEIC)。
视频侧:写入 QuickTime content identifier 元数据 + still-image-time timed metadata track。
保存侧:PHAssetCreationRequest 同时写入 .photo 与 .pairedVideo。
校验侧:尝试从相册 asset 请求 PHLivePhoto 或检查 Live 标识是否出现。
18.3 权限与Info.plist
NSPhotoLibraryUsageDescription:读取相册用于选择素材
NSPhotoLibraryAddUsageDescription:保存生成的 Live Photo 到相册
NSCameraUsageDescription:如后续加入拍摄入口
NSMicrophoneUsageDescription:如保留或录制音频
19. 数据模型与本地存储
19.1 本地作品模型(示例)
WorkItem:id、createTime、sourceVideoLocalID、exportParams(ratio/trim/keyFrame)、resultAssetLocalID(相册asset.localIdentifier)、status(processing/success/failed)、errorCode、thumbnailPath。
缓存目录:/Library/Caches/LivePhotoBuilder/{workId}/(中间mov、heic、日志)。
清理策略:成功后保留缩略图与参数;中间文件按设置或定期清理。
20. QA 测试计划(MVP)
20.1 测试矩阵
20.2 用例清单(样例)
从相册导入竖屏30fps H.264视频,默认参数生成并保存,确认相册显示Live标识且可播放。
导入60fps HEVC视频,选择3秒裁剪,生成成功;若失败需自动降级转码并提示。
导入HDR视频,提示可能兼容性风险;选择转SDR后生成成功。
拒绝相册权限后再次进入导入流程,能看到解释页并可跳转系统设置。
在iOS 16设备:壁纸引导页必须显示“系统限制/不支持动效”的文案与替代方案。
21. 合规、审核与版权
壁纸设置:不得宣称“一键自动设置系统壁纸”,应明确为“引导用户在系统中设置”。
权限说明:文案必须与实际用途一致,避免过度索权。
版权与内容:用户素材本地处理;若引入模板/素材库需提供版权声明与授权来源。
隐私政策:说明是否收集设备信息、崩溃日志与使用数据;提供关闭选项。
22. 文案与引导内容(可直接放App里)
22.1 关键页面文案(示例)
22.2 壁纸设置步骤卡片(iOS 17+ 示例)
打开【设置】->【墙纸】。
点击【添加新墙纸】->【照片】。
选择你刚保存的 Live Photo(带 Live 标识)。
点击屏幕左下角的【Live】按钮确保动效开启(若可见)。
保存并设置到锁屏。唤醒锁屏时,按压/触摸或系统动作会触发动效(以系统表现为准)。
提示:提示:若出现 “Motion not available”,请检查:是否开启低电量模式、是否选择了 Live Photo、素材是否过长/过大。
23. 开放问题(需你决策后再让AI编码)
商业化:免费+广告?一次性买断?订阅(模板/批量/高清导出)?
支持的最低系统版本:iOS 14/15/16?(决定了API与用户覆盖)
是否支持拍摄直接生成(AVCapture Live Photo Capture)作为后续版本?
是否需要“跨设备同步”(iCloud)保存作品参数/模板?
是否需要“微信分享优化”(检测相册资产是否仍为Live Photo形态)?
附录:表格汇总
表格 1
| 版本 | 日期 | 作者 | 说明 |
| --- | --- | --- | --- |
| V0.1 | 2025-12-13 | —— | 首版草案:功能范围、流程与需求拆解 |
| V0.2 | 2025-12-13 | —— | 补充:信息架构、用户故事、详细需求表、技术方案、QA/合规与开放问题 |
| V1.0 | —— | —— | (预留) |
表格 2
| 页面 | 路由/模块名 | 主要能力 | MVP |
| --- | --- | --- | --- |
| 首页 | HomeView | 导入入口、最近作品 | 是 |
| 编辑 | EditorView | 裁剪/封面/预览/生成 | 是 |
| 生成进度 | ProcessingView | 进度、取消、失败重试 | 是 |
| 结果 | ResultView | 保存、再次编辑、引导入口 | 是 |
| 壁纸引导 | WallpaperGuideView | 版本检测、步骤卡片、FAQ | 是 |
| 作品库 | LibraryView | 作品管理 | 可选 |
| 设置 | SettingsView | 权限、清理、隐私、反馈 | 可选 |
表格 3
| 编号 | 用户故事 | 优先级 | 备注 |
| --- | --- | --- | --- |
| US-01 | 作为用户,我想从相册选择一段视频并生成 Live Photo,这样我可以在相册长按播放。 | P0 | 核心闭环 |
| US-02 | 作为用户,我想裁剪比例以适配锁屏,避免设置壁纸后被系统裁掉关键主体。 | P0 | 需预设模板 |
| US-03 | 作为用户,我想选择封面帧(关键帧),这样锁屏静止画面最好看。 | P0 | 提供智能推荐 |
| US-04 | 作为用户,我想保存到相册并看到 Live 标识,确保微信等平台可识别为实况。 | P0 | 写入 pairedVideo |
| US-05 | 作为用户,我想得到清晰的设置壁纸引导,减少我找不到入口或不能动的困扰。 | P0 | 版本差异化 |
| US-06 | 作为用户,我希望失败时能看到原因和解决办法,而不是一句“失败”。 | P0 | 错误可行动 |
| US-07 | 作为高级用户,我想用‘照片+视频’合成,以照片为封面,视频为动效。 | P1 | 高级模式 |
| US-08 | 作为用户,我想一键清理缓存,避免占用太多存储。 | P1 | 设置页 |
表格 4
| 功能点 | 输入 | 处理/规则 | 输出/状态 | 优先级 |
| --- | --- | --- | --- | --- |
| 导入视频 | PHPicker选择视频 | 读取时长/分辨率/帧率/编码;提示不推荐参数 | 进入编辑页或提示不兼容 | P0 |
| 比例裁剪 | 视频画面 + 模板比例 | 支持拖拽/缩放;保持比例;实时预览 | 裁剪区域参数(scale/offset) | P0 |
| 时长裁剪 | 起止时间 | 默认3秒;限制1.5-5秒;对齐关键帧建议 | trimStart/trimEnd | P0 |
| 封面帧选择 | 时间点t | 提供静帧预览;可智能推荐t* | keyFrameTime | P0 |
| 生成Live Photo | 视频+裁剪+关键帧(+可选封面照) | 重封装写入content identifier、still-image-time;必要时转码 | photoURL + videoURL + 成功/失败 | P0 |
| 保存到相册 | photoURL+videoURL | PHAssetCreationRequest写入.photo与.pairedVideo | 相册新增Live Photo资产 | P0 |
| 引导设置壁纸 | 系统版本/设备类型 | 差异化步骤卡片;提示限制与FAQ | 用户完成率提升 | P0 |
| 缓存清理 | 中间文件目录 | 仅清理App生成缓存;不影响相册成品 | 释放存储空间 | P1 |
表格 5
| 模块 | 职责 | 关键框架/组件 |
| --- | --- | --- |
| MediaImport | PHPicker选择媒体、读取元信息 | PhotosUI, AVFoundation |
| EditorCore | 裁剪参数管理、预览渲染 | SwiftUI/UIView, AVPlayer |
| LivePhotoBuilder | 写入元数据、重封装/转码 | AVAssetReader/Writer, ImageIO |
| AlbumWriter | 写入系统相册 | Photos |
| Validation | 生成后校验是否为Live Photo | Photos, PHLivePhoto |
| GuideEngine | 版本检测、引导内容与FAQ | UIKit/SwiftUI |
| CacheManager | 中间文件管理与清理 | FileManager |
| Analytics | 埋点与漏斗 | 自研/第三方SDK |
表格 6
| 维度 | 覆盖建议 |
| --- | --- |
| 设备 | 至少2款iPhone(不同分辨率)+ 1款iPad |
| 系统 | iOS/iPadOS 17+(验证壁纸动效)+ iOS/iPadOS 16(验证限制提示) |
| 素材 | H.264/HEVC;30/60fps;SDR/HDR;有/无音频;竖/横屏 |
| 时长 | 1.5秒、3秒、5秒边界 |
| 权限 | 首次拒绝/后续开启;相册只读/读写 |
表格 7
| 场景 | 标题 | 正文/提示 | 按钮 |
| --- | --- | --- | --- |
| 生成中 | 正在生成 Live Photo | 正在处理视频并写入实况信息,请不要退出。 | 取消 / 后台继续 |
| 生成成功 | 生成成功 | 已生成实况照片。保存到相册后可在“照片”里长按播放。 | 保存到相册 / 去设置壁纸 |
| 保存成功 | 已保存到相册 | 你可以在“Live Photos”相簿找到它。 | 去设置壁纸 / 再做一个 |
| 不支持提示 | 当前系统限制 | 此系统版本无法将 Live Photo 作为可播放的锁屏壁纸。你仍可保存为实况照片,或升级系统后再设置。 | 了解原因 / 返回 |
| 低电量提示 | 可能无法播放动效 | 低电量模式可能导致锁屏动效不可用。 | 知道了 |