视频解说器
制作一个带旁白的、3Blue1Brown风格的解说视频,适用于任何主题。视觉效果使用 Manim(Community Edition)。旁白使用 Kokoro-82M,一个本地文本转语音模型。它在机器上运行,无需 API 密钥。每行旁白决定了与之匹配的动画时间。
工作分为两部分:
- 你编写
script.md:每行旁白以及播放时的屏幕内容。你拥有上下文,因此由你编写脚本。 - 一个子代理根据
script.md构建视频。它编写场景、渲染场景、检查布局,并生成最终渲染视频。
构建过程大约需要 20 次工具调用,每次调用都会重新发送完整上下文。新的子代理上下文较小,因此构建过程更便宜、更快。子代理在后台运行,因此用户可以继续与你协作。
explainer 命令完成其余工作。它必须在 PATH 环境变量中。关于设置,请参阅 https://github.com/pranav7/video-explainers。运行 explainer -h 查看命令列表。
0. 设置(每台机器一次)
运行 explainer doctor。它会安装 Homebrew 包、字体、TinyTeX、Python 环境和图标,然后测试 Kokoro 和 LaTeX。重新运行是安全的。如果某个命令因缺少依赖而失败,请运行它。
1. 规划
- 位置。 如果对话涉及的项目有其自己的文档文件夹,则将视频放在
videos/<slug>/文件夹中。否则,使用~/Movies/explainers/<slug>/。 - 观众和时长。 仅当请求未明确说明时才询问。默认:对该主题没有背景知识的好奇成年人,2 到 4 分钟。
- 脚本长度。 Kokoro 每分钟大约说 170 个单词,因此一个 3 分钟的视频大约需要 500 个单词的旁白。每 30 到 45 秒写一个章节。
根据主题选择合适的形式。
对于概念(算法、数学或科学中的想法):
- 以一个具体的问题或谜题开始,而不是定义。
- 用一个具体的例子建立直觉,让观众能看到。
- 进行概括,然后才展示公式。公式命名他们刚刚看到的内容。
- 以一张图呈现关键想法结束。
对于情况(失败的运行、事故、设计、工作进展):
- 以发生的事情开始,使用真实数据。
- 逐步展示导致问题的机制。
- 展示变化的内容:修复、决定或下一步。
- 以一张包含变化后的整个系统的图结束。
2. 编写 script.md
在视频目录中编写 script.md,格式如下:
# 为什么订单页面很慢
面向团队中的工程师。大约 3 分钟。
## 调色板
| 概念 | 颜色 |
| --- | --- |
| API 服务器 | SKY |
| 数据库 | VIOLET |
| 缓慢、浪费的工作 | CORAL |
| 修复 | MINT |
## 1. 钩子:五十个订单,五十次查询
- "订单页面加载五十个订单需要四秒钟。"
- 一个浏览器卡片,带珊瑚色显示的 "4.1 s",以及一个包含 50 个订单标签的列表。
- "服务器为每个订单向数据库请求一次。"
- 一个 API 服务器卡片和一个数据库卡片。数据包在它们之间传输,每个订单一个。
每个章节标题的格式为 ## <数字>. <场景名称>: <章节标题>。构建器会为每个章节创建一个场景类。章节标题会成为视频中的章节标记。
构建器无法看到当前对话。请将屏幕上的所有名称、数字、标签和值都写入脚本中。
旁白完全按照书面文本朗读:
- 使用口语形式编写:"x 的平方","两 pi r","P O 号码","v 二"。
- 不要在旁白中使用 LaTeX、符号或代码。
- 每行写一个句子,最多两个。每一行对应一个视觉变化。
- 如果 Kokoro 发音错误,请内联标注其音素:
[Kokoro](/kˈOkəɹO/)。 - 默认语音为
af_heart。如果用户关心语音,请运行explainer voices让他们试听(afplay voice-samples/<name>.wav)。
在每个行下,描述画面,而不是幻灯片。命名对象、它们显示的内容以及移动的部分。为每个概念分配调色板中的一种颜色。
调色板颜色取自工具包的强调色:SKY, MINT, AMBER, CORAL, VIOLET, AQUA, ROSE, PEACH, LIME。工具包还有用于非概念事物的中性色:SUBTLE, FAINT, INK。工具包包含卡片、标签、表格、代码窗口、管道、序列图、时间线、树、标注、图表、大数字和 Lucide 图标。描述使用这些工具的图片。
按原样显示每个数字。不要要求数字从零开始计数。
3. 移交构建
以子代理身份启动构建器。如果你的说明指定了用于构建工作的代理类型或模型,请使用它们。给出以下提示:
为 <directory>/script.md 构建解说视频。运行 `explainer guide` 并遵循其指示。报告视频路径、视频时长以及你保留的每个布局警告及其原因。
如果用户要求字幕,请在提示中添加 "使用 --captions 渲染。"。
告知用户视频正在制作中,然后继续其他工作。如果无法启动子代理,请运行 explainer guide 并自行完成其步骤。
4. 交付
当构建器报告时,打开 <directory>/video.mp4(在 macOS 上,使用 open)。告知用户:
- 文件路径和时长。
- 视频带有章节标记。
- 构建器留下的任何未解决问题。
询问需要更改的内容。如果要进行修改,如果你的工具可以向同一构建器发送消息,则将修改发送给它,因为构建器保留其上下文。否则,使用新的构建器进行修改。如果修改影响旁白,请先编辑 script.md。