启动视频
像小型动态工作室一样制作启动视频。首先确定视频的目标,逐节规划。然后用代码构建每一帧,这样任何部分都可以在一分钟内修改并重新渲染。
最终成果是一个真实产品的短片:其UI在HTML中重建,在节拍网格上移动,跟随音乐剪辑,以60帧每秒的速率显示并带有运动模糊。
所需条件
- Node 18+、带有libx264的ffmpeg、Python 3.9+。Python脚本仅使用标准库。
- 在视频文件夹中安装Playwright及Chromium:
npm i -D playwright && npx playwright install chromium。 - 本技能的
scripts/和assets/template.html。
在命令中,$SKILL 表示本技能的文件夹(例如 ~/.claude/skills/launch-video)。在Shell中设置一次:SKILL=~/.claude/skills/launch-video。从视频文件夹运行命令。
制作流程
按顺序完成各个阶段。每个阶段的输出供下一阶段使用。
| 阶段 | 输出 | 参考文档 |
|---|---|---|
| 1. 简报 | brief.md | references/1-brief.md |
| 2. 格式 | 格式、时长、宽高比、平台(在简报中) | references/2-formats.md |
| 3. 故事 | beatmap.md | references/3-story.md |
| 4. 视觉 | 风格笔记(在简报中) | references/4-look-and-motion.md |
| 5. 构建 | film.html:先提供4张关键帧供用户确认,然后是整部影片 | references/5-build.md、assets/template.html |
| 6. 音乐与音效 | 歌曲选项、剪辑点、混合后的MP4 | references/6-music-and-sound.md |
| 7. 渲染与检查 | MP4文件及检查结果 | references/7-render-and-check.md |
| 8. 交付 | 最终文件、精简版本、发布说明 | references/8-platforms.md |
到达相应阶段时再阅读参考文档,不要一次性全部读完。
1. 简报
了解产品是什么、视频的目标受众、他们应该记住的要点以及“魔法时刻”——即产品明显发挥作用的时刻。首先阅读仓库、网站和文档。然后一次性最多向用户提出5个问题。对于其他问题,将你的默认答案写入简报的未解决问题中并继续。编写 brief.md。
2. 格式
根据产品类型、目标和平台选择视频种类:预告片、发布影片、演示、解释视频、功能更新、创始人视频或黑客松演示。设定时长和宽高比。对于软件产品,通常默认是15–30秒的发布影片,用于X和LinkedIn。当建议冲突时,以用户的意见为准,其次考虑主要平台。其他平台则制作精简版本。
3. 故事
以固定节奏编写节拍图;120 BPM对应0.5秒一个节拍。每个节拍描述发生什么、它从哪个先前元素演变而来、镜头如何移动、显示什么文字以及听到什么声音。将魔法时刻放在音乐的Drop部分。
4. 视觉
使用产品自身的品牌:其颜色、字体、标志、图标和组件。阅读设计令牌和CSS。如果没有品牌,则采用浅色2D风格:暖白色画布、近似黑色的UI、一种强调色、一种干净的无衬线字体和一种等宽字体用于代码。确保文字在手机上足够大以阅读。
5. 构建
将 $SKILL/assets/template.html 复制到 video/film.html。保留其引擎,替换其中的影片内容。所有样式通过 seek(t) 中的时间进行调整:不使用CSS过渡、定时器或帧之间的状态。形状之间相互转换而非淡入淡出。
首先构建4个关键时刻:吸引点、魔法时刻、回报和结尾卡片。将它们渲染为静态帧并展示给用户,同时提供节拍图。在此阶段获得用户的确认:修改一句话成本很低,但修改已完成的场景则不然。然后构建其余部分。
6. 音乐与音效
找到3–4首与影片节奏接近的候选歌曲,每首歌曲应包含一个安静部分和一个清晰的Drop。在下载任何内容前先询问用户。用 scripts/beats.py 分析每首歌曲,查看 scripts/loudness_plot.py 的输出,并用 beats.py --around 确认Drop的位置。按速度 = 歌曲BPM / 影片BPM 渲染影片,使节拍对齐。然后用 scripts/mux.py 剪辑每首歌曲,使其Drop正好落在魔法时刻。让用户选择。为点击声、嗖嗖声和砰声添加真实音效,根据其最响点放置。
7. 渲染与检查
先渲染静态帧,然后渲染视频:node $SKILL/scripts/render.mjs film.html --out out/film.mp4。接着检查,并向用户展示证据:
scripts/pops.py查找单帧闪烁。应报告结果为0。scripts/contact_sheet.py --video每0.5秒显示一帧。检查每个图块是否存在构图、文字截断和重叠问题。- 检查Drop的时序和响度(-14 LUFS)。
- 在手机尺寸下静音观看。
8. 交付
导出主版本以及每个平台所需的精简版本,例如16:9、1:1或4:5以及9:16。向用户提供文件、包含标语和链接的帖子文案,以及发布前需检查的要点。然后像导演一样记笔记(如“中间部分拖沓”、“缩放应与Drop同步”),只针对笔记内容进行修改。
工作规则
- 真实产品,真实陈述。 使用产品的真实名称、UI、文字和数据格式。示例数据必须合理且跨场景一致:如果出现一笔120美元的订单,总额应增加120美元。绝不展示不存在的功能或无法验证的数字。适用时标明“测试版”或“测试网”。
- 每个视频只传达一个信息。 如果简报中有三个信息,则制作三个视频或选择一个。
- 下载前先询问 音乐、音效或素材。说明文件名、来源、许可证和大小。
- 在展示前自行检查。 第7阶段的检查能在用户看到前发现大部分问题。用数字报告结果,而不是“看起来不错”。
- 在涉及品味决策时提供选项。 尤其是音乐:剪辑3–4个版本让用户选择。
- 复制结构,而非艺术。 参考视频可以借鉴其节奏和节拍结构。不要复制其角色、艺术风格、音乐或品牌。
视频文件夹
将视频文件放在产品源代码树之外,除非用户希望放在里面。
video/
brief.md beatmap.md
film.html assets/ (logo, fonts, icons, screenshots)
music/ sfx/ (downloads, with their license notes)
stills/ out/ (renders; disposable)
package.json node_modules/ (Playwright)
脚本
| 脚本 | 功能 |
|---|---|
scripts/render.mjs | 静态帧,或带有运动模糊、并行工作器和 --speed 参数的完整MP4 |
scripts/contact_sheet.py | 将静态帧或视频帧拼接成图块,便于在一张图像中查看 |
scripts/pops.py | 查找单帧闪烁问题 |
scripts/beats.py | 歌曲节奏、节拍网格、Drop候选;--around 用于近距离查看 |
scripts/loudness_plot.py | 绘制歌曲的响度,包含网格和Drop候选 |
scripts/mux.py | 将音乐剪辑到关键点,根据峰值放置音效,设置响度 |
运行任何脚本时不带参数即可查看其用法。