证据解释器(语音笔记 → 带证据的1分钟竖屏视频)
基于“马拉维人如何在没有外汇的情况下获得Visa卡”(2026年11月11日):一段4分15秒的Android语音笔记 → 一个60.4秒的TikTok视频,包含10个网页作为证据、Bridge自家架构图、9个标志、4次咔嗒声。工作示例位于 assets/examples/visa-cards/(脚本 + 非技术人员检查、剪辑列表、拍摄任务、完整 video.json、发布文案、联系表)。
语音笔记 ─► 转录 + 分岛 ─► 脚本 + 非技术人员检查(检查点) ─► 剪辑语音(验证边缘) ─► 节奏 + 字幕
│
└► 证据:带目标区域的截图 · 标志 · 文档中的图表
│
video.json 时间线(场景、缩放、标记、术语卡、咔嗒声、图表步骤)
│
音效 + 安静背景音乐 + 混音 ─► 带安全区域的静态帧 ─► 渲染 ─► 验证
设置
SK=~/.claude/skills/evidence-explainer
zsh $SK/scripts/new_explainer.sh "<音频文件>" .context/<slug> # ~1-3分钟; 输出磁盘剩余空间
cd .context/<slug> # 所有脚本从此目录运行(W)
需要 ffmpeg、Python 3 + numpy + Pillow、Node 20+、Chrome(Playwright 驱动已安装的 Chrome)、whisper.cpp + ggml-medium.en.bin 存放在 ~/.cache/whisper.cpp(scripts/setup_whisper.sh 可构建;可通过 WHISPER_DIR 覆盖)。脚手架会在 remotion/ 中运行 npm i,或者当 EXPLAINER_NODE_MODULES 指向现有 node_modules 时克隆它(APFS 写时复制,约0字节)。外观 = “开发者模式”(src/brand.ts:点阵网格、Space Mono 字体、青色/黄色/琥珀色);句柄/网站来自 video.json。
阶段(到达时阅读参考文档)
| # | 阶段 | 阅读 | 工具 |
|---|---|---|---|
| 1 | 从 sent.txt 编写节拍脚本,然后运行非技术人员检查 | references/01-script-and-lay-check.md | — |
| 2 | 在验证边缘上将语音剪辑至≤60秒,调整节奏,添加字幕 | references/02-voice-cut.md | islands_labels.txt, dips.py, tx.sh, cut.py, voice.sh, words.py |
| 3 | 证据:截图 + 目标区域、标志、文档图表 | references/03-evidence.md | shoot.mjs, logo_tools.py, logo.mjs, register_image.py |
| 4 | 在 remotion/src/video.json 中创建时间线 | references/04-video-json.md | 引擎 src/Explainer.tsx |
| 5 | 声音:点击声、咔嗒声、安静背景音乐、混音 | references/05-sound.md | sfx_mix.py, score.py |
| 6 | 带 TikTok 安全区域预览、渲染、验证 | references/06-render-verify.md | remotion/stills.mjs, sheet.py, verify.sh |
脚本确认后的快速路径:
python3 $SK/scripts/cut.py cut.json && zsh $SK/scripts/voice.sh 1.18 "姓名, 品牌, 行话"
python3 $SK/scripts/words.py word_fixes.json
node $SK/scripts/shoot.mjs shoot_jobs.json shots && cp shots/*.png remotion/public/shots/ && cp shots/shots.json remotion/src/shots.json
python3 $SK/scripts/logo_tools.py sync # 获取标志后
# 编写 remotion/src/video.json,然后:
python3 $SK/scripts/sfx_mix.py path/to/music.mp3 # 或 `none`
(cd remotion && npx tsc -p . && node stills.mjs 45,300,...) && python3 $SK/scripts/sheet.py stills --zones
(cd remotion && npx remotion render src/index.ts Explainer ../out/<slug>.mp4 --codec=h264 --crf=18 --audio-codec=aac --audio-bitrate=192k)
zsh $SK/scripts/verify.sh out/<slug>.mp4
60秒视频的完整渲染约需40秒;构建后每张静态帧约1秒。
风格指南(来自创建者对首个视频的审查——除非另有指示,请保持)
- 全屏B-roll。 截图填满1080×1920帧(无浏览器卡片);镜头从广角开始,然后缩放至证明观点的那一行,同时高亮划过该行。左上角显示一个细长的
https://domain药丸标签和黄色// evidence: …标签。 - 标志以相机快闪效果出现(白色卡片,轻微倾斜,缩放入场,白色闪光)。展示更多标志:提到的每个公司显示一次其标志。
- 每笔成功交易都有“咔嗒”声(账户创建、收款、钱包充值、支付批准),同时显示绿色✓芯片和圆环。
- 为非技术人员设计架构图。 一张图表(你 → 应用 → 基础设施 → 卡片),节点中放置标志,逐步构建(“第1步 · 注册”…),节点间带有标记的数据包。仅缩放到其通俗易懂的英文框中显示提供商的开发者图表,从不显示完整图表。
- 编写脚本后问自己:这对使用产品的非技术人员来说是清晰还是困惑? 在构建前修复所有“困惑”之处(术语卡、更简单的标签、无代码样式)。将检查结果放入脚本文件和摘要中。
- 字幕固定在底部:字幕框底部边缘固定在帧底部上方400像素处(刚好超过TikTok的用户名/标题块),两行页面向上增长,避开右侧操作栏。
- 开头是钩子(在第一段证据上方显示大号点阵文字和观众的问题,模糊处理),结尾是关注号召(标志链回顾、关注、句柄、按钮、网站)。
- 音乐是安静的背景音(score.py BASE −26 LUFS):经测试,高昂戏剧性的配乐被评为“过于响亮且烦人”。
检查点(停止并询问,附带建议)
- 脚本 + 非技术人员检查在剪辑任何内容之前:节拍表(他说的内容 → 屏幕上的内容)和困惑/清晰表。
- 无法验证的主张(例如“应用X使用了提供商Y”):保留他的原话,屏幕标签表述为“例如”/“一个例子”,并标记出来。
- 渲染前:使用
--zones生成每个新元素的静态帧。 - 发布前:标志许可证(CC BY/BY-SA 需要署名行)、稳妥的主张(“很可能”保持可见)、Whisper 听错的名字(即使他说错了,字幕使用正确拼写)。仅在要求时上传。
工作原则
- 证据胜于断言:每一个事实节拍都有一个页面作为依据,实时捕获,缩放至相关行。优先使用一手来源(公司新闻室、官方文档、监管机构/中央银行、应用商店页面)而非博客。注意页面未说明的内容(Bridge的国家表格 = 哪些国家可以入驻,而非卡片可用性),并相应标注。
- 仅在验证边缘剪辑:能量岛 + 二分低谷(
tx.sh),绝不使用 Whisper 单词时间(它们在手机音频上可能偏移数秒)。重新转录最终剪辑和渲染版本。 - 术语卡简短具体:“稳定币 = 数字美元,1 USDC ≈ $1”、“KYC = 注册时进行的身份证明+自拍检查”、“API = 让应用使用X的接口”。
- 缩放限制:1200像素的移动截图在缩放1.0时填满帧(它本身已裁剪约36像素边距);段落可承受≤1.3的缩放,短目标(代码行、表格行)为1.8–2.0。检查高亮单词和任何关键列(如货币)是否保持在帧内。
- 验证后报告:时长(视频 vs 音频)、−14 LUFS / 峰值 ≤ −1、渲染版本完整转录、高于语音≥+5 dB的咔嗒声、您已查看过的联系表。仅通过标签说明您选择的音乐(无需试听)。
最终摘要格式
交付物路径 + 时长;联系表图像;屏幕内容,逐节拍(简短);非技术人员检查结论;“发布前检查”项(未验证的主张、许可证、稳妥的用语、听错的名字);维护信息(工作目录、磁盘空间、重新渲染成本、应编辑哪个文件)。