跳到主要内容
中文
← 技能
技能 · 代码仓库

一句选题做成手绘白板视频 whiteboard-video

把一句选题制作成手绘白板讲解视频:逐笔绘制画面,配上旁白与字幕,并输出横竖封面、发布文案和资料来源。支持 Claude Code 与 Codex,需要本地运行环境及火山引擎配音凭证。

  • whiteboard
  • excalidraw
  • video-production
  • agent-skill

可用于 Claude Code · Codex

前置要求

  • Node.js >=20.12
  • FFmpeg
  • Playwright Chromium
  • Codex CLI
  • Volcengine TTS

概览

你会得到什么

  • 1080p 手绘讲解成片,包含逐笔动画、旁白和烧录字幕。
  • 横竖两张封面、五个候选标题和各平台发布文案。
  • 资料来源记录,可配置品牌、声线、字幕和配乐。

适用场景

  • 不出镜讲清有结构的概念、对比和流程。
  • 制作风格统一的短知识视频系列。

不适用

  • 只能网页聊天的工具:需要在本机读写文件和运行命令。
  • 自动发布或保证涨粉:选题和成片仍需人工把关。

教程

把一个想法讲成“边画边说”的视频

你可以用 whiteboard-video 做知识讲解、产品原理介绍,或把一段难懂的操作讲给新用户听。这次先做一期“为什么定了计划总是坚持不下去”:让观众看见一个过大的任务怎样变成容易开始的小动作,再把这个方法换成你的主题。

先看上方演示,留意旁白说到一个新概念时,画面怎样补上人物、文字或箭头。白板视频的重点不是把整段稿子搬到屏幕上,而是让观众一边听解释,一边看见事物之间的关系。

这个技能负责把旁白和场景变成逐笔动画、配音、字幕与成片。你仍需要决定:给谁看、要讲清哪一件事、用什么例子。下面先跑通环境,再带着这三个问题制作自己的首版。

1. 安装技能和公共依赖

你需要能读写本地文件、执行命令的 Claude Code 或 Codex。Node.js 至少为 20.12,系统还要安装 FFmpeg。仓库在 macOS 上实测;Linux 的浏览器依赖需要按 Playwright 提示处理,wb open 使用的 macOS open 命令不能直接照搬。

先在终端检查已有工具:

node --version   # 至少 v20.12
ffmpeg -version  # 视频合成工具
ffprobe -version # 成片检查工具

macOS 缺少 FFmpeg 时,可在已安装 Homebrew 的终端执行 brew install ffmpeg。接着获取仓库并安装依赖:

git clone https://github.com/trustfuture/simon-skills.git
cd simon-skills

# Codex 安装:主体与公共工序必须放在同一级目录
mkdir -p ~/.codex/skills
for s in whiteboard-video video-common; do
  ln -sfn "$PWD/skills/$s" ~/.codex/skills/$s
done

cd skills/whiteboard-video
npm install # 安装依赖,postinstall 会安装 Chromium
cp .env.example .env

如果使用 Claude Code,将上面的 ~/.codex/skills 全部替换成 ~/.claude/skills。两种安装方式选一种即可。video-common 提供事实核查、成片验收与发布检查,不能只安装 whiteboard-video。

后续终端命令均在 simon-skills/skills/whiteboard-video 目录执行。贴纸生图还需要已安装并登录的 Codex CLI;自带示例包含贴纸,检查示例时无需重新生成。

2. 配置配音凭证

打开刚复制的 .env,填入你在火山引擎控制台获得的凭证。下面是配置形状,占位值必须替换,不能原样运行:

# 新版控制台使用 API Key
VOLC_TTS_API_KEY=替换为你的_API_Key

# 若使用旧版控制台,改填这两项,API Key 留空
VOLC_TTS_APP_ID=
VOLC_TTS_ACCESS_TOKEN=

# 官方 2.0 音色:音色 ID 与资源 ID 必须匹配
VOLC_TTS_RESOURCE_ID=seed-tts-2.0
VOLC_TTS_VOICE=zh_male_liufei_uranus_bigtts

官方 2.0 音色使用 seed-tts-2.0;S_ 开头的声音复刻音色使用 volc.megatts.default。音色是否可用、账号是否开通对应资源,应以你自己的控制台为准。凭证只放在本机配置中,不要粘贴到选题指令或发布稿里。

3. 先运行自带示例

先验证配音和渲染能跑通,再让 AI 创作新内容。示例已有场景、贴纸和封面函数,能把环境问题与内容问题分开排查。

# 将完整示例复制到默认工程目录
mkdir -p episodes
cp -R examples/* episodes/

# 参数是标题子串,命中示例“为什么懂很多道理还是没变化”
bin/wb build 懂很多道理

build 依次生成场景、配音、逐笔动画、混音和封面,最后清理部分中间文件。运行时间取决于网络、机器与配音缓存,首次运行不要以作者的缓存命中耗时作保证。

默认成片在 build/<本期目录>/outputs/final.mp4,工程里的 旁白稿.md 会带成片链接。字幕.srt、封面-4x3.png 和 封面-3x4.png 位于本期工程目录。打开成片检查旁白、字幕、逐笔动画和片尾;两张不同画幅的封面不代表视频也自动输出两种画幅。

4. 先把选题缩成一个观众能带走的认识

“坚持不下去”很大,一次视频不必解释所有原因。这次只讲一条思路:任务太大时,先把它改成一个明确、容易开始的动作。它是本次创作的切入点,不是对所有拖延问题的诊断。

试着补完这句话:“看完后,观众能把____改成____。”本例可以填“每天读一小时书”和“晚饭后先读两页”。前后都有具体动作,画面才有东西可画。

把下面的需求发给 Claude Code 或 Codex。以下对话示例均为本站编辑建议,未经视频生成复现测试,不是作者原始提示词;终端命令另有标识。

使用 whiteboard-video,选题:为什么定了计划总是坚持不下去。
观众是下班后想读书、但很难开始的上班族,口吻平实,不说教。
只讲一个认识:把模糊、过大的计划改成有触发时机的小动作。
用“每天读一小时书”改成“晚饭后先读两页”贯穿全片。
先核对涉及的事实,把来源写入 README.md;不要编造研究或成功率。
先给我旁白草稿和对应的画面安排,暂不配音、渲染。

先看旁白能不能独立讲通。如果删掉画面,你仍应该听得懂它。确认这一点后,再决定每段用什么图解;先追求漂亮画面,容易得到好看的装饰,却解释不了主题。

5. 让画面解释旁白,再检查第一版

旁白说“计划太大”时,只写四个字不够直观。可以先画一本书和一个很长的时间块,再把时间块换成两页纸,让观众看见变化。

旁白要说的事画面怎样帮忙
回家很累,想到还要读一小时书人物旁出现书和“一小时”时间块
先把目标改成读两页长时间块淡出,出现两页纸,突出“先开始”
给动作一个明确时机“晚饭结束”用箭头连接“打开书,读两页”

这种对应关系就是分镜的基础。旁白用 | 分成 beat,每个 beat 配一组画面;不必每个词都生成一张贴纸。

确认草稿后,继续发给 AI:

按确认的旁白建立本期工程,在 scenes.js 中编写旁白、场景和封面。
让每组画面表现一个关系或变化,不要把整段旁白抄成大段文字。
先运行 scenes 和 stills,给我查看静帧,暂不生成配音和整片。

如果需要自己建工程,在技能目录运行以下命令。new 只建模板,编辑好 scenes.js 后再运行后两条:

bin/wb new "为什么定了计划总是坚持不下去"
bin/wb scenes 计划
bin/wb stills 计划

“计划”是标题子串,必须唯一;匹配多期时改用完整标题。静帧在 build/<本期目录>/work/frames/。逐张看:不读旁白时,能否认出画面在比较什么、什么发生了变化?如果只能看见一堆贴纸,先减少元素或拆开 beat。

画布为 1920×1080,底部 y≥960 留给字幕,右上角 320×130 留给水印。出现布局警告时回到源文件修正,不要把所有文字缩小来硬塞内容。scenes.js 是主要手写源,旁白稿.md 和 字幕.srt 是生成物,直接改它们不能替代修改源文件。

静帧确认后,再让 AI 配音并出片,或在终端执行:

bin/wb build 计划

打开 final.mp4,这次关注时间:画面是否在旁白讲到它时出现?一个关系是否还没画完就进入了下一段?静帧能检查布局,只有播放成片才能判断讲解节奏。

6. 做一次小修改,理解什么需要一起改变

首版完成后,先只改一个地方。例如,把“两页书”换成“一段文章”:

把本期贯穿案例从“晚饭后读两页书”改成“午饭后读一段文章”。
保留整体解释顺序和画风,先列出需要联动修改的地方。
同步修改旁白、触发时机文字和书本/文章画面;封面若引用旧案例也一起改。
先给我新静帧,确认后重新配音并构建。

这次修改不只是换图片:观众听到的例子、画面上的动作和封面要表达同一件事。因为旁白变了,时间戳也会变化,必须重新配音;只重绘画面会让新内容和旧声音错位。

如果只觉得人物太大,可以明确要求“只调人物尺寸和位置,保留旁白与时间安排”。区分内容修改与画面修改,你就能让 AI 保持已经满意的部分。具体重建命令见下表。

修改后重跑哪些步骤

优先改源文件或配置,再执行相应命令。下表中的“计划”换成你本期的唯一标题子串。

修改内容修改位置后续命令
旁白、增加场景scenes.jsbin/wb build 计划
语速config.json 的 tts.speedbin/wb build 计划
画面、贴纸布局、字幕字号场景源文件或字幕配置bin/wb render 计划,再 bin/wb mix 计划
配乐音量bgm.gainbin/wb mix 计划
封面文案与贴纸scenes.js 的封面函数bin/wb cover 计划
平台标题与发布稿发布.md无需重新出片

例如仅调整配乐,可以临时试听一个音量倍率:

bin/wb mix 计划 0.4 # 只重新混音,不重新配音和绘制画面

TTS 会缓存已生成音频,缓存键包含文本、声线与语速;改语速会让全部场景重新配音。更换贴纸时先重新检查静帧,封面使用了同一张贴纸的话也要重出封面。

换成你的产品或主题

现在不沿用读书案例,自己填写下面的需求。先确定一个观众需要理解的过程,再列必要素材,避免把所有功能都塞进一期。

使用 whiteboard-video 制作一期白板讲解。
观众:[谁会看,他们已经知道什么]
看完应理解或会做:[一个具体结果]
核心例子:[一个能贯穿讲解的真实场景]
讲解顺序:[遇到的问题 → 关键变化 → 得到的结果]
现有素材:[产品截图、真实 Logo、资料链接;没有的说明缺少什么]
画面重点:[哪些关系、对比或步骤需要画出来]
口吻与品牌:[说话方式、品牌名、颜色、片尾引导]
发布要求:[平台、目标时长、视频画幅;先核对工具能否满足]
先提供旁白与画面安排,确认后出静帧,再配音、渲染。

例如介绍一款预约工具,先讲“客户选时间→系统检查可约时段→双方收到确认”,比逐项介绍全部菜单更容易看懂。产品 Logo 用真实素材,人物与物件可用贴纸,流程关系用文字、框和箭头表现。不要把界面截图简单换成一张手绘背景,就认为已经解释了产品原理。

品牌可在现有 config.json 中调整 brand.name、brand.accent、brand.slogan 和 brand.endCard.cta;配音语速用 tts.speed。不要为了改品牌覆盖整个配置文件。仓库不附带音乐,没有 assets/bgm.mp3 时可以先出无配乐版本。

最终收齐成片、两张封面、发布文案和资料来源。发布.md 与 README.md 需要你或 AI 编写,CLI 不会自动保证内容完整,也不负责上传平台。播放检查开头、中段和片尾,尤其听数字、专有名词和配乐音量;时长以实际文件为准。

遇到问题时

安装成功,AI 却找不到公共工序? 检查宿主的 skills 目录中是否同时存在 whiteboard-video 与 video-common,且两个软链都有效、处于同一级。

配音报错或没有声音? 检查 .env 的凭证、音色与资源 ID 是否匹配,以及火山引擎账号是否开通对应语音服务。不要把官方音色与声音复刻资源混用。

旁白只生成半段? 工具会根据返回的逐字信息检查并重试。仍不完整时,可以强制重新配音并构建:

FORCE_TTS=1 bin/wb build 计划 # 请求强制配音,随后重新构建

Chromium 缺失或渲染超时? 先确认 npm install 的浏览器安装步骤成功。缺浏览器时在技能目录执行 npx playwright install chromium;Linux 缺系统库时按 Playwright 报错提示处理。机器内存紧张时将 render.workers 降到 1,再重跑 bin/wb render 计划 与 bin/wb mix 计划。

字幕或水印被挡住? 回到 scenes.js 调整布局,避开底部字幕区与右上水印区,重新生成静帧。不要只在最后的成片上补救。

贴纸拿错了图? 不要并发执行 wb image。上游生成工具的最近图片兜底逻辑可能混淆并发任务;按顺序生成并逐张验收。

继续查阅

需要自定义场景,先读 场景 DSL;需要稳定版式,参考 场景布局。技能说明列出了完整修改流程,公共工序提供事实核查与成片验收要求。

代码和文档采用 MIT 许可,不代表第三方公司标志、音乐及其他素材都可随意使用。发布前核对素材授权、事实来源与成片内容。