日期:2026-05-09
公开说明:本文是历史实验记录,可能提到本地私有样本、第三方样本或未随仓库发布的路径。开源仓库只提供生成方法、代码和调试工具;用户需要自行提供有权使用的模板资产。
目标:验证 AI/自定义视频是否可以导出为真正 iOS Live Photo,并进一步验证是否可以作为 iPhone 锁屏动态壁纸。
实现:
- Swift Package CLI:
livephoto-packager - 写入 photo
MakerApple[17] - 写入 MOV
com.apple.quicktime.content.identifier - 写入
com.apple.quicktime.still-image-time
输出:
output/live-photo.jpg
output/live-photo.mov
结果:
- macOS Photos 导入后可以合并为 Live Photo。
- iPhone Photos 可识别实况。
- 锁屏动态壁纸失败,提示动态效果不可用。
结论:
基础 Live Photo metadata 不足以通过锁屏动态壁纸校验。
样本:
IMG_0130 (1).HEIC
IMG_0130 (1).mov
原生 MOV 结构:
video: HEVC / hvc1, 1920x1440, 1.303333s, 38 frames
audio: PCM
track 3: video-orientation, 1 sample
track 4: live-photo-info, 38 samples, 144 bytes each
track 5: still-image-time + still-image-transform
实验:
- 原始 HEIC + 原始 MOV:可锁屏
- 新 UUID + 原始 HEIC metadata + 原始 MOV metadata tracks:可锁屏
- 原始视频重编码 + 原始 metadata tracks:可锁屏
- 自定义视频 + 原始 metadata tracks:不可锁屏
结论:
iPhone 原生 live-photo-info 与真实视频/相机运动有关,不能直接迁移到完全不同的视频上。
样本:
IMG_0135.HEIC
IMG_0135.mov
结构:
video: HEVC / hvc1, 1920x1440, 3.003333s, 88 frames
audio: PCM
track 3: video-orientation, 1 sample
track 4: live-photo-info, 88 samples, 144 bytes each
track 5: still-image-time + transform, start=1.468333s
实验:
output-static-template-migration/live-photo.jpg
output-static-template-migration/live-photo.mov
做法:
- 生成 3s / 88 frames 自定义视频
- 使用白桌面完整 photo metadata
- 复制白桌面
mebxtracks
结果:
- iOS Photos 能显示实况。
- 锁屏动态壁纸失败。
结论:
即使是静止/低运动 iPhone 原生样本,其 live-photo-info 仍不能作为通用模板。
样本:
<private third-party sample>.livp
拆包:
vendor-livp/IMB_ZyUbrU.HEIC.heic
vendor-livp/IMB_ZyUbrU.HEIC.mov
.livp 本质:
ZIP archive
third-party MOV 结构:
video: HEVC / hvc1, 1080x1920, 1.0s, 60fps, 60 frames
audio: AAC stereo
track 2: live-photo-info, time_base=1/60000, start=0.05s, duration=0.95s, 57 samples
track 3: still-image-time + still-image-transform, start=0.5s
third-party HEIC metadata:
MakerApple {
17 = "B315BEEB-AA1A-4D1C-B308-6BE144D1D9B0";
}
关键发现:
vendor live-photo-info:
57 samples
each sample = 144 bytes
all sample payloads are identical
这说明该样本使用的是固定中性 metadata,而不是从每个视频真实估计相机运动。
目标:
验证第三方样本中的中性 mebx 是否能迁移到我们自己的视频。
生成输入:
Samples/vendor-template-custom.mov
1080x1920
1s
60fps
HEVC hvc1
AAC silent audio
输出:
output-vendor-template-migration/live-photo.jpg
output-vendor-template-migration/live-photo.mov
做法:
- 从自定义视频 0.5s 抽封面
- photo 侧使用 third-party HEIC metadata template,仅替换
MakerApple[17] - MOV 主视频使用自定义视频
- MOV metadata tracks 复制 third-party
.livp的中性mebx - 写入全新 UUID:
9DF8D4D3-2C27-42F3-A514-D0A6277AE41B
结果:
- macOS Photos 合并为 Live Photo。
- iPhone Photos 显示实况。
- iPhone 锁屏动态壁纸可用。
结论:
compatible neutral live-photo-info 可以迁移到自定义视频。商业路线可行。
已创建:
iOSSpike/LivePhotoSpike.xcodeproj
目的:
验证 PHLivePhoto.request + PHAssetCreationRequest 保存路径是否会改变或修复锁屏兼容性。
状态:
- 工程已生成。
- 当前机器已安装 Xcode 26.4.1。
- 该 App Spike 尚未真机运行;CLI 和 Web API 已跑通。
测试项:
Control NativeBasic CustomTemplate Custom
判断:
- 如果 custom case 经 App 保存后可锁屏,App 路线可以作为后端打包的替代/补充。
- 如果仍不可锁屏,则 App 不会自动生成所需
live-photo-info。
公开说明:本节记录的是历史 Web MVP;当前开源仓库不包含 web/server.mjs,可运行入口以根目录 README.md 为准。
已实现:
scripts/make-livp.sh
web/server.mjs
web/static/*
验证:
swift build
./scripts/make-livp.sh Samples/vendor-template-custom.mov test-output.livp
curl -F 'video=@Samples/vendor-template-custom.mov' http://localhost:3000/api/generate第一版坑:
普通 ZIP + .livp 后缀
-> 本地可拆包
-> 但百度网盘/iOS 保存提示无法保存该格式
对比 third-party .livp 发现:
sample ZIP comment:
00020000003200013DBD000300013E20000564FF313030304C495650
含义:
0002
HEIC data offset
HEIC compressed size
0003
MOV data offset
MOV compressed size
313030304C495650 # 1000LIVP
sample internal file names:
IMB_ZyUbrU.HEIC.heic
IMB_ZyUbrU.HEIC.mov
修复:
- 新增
tools/set-livp-zip-comment.js scripts/make-livp.sh改为:zip -0 -X- 内部文件名使用
IMB_xxxxxxxx.HEIC.heic/mov - 写入 ZIP comment
修复后生成:
test-output-v2.livp
验证结果:
Web 生成 .livp
-> 上传百度网盘
-> iPhone 下载到相册
-> 相册识别实况
-> 可设置锁屏墙纸
-> 锁屏动态效果正常播放
结论:
.livp 的 ZIP comment 和内部命名影响第三方 App/网盘识别。商业交付必须生成 compatible .livp,不能只是普通 ZIP 改后缀。
.livp通过不同渠道下载/导入后是否都能保持锁屏能力?- 1 秒 60fps 是否是硬性规格,还是只是当前 neutral template 限制?
- 是否可以生成 2 秒或 3 秒的中性
mebx? - 是否可以把 neutral payload 参数化,而不是依赖第三方样本?
- 不同 iOS 版本是否对
.livp/Live Photo wallpaper 校验不同? - 目标 AI 视频模型输出是否能稳定压缩到 1 秒 60fps 且观感可接受?
.livp文件命名和 ZIP 内文件名是否影响导入体验?- ZIP comment 是否还有其他版本/字段含义,当前仅按第三方样本复刻。
- 是否需要输出 HEIC,还是 JPG 足够?
封装:
make-livp input.mp4 output.livp职责:
- 转码到
1080x1920 / 1s / 60fps / HEVC hvc1 - 生成静音 AAC 音轨
- 抽取
0.5s封面 - 生成 UUID
- 写 photo
MakerApple[17] - 写 MOV
content.identifier - 注入 neutral
mebx - 打包
.livp
第一版只支持固定规格。
当前已实现:
./scripts/make-livp.sh input.mp4 output.livp说明:
scripts/make-livp.sh会转码、抽帧、写 metadata、注入 neutralmebx、打包.livp。- 当前开源仓库保留 CLI 路径;历史 Web MVP 未随仓库发布。
- 当前已在 Xcode 26.4.1 下跑通 CLI。