照片墙 · 照片变视频(photo-wall)
Overview
帮忙碌的普通人,把手机/电脑里散落的一组照片,做成一段能在现场播放、有情绪、
不尬的短片:成长日记、家庭聚会、同学会、婚礼、毕业、生日、旅行、萌宠、节日、
缅怀……一键套用场景风格,自动加推拉运镜、淡入转场、中文文案和配乐。
两种产出,按需选:
- HTML 电影(默认,零依赖):make_movie.py 生成单个 .html,浏览器/电视/手机
直接打开全屏播放,照片内嵌、单文件可发微信,不需要 ffmpeg。
- MP4 视频(进阶):build_video.py 用 ffmpeg 渲染真 .mp4,适合拷 U 盘到电视、
发视频号/朋友圈。本机没装 ffmpeg 时自动提示改用 HTML 方案。
> 配乐:自带程序化氛围乐(Web Audio 实时合成,按场景情绪),开箱即响、零版权风险;
> 想要具体歌曲就让用户提供一段自有/免版权的 mp3(见 references/captions-guide.md)。
When to use
- 用户说"把照片做成视频/相册视频""做个成长日记/同学会/家庭聚会/婚礼/毕业/生日/旅行视频"
- 用户有一批照片想在某个场合(聚会、现场、朋友圈)展示并带音乐字幕
- 用户想"有趣、感动、能现场播放"的回忆片,而不是干巴巴的幻灯片
核心能力(场景预设)
先读 references/scenes.md 选场景,每个场景已内置:主题色、节奏(每页停留)、
字幕风格、色调滤镜、配乐音阶、字幕模板。十个场景:
growth(成长日记) · family(家庭聚会) · reunion(同学会) · wedding(婚礼) ·
graduation(毕业) · birthday(生日) · travel(旅行) · pet(萌宠) ·
holiday(节日) · memorial(缅怀)。
自定义主题(即插即用,核心能力)
用户不一定说得清要哪个预设场景——他说的是"乔迁新居""给奶奶做寿辰"
"健身一年蜕变"这种具体需求。这时不要硬套预设,而是即时生成一套专属主题
(色彩 / 节奏 / 音乐 / 字幕文案方向 / 滤镜全套),做到:
> 用户上传照片文件夹 + 说一句需求 → 直接出视频。
落地脚本 scripts/theme_from_request.py:把一句话需求转成 theme.json(含渲染参数 + 文案方向),
再交给 make_movie.py --theme 渲染。它内置 18+ 场合库(乔迁/满月/退休/开业/升学/健身/
老友重逢/缅怀…),识别不到场合也能按"喜庆/温馨/怀旧/浪漫/庄重/欢快/清爽"情绪兜底。
详见 references/theme-design.md。
工作流
1. 确认场景与素材
- 问清用途:
- 说得出预设场景(成长日记/同学会/婚礼…)→ 用
--scene。 - 说不清或说的是具体需求(乔迁/寿辰/蜕变/重逢…)→ 走自定义主题(见下)。
- 实在没方向 → 一句话反问:"这是喜庆的、温馨的、还是怀旧/庄重的?"
- 让用户把照片放进一个文件夹(或选中多张),最好文件名带日期以便自动排序。
- 问要不要字幕:要就引导用
caps.txt(每行一句,顺序对应)或caps.json(按文件名映射);
不要就纯氛围片。字幕写法见references/captions-guide.md。 - 问有没有自备音乐 mp3(可选);没有就用内置氛围乐。
2. 生成(执行脚本)
A. 自定义主题(推荐:用户只给需求时)
先把需求落成主题,再把照片渲染成片——两步即插即用:
# 第 1 步:需求 → 主题 JSON(自动配色/节奏/音乐 + 给文案方向)
python "{SKILL_ROOT}/scripts/theme_from_request.py" \
--request "乔迁新居,温馨喜庆" --photos 18 --out theme.json
# 第 2 步:主题 + 照片 → HTML 电影(零依赖,任何机器能放)
python "{SKILL_ROOT}/scripts/make_movie.py" \
--images "D:/照片/乔迁/*" --theme theme.json \
--title "乔迁之喜 · 2026" --subtitle "一屋两人三餐四季" --out 乔迁.html
> theme.json 里的 copy 段已给出片头/字幕建议,照着改成贴合照片的具体内容即可。
> 想微调:theme_from_request.py 支持 --accent #ff9f1c --per-photo 4 --tempo 1.3
> --emotion festive 等覆盖;也可直接手写 theme.json 传 --theme。
>
> 字幕底板:默认就是「中性低透明 + 毛玻璃」压在照片上(照片颜色透上来,高级不抢戏)。
> 想调厚薄只改 cap_bg 的透明度(.28~.34 最稳,庄重场合最多 .44),
> 不要用高饱和彩色块当字幕底。详见 references/theme-design.md。
B. 预设场景(用户明确点名场景时)
零依赖 HTML 电影(首选,任何机器都能跑):
python "{SKILL_ROOT}/scripts/make_movie.py" \
--images "照片文件夹路径或图片glob或逐张路径" \
--scene growth \
--title "小宝的成长日记" --subtitle "2019→2026" \
--captions caps.txt \
--music 背景音乐.mp3 \ # 可选
--out 成果.html
进阶 MP4(需本机已装 ffmpeg;未装会自动提示改用上面那条):
python "{SKILL_ROOT}/scripts/build_video.py" \
--images "照片文件夹路径" --scene reunion --captions caps.txt \
--music bgm.mp3 --out 成果.mp4
> --theme theme.json 同样可用于 build_video.py,把自定义主题渲染成真 mp4。
3. 交付与播放说明
- HTML:双击用浏览器打开 → 点「▶ 播放」→ 按 F 全屏;电视/投影接电脑或直接发文件都能放。
- MP4:拷 U 盘插电视,或发视频号/朋友圈。
- 告诉用户:照片默认内嵌进 HTML(单文件可发微信);想减小体积用
--no-embed(需同目录携带图片)。
边界与诚实声明
- 「程序化氛围乐」是合成的氛围垫音,不是具体歌曲;要正经歌需用户自备合法 mp3。
- 不要在技能里捆绑任何受版权保护的音乐。
- 缅怀类场景务必克制、尊重,不配俏皮元素(见 scenes.md)。
- HTML 方案受限于浏览器:个别极老设备对 Web Audio 不支持时自动静音,不影响画面。