infofilm: 信息图表解说片
使用此技能制作的影片,是一副铺在深蓝色桌面上的教学卡片。每张卡片都有标题栏、图片窗和说明栏。AI 插画在窗口中播放,代码绘制的信息图表会在提到它们的那个确切词语上叠加出现。新闻片解说员传达含义,吉祥物则通过哑剧表演出来,从不说话。演唱式商业插曲和一首结尾叙事曲为影片赋予节奏。
每个数字、标题和标签都是根据事实库用代码绘制而成。图片从不包含文字。
template/ 中的模板是一个完整可用的影片:一个关于闰年的一分钟演示。先做脚手架搭建,然后逐步将演示内容替换成你自己的影片。影片可以在每个阶段渲染:没有组件的场景会显示其卡片,没有旁白的场景会获得预估时长。这样你总能在花钱之前看到整体效果。
固定规则(优先级高于便利性)
- 花钱:先问。 ElevenLabs、图片生成和 Suno 下载都需要实际费用或配额。每次付费批次前,说明是什么、多少项以及预估成本;
--dry-run会打印出来。等待用户说“是”。该“是”仅覆盖当前批次,除非用户已给出长期授权(“图片、语音和音乐你可以直接操作”)。在notes/log.md中记录每次授权和费用。 - 绝不猜测事实。
- 每项声明和数字都来自
notes/research.md,它引用了主要来源。屏幕上的每个数字都来自video/src/data.ts,它引用了研究部分的来源。 - 时事必须根据主要来源核实。如果某件事无法核实,则将其排除在影片之外,或让该场景等待;参见 references/script.md 中的“等待的场景”。
- 每项声明和数字都来自
- 文字和数字由代码绘制,而非图片模型。 图片提示词中禁止出现文字,且每张图片都会被检查。
- 用户听,Whisper 不听。 绝不要转录生成的语音来检查;Whisper 听到的错误比实际存在的多。应给用户提供一个试听页面。
- 公正的讽刺。 讽刺的对象是系统、机制和奇观本身,而非任何党派、群体或个人。在尺寸、颜色逻辑和动画上对待各方一视同仁。图片中不出现真实人物或商标。
- 所有变音符号必须正确(å ä ö é ü …),包括在给子代理的提示词中。明确告知每个子代理。
- 按用户字面意思理解。 “反乌托邦”、“复古”或“辐射风”是情绪基调,不是道具清单。当一个风格词可能有多种含义时,先展示提案并在确认后再进行构建(参见 references/style.md)。
流程
按顺序完成以下阶段。⛔ 步骤是门控:停下来,征求用户决策后再继续。
0 · 启动
- 确认主题、受众、语言、时长(默认约 12 分钟)和目的。检查环境中的
ELEVENLABS_API_KEY和OPENROUTER_API_KEY、安装了 claude-in-chrome 扩展的 Chrome 浏览器、Suno 登录账号,以及node、pnpm/npm、ffmpeg和包含numpy与elevenlabs的python3。 - 搭建脚手架:
这会复制模板、安装 Remotion、合成音效、构建第一个时间线并进行类型检查。<skill>/scripts/new_film.sh <dir> --slug my-film --title "My Film" --lang sv --locale sv-SE - 在
notes/log.md中记录决策,包含日期和决策人。 - 渲染需要磁盘空间。检查
df -h,当系统磁盘剩余空间低于约 20 GB 时,将OUTDIR指向一个大磁盘。
1 · 研究 → notes/research.md
- 编写编号章节(
## 2.3 · 阈值),每节一个事实或事实集群,每个事实附带其主要来源:立法文件、官方统计数据、权威机构官方页面。 - 标记任何不确定的内容。对于近期事件,记录事实的有效日期。
- 参见 references/script.md。
2 · 外观与选角 ⛔
- 复用默认风格(奶油色、深蓝和金色;1957 年复古未来主义;Bowlby One SC + Jost + Lobster)或提出替代方案。用 3-7 种风格渲染同一张小信息图,让用户进行同项对比。
- 选定吉祥物:一个沉默的普通人,带有标志性手势(默认吉祥物会脱帽致意)。避免使用属于著名吉祥物的手势,如眨眼加竖大拇指。
- 首先生成参考肖像(
kind: "ref"),然后是模型表,并在制作任何场景图片之前获得批准。 - ⛔ 用户选择风格、吉祥物、手势和字体。详情参见 references/style.md 和 references/images.md。
3 · 脚本 → script/script.md ⛔
- 结构:开场主题曲、2-4 个部分、部分之间的广告插曲、以及结尾叙事曲。每个场景是一张卡片,时长 15-40 秒。
- 字数预算为分钟数 × 约每分钟 127 词(新闻片解说员速度)。
- 解说词中数字拼写出来;卡片上显示精确数字。
- 避免“在星期一”这类绑定日期的词语,影片会跨越数周。
- 在任何人付费前进行审阅。 让一个独立的子代理对照主要来源检查脚本和研究内容,并将其发现分为 MUST、SHOULD 和 COULD 三类。修复所有 MUST 级别的问题。审阅曾发现研究材料本身的错误。
- ⛔ 用户批准脚本。格式和技巧参见 references/script.md。
4 · 解说员 ⛔
- 使用
voice/design_voice.py preview <tag>设计 3 种试听版本(先询问),让用户选择一种。使用create保存。 - 对 2 个代表性场景进行试读,让用户批准语速和发音。
- 读取所有内容:
python3 voice/narrate.py --dry-run,然后询问用户意见,再运行。
之后若编辑某个场景,只需重新为该场景付费。详情和注意事项参见 references/voice.md。
5 · 音乐(Suno,官方 Web 界面,通过 Chrome)
你需要以下音乐提示:
- 一段约 20 秒的主题曲,在 Speech 模式下作为无表情的紧密和声效果极佳
- 每部分一段背景音乐,循环播放并在解说时压低音量
- 每个广告插曲一段演唱版广告歌
- 一段结尾叙事曲,通常是主题曲的翻唱
提示词使用美国 1950 年代习语;像 "schlager" 这样的音乐类型词会把音乐带到其他地方。除非用户已将选择权交给你,否则用户喜欢在 Suno 中试听。通过 Suno 自己的菜单下载 WAV,获取对齐的歌词以确定剪切点,并编写 music/cuts.json 和 video/src/lyrics.ts。详情参见 references/music.md。
6 · 插图
- 每个场景一张 21:9 2K 图片,位于
art/shots.json中的film-Sxx,基于吉祥物参考绘制。费用:python3 art/gen.py --dry-run,然后询问。 - 检查每张图片是否有文字、重复道具、多余肢体和错误服装,重新生成有问题的图片。
- 运行
python3 tools/sync_art.py,然后运行python3 tools/build_timeline.py。详情参见 references/images.md。
7 · 场景(Remotion)
- 自行构建两个黄金场景:影片核心信息图表所在的场景。使其达到标准,并将其注册到
golden.ts中,替换掉演示中的TheYear/TheRule。 - 然后使用
video/CONTRACT.md(填写其{{…}}行)将任务分发给 2-3 个并行构建子代理。每个构建器有自己的组注册表,并使用联系表进行验证。 - 构建器可以在解说词存在之前开始工作,因为提示会先跟随预估词数,然后自动切换到实际词数。如果他们在工作时脚本发生变化(审阅结果下达),使用 SendMessage 将每个场景的精确更改发送给对应的构建器。
- 自行审阅每个场景的脚本。
- 详情参见 references/scenes.md。
8 · 渲染和交付
- 运行
tools/render.sh。它会重建时间线、检查提示、进行类型检查、渲染、应用两遍 loudnorm 归一化至 −14 LUFS / −1 dBTP,并写入 SRT 字幕。 - 验证每个片段的响度,抽查 mp4 中的帧,然后为用户打开影片。
- 详情参见 references/render.md。
9 · 修订
- 文字变更:只需重新解说该场景,然后重建时间线。提示会自动跟随词语。
- 图片变更:重新生成图片,同步,重建。
- 音乐变更:编辑
cuts.json。
视觉修复只需重新渲染,不产生额外费用;只有新的解说、图片或下载才会收费。
模板目录结构
| 路径 | 说明 |
|---|---|
film.json | 标题、别名、语言、区域设置、部分开场白和背景音乐、场景前奏/结尾音乐、TTS 模型、输出目录 |
script/script.md | 稿件:## Sxx · 名称、<!-- title: -->、<!-- facts: -->、> visual:、解说词 |
notes/research.md, notes/log.md | 事实库;决策和费用 |
voice/ | design.json + design_voice.py(语音设计)、narrate.py(解说 + 时间戳)、listen.py(试听页面)、voice.json |
music/ | suno/*.wav、cuts.json、tools/beats.py(节奏)、tools/suno_lines.py(对齐歌词 → 行) |
art/ | style.json(外观、禁止列表)、shots.json、gen.py、img/ |
tools/ | build_timeline.py、cues.py、lint_cues.py、make_srt.py、sync_art.py、art_sheet.py、unframe.py、make_sfx.py、render.sh |
video/src/ | theme.ts、fonts.ts、timing.tsx(useScene、cue)、data.ts、lyrics.ts、Music.tsx、primitives/(Card、Bits、Film、Jingle、Hemicycle)、scenes/ |
video/tools/ | stills.mjs(选定帧的联系表)、review.mjs(每个场景 N 帧,多个场景) |
已知陷阱及解决方案: references/pitfalls.md。