新增 Live Photo 正式能力:单视频、二宫格、三宫格、四宫格、三连拼图、 长视频低成本诊断。增加 references/live-photo-production.md 生产规范、 scripts/ 工具链(contact sheet / .pvt 打包 / Apple metadata)、 validator R8 visual bounds + R9 title gap、文档约束测试。 由 Codex 完成主体实现。
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""Package a JPG/MOV pair as an AirDrop-friendly Live Photo .pvt bundle.
|
|
|
|
Run with:
|
|
|
|
UV_CACHE_DIR=/private/tmp/uv-cache \
|
|
UV_TOOL_DIR=/private/tmp/uv-tools \
|
|
uvx --from makelive python scripts/package-live-photo.py IMG.JPG IMG.MOV
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
from makelive import save_live_photo_pair_as_pvt
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Package a JPG/MOV pair as a Live Photo .pvt bundle.")
|
|
parser.add_argument("jpg", type=Path, help="Key photo path, usually 1080x1440 JPG.")
|
|
parser.add_argument("mov", type=Path, help="Paired H.264 MOV path.")
|
|
args = parser.parse_args()
|
|
|
|
jpg = args.jpg.expanduser().resolve()
|
|
mov = args.mov.expanduser().resolve()
|
|
if not jpg.exists():
|
|
raise SystemExit(f"missing JPG: {jpg}")
|
|
if not mov.exists():
|
|
raise SystemExit(f"missing MOV: {mov}")
|
|
|
|
asset_id, pvt_path = save_live_photo_pair_as_pvt(str(jpg), str(mov))
|
|
print(asset_id)
|
|
print(pvt_path)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|