1实现原理 · 为什么它能做到
把解说片定义为「论证」而非功能巡回:动任何流水线步骤之前先锁死叙事,且要求能压成一句话的核心主张——压不出来就砍范围,而不是缩小它。
An explainer is an argument, not a feature tour.
script-first:VO 是脊柱,画面只解释正在被说出的那句;先写词并计时,再画 storyboard 与动画。
Write and time the words before you storyboard or animate — it is far cheaper to cut a sentence than a built scene.
叙事弧拆成五拍并各给观众内心台词(Problem→Stakes→Solution→How→Payoff/CTA),并要求比喻唯一、取自观众世界,禁止中途换喻。
| Problem | Name the pain in their words | "That's me." |
流水线是六步固定序列(Script → Storyboard → Build scenes → Narration & captions → Edit → Polish),storyboard 阶段规定一场景一想法、每条 VO 行映射一个视觉意图。
2. **Storyboard** — one idea per scene.
时长由 VO 数学推导:约 2.3 词/秒(140 wpm)为基线、技术句降到 ~2.0,场景长度 = 词数/语速 + 呼吸量;参考值 30s≈69 词、60s≈138 词、90s≈207 词。
`scene_seconds = line_words / pace + 0.4` (breathing room).
字幕被视为必需品(默认静音自动播放),规定 ≤2 行、≤42 字符/行、屏上 ≥1.0s,并要求在 Remotion 里与切点共用同一计时数组以免漂移。
In Remotion, drive captions from the same timing array used for scene cuts so they never drift.
交付是 Remotion 工程 + 逐帧渲染的 MP4:全部动效帧驱动(禁 Date.now / Math.random / timer),时长依赖 props 时用 calculateMetadata 计算;验证走 still → inspect → encode。
A Remotion project with the composition registered (`<Composition>` + zod `schema` + `defaultProps`), all motion frame-driven (no timers / `Date.now()` / `Math.random()`).
2核心能力
3外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| cli | npx remotion still / render / compositions(帧渲染与编码) |
| package | Remotion + zod(composition 注册与 props schema)+ React |
| cli | ffmpeg / ffprobe(contact-sheet.sh 与 probe-mp4.sh) |
| cli | npx -y playwright(仓库根 seek-shot.sh,网页层兄弟 skill 用) |
| api | 无第三方业务 API;配音由用户自备或宿主侧 TTS 产出,skill 只要求把 VO 作为本地静态资源挂载 |
4管控建议与判定依据
- scripts/: 执行本地脚本或命令: npx remotion still / render / compositions(SKILL.md 与 scripts/README.md 指示)
- 网络端点: 声明外部网络访问: 若按同 pack 的 remotion-recipes 使用 @remotion/google-fonts,渲染时会从 Google Fonts 取字
- 本地工作目录: 文件读写与工件输出: out/*.mp4(成片)、out/*.gif、out/f-*.png(still 帧)
5第二遍独立确认
- [ok] 外部依赖调用点复核(npx remotion / ffprobe / @remotion/google-fonts) — SKILL.md Verify loop 实际给出 `npx remotion still Explainer out/f-start.png --frame=0 --props='{...}'` 与 `npx remotion render Explainer out/explainer.mp4`;仓库根 scripts/probe-mp4.sh 确为 ffprobe 实现。@remotion/google-fonts 出现在同 pack 的 wrapped-video/references/remotion-recipes.md,本 skill 只写 `<Audio src={staticFile()}>`,故未把它记为本 skill 的行为。
- [ok] 无凭证 / 无业务 API 反查 — SKILL.md 与 reference 中无密钥、无 endpoint、无上传动作;`staticFile()` 指向项目内静态资源而非远端。判橙依据仅为远程包依赖,非凭据读取。
- [ok] 帧驱动纪律的内部一致性 — SKILL.md 的输出契约、Before-you-finish 第 4 条与另两份文档的「no Date.now() / Math.random() / timers」主张互相一致,并与 Remotion 的逐帧快照渲染模型相符(帧驱动才可 seek、可复现)。
- [ok] VO 数学与叙事两张表的自洽性 — SKILL.md 五拍表(讲「为什么与顺序」)与 Script formula 表(Problem 20% / Solution 15% / How 45% / Payoff 20%,讲「占比预算」)口径可对齐:How 占比最大对应「slowest — hold each step to read」;60s≈138 词与 2.3 w/s 自洽(60×2.3≈138)。
- [ok] 跨目录 / 跨 skill 引用可解析性 — 正文引用的 `scripts/contact-sheet.sh`、`scripts/probe-mp4.sh` 位于仓库根(单装本 skill 目录会悬空,需装整个 repo);把单场景网页动效分流到同 repo 的 diagram-animation,该 skill 确实存在于本 repo 的 skills/ 下,引用可解析。
- [ok] 功能声明 vs 实际能力 — frontmatter 宣称覆盖 script→storyboard→scene build→narration/caption sync→edit→polish 全链,正文六步流水线与 reference 的模板/计时表/字幕规范逐项兑现;未见夸大——未声称能自动配音或自动剪素材。
6结论
ae5f4f77121acf12…