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

把文稿做成边画边讲的视频 sweety-handdraw-video

把选题、文章或讲解稿做成带配音和字幕的手绘视频。根据实际旁白安排描线、上色和画面停留,支持更换画风、手部与声音,并保留素材用于局部修改。

  • hand-drawn
  • whiteboard
  • voiceover
  • agent-skill

可用于 Claude Code · Codex

前置要求

  • Node.js / npm
  • Python >= 3.9
  • FFmpeg / ffprobe

概览

你会得到什么

  • 带旁白、逐笔绘制、上色和字幕的 MP4 讲解视频,以及封面。
  • 可复用的制作工程,包含稿件、插画、音频、时间数据和检查记录。
  • 画风、手部或画笔、音色、字幕和画幅的选择。

适用场景

  • 把知识主题、文章或短故事改编成手绘讲解。
  • 保留已确认的图片和声音,局部修改场景或字幕。

不适用

  • 没有生图工具、也未提供插画时制作新画面。
  • 安装技能后直接配音:仍需配置配音后端,或提供现成旁白。

教程

让画面跟着讲解逐步形成

把文章转成配音,再配几张插图,还不能展示一个过程怎样发生。sweety-handdraw-video 会先确定口播和真实时长,再安排画笔描线、上色、写出重点,让观众看到画面如何随着讲解逐步形成。

本站的白板视频技能侧重 Excalidraw 图解和发布资料;sweety-handdraw-video 更侧重插画的绘制顺序、手部表现与旁白配合,并提供本地配音路线。它适合解释一个知识点、讲一个短故事,或把自己的文章改成有声手绘视频。

页首长视频是作者提供的竖屏讲解案例,第二段是作者长文引用的 v1.2/v1.3 绘制对比。原帖介绍 v1.4,本教程按当前仓库的 v1.4.1 编写。

安装技能,准备生图与配音环境

安装完整技能

在终端运行本页安装命令,将技能装入 Claude Code 与 Codex。只用其中一个宿主时,可以从 --agent 后删去另一个名称。安装命令需要 Node.js/npm,本地绘制和合成使用 Python 3.9+ 与 FFmpeg。

下面以 Claude Code 的安装位置为例。使用 Codex 时,将第一行路径改为 $HOME/.agents/skills/sweety-handdraw-video:

# 选择本次使用的宿主安装目录
SKILL_DIR="$HOME/.claude/skills/sweety-handdraw-video"
bash "$SKILL_DIR/scripts/setup.sh"
bash "$SKILL_DIR/scripts/setup.sh" --check
cat "$SKILL_DIR/VERSION"

setup.sh 会准备 FFmpeg、Python 虚拟环境和渲染依赖,并检查字体;--check 只检查。报告出现 MISSING 时,先处理对应项;安装包完整性通过会显示 ok: package integrity。本教程核对的版本号为 1.4.1。

确认可用的图片与声音来源

技能指导 Agent 策划和制作,本地脚本负责绘制与合成。Codex 可以使用内置生图;Claude Code 需要接入生图工具或 MCP,也可以使用你提供的插画。画风、美术和导演指南已随包提供,无需额外安装这些技能。

配音另行准备:本地 VoxCPM2 路线需要 Apple Silicon Mac 和模型环境;已有兼容的 VoiceStudio 本机服务时可以沿用,它负责接收配音请求,具体声音由已配置的 TTS 模型生成。也可以提供整篇录音,让 AI 对齐时间。普通 setup.sh 不会下载配音模型;Linux 的本地渲染可用,但不能直接套用 Mac 的 MLX 配音路线。具体接入见官方本地运行说明。

确认讲解稿,先试听再制作代表画面

把学习目标写进需求

先选一个能在一分钟左右讲清的问题。本例让观众把“整理房间”这种大任务,改成“今晚只清理桌面”这样可以开始的一步。重点是画面能表现出任务范围的变化,不是把整段口播抄到画面上。

下面是本站设计的练习需求,未实测成片。在已安装技能的 Claude Code 或 Codex 中发送,自己的项目可以替换主题、受众和例子:

用 sweety-handdraw-video 做一支约一分钟、9:16 的手绘讲解视频,工程目录叫 task-breakdown,放在技能安装目录之外。

主题:怎样把一件大任务拆成今天能做的一步。
受众:经常把大任务往后拖的上班族。
例子:从“整理整个房间”缩小到“今晚只清理桌面”。
目标:观众看完能为自己的任务写出一个具体的开始动作。

使用有清楚墨线轮廓、平涂上色的画风,逐笔描线再上色。
只露画笔,不露手臂;不加配乐、广告和水印。
先给口播稿和分镜说明,等我确认。不要自行添加我未提供的研究数据或统计数字。
声音先给我听随包样本;选定后,再生成一小段本次稿件的配音让我试听。
配音确认后,先做一个完整场景,包含描线、上色、字幕和画完后的停留。
等我确认这段,再完成整片,保留素材和可修改的工程。

先确认声音,再确认一幅图怎么画

  1. 阅读口播稿,检查它是否说明了“任务太大”具体指什么、怎样缩小,以及观众下一步做什么。已经定稿时,明确要求保留原意与结尾。
  2. 选定声音后,试听本次稿件的一小段,听读音、停顿、杂音和语速;满意后再生成全部旁白。内置试听样本只用于选择音色,不能替代对本次稿件的试听。
  3. 要求 AI 先画一个代表场景,例如杂乱房间与待清理桌面的关系。确认人物、物品和范围变化能看懂,再制作该场景的绘制过程。

需要逐笔绘制时,保留清楚的轮廓和平涂。没有可描轮廓的某些画风使用笔刷扫出成图,官方称为“揭示”;它与逐笔画出不同,应在选择画风时说清需求。

让画笔跟随旁白完成视频

实际旁白确定后,让 AI 按时间戳安排分镜:每幅图有多少时间描线、上色,画完后留多久供人看清。先看代表片段,再扩展整片,避免一次生成大量过于复杂的插画。

正常速度播放代表片段,重点观察三件事:笔尖是否带出正在画的线条,颜色是否跟随涂抹出现,以及“缩小任务范围”讲到时,画面是否已出现对应变化。画面太复杂、来不及画完时,减少图中物件或重排讲解,不要只把画笔加速到看不清。

可以把修改意见写得具体:

“今晚只清理桌面”这句话讲到时,桌面还没画出来。
保留当前配音和画风,提前画出桌面,房间其他细节可以减少。
桌面画完后留一点时间看清,再出现下一句。
先更新这一段让我检查,不重做已经确认的其他画面。

首版默认不加背景音乐。需要配乐时,提供自己的音乐文件,让 AI 在旁白出现时压低音量,并检查循环衔接和片尾音乐是否自然结束。

替换内容、局部修改并导出

换主题时,连同画面含义一起改

  • 换成自己的文章:先提供全文,指出必须保留的数字、来源和限定,不只替换标题。
  • 换成工作流程:重新安排参与者、动作和结果,例如用“提交资料→审核→反馈”解释入职流程,不沿用整理房间的插画。
  • 只改字幕或颜色:说明保留原图和声音,更新相应图层后重新渲染。
  • 改了旁白:重新生成受影响的声音段落,并更新后续时间、字幕和绘制安排;不能只改稿件文件。

可以使用自己的录音或获授权的声音。随包的四款合成声音与作者仅保存在本机的原片录音不同;主项目代码采用 MIT,内置依赖和素材保留各自许可,详见第三方声明。

渲染并检查交付文件

先让 AI 完成工程数据和素材检查,再运行渲染。需要手动操作时,在前面设置过 SKILL_DIR 的终端中进入工程父目录,使用安装脚本默认创建的 Python 环境:

# 工程路径与渲染环境;自定义安装位置时相应替换
JOB_DIR="$PWD/task-breakdown"
RENDER_PYTHON="$HOME/.local/share/sweety-handdraw-video/venv/bin/python"
"$RENDER_PYTHON" "$SKILL_DIR/scripts/handdraw_video.py" doctor "$JOB_DIR"
"$RENDER_PYTHON" "$SKILL_DIR/scripts/handdraw_video.py" build "$JOB_DIR"
"$RENDER_PYTHON" "$SKILL_DIR/scripts/handdraw_video.py" render "$JOB_DIR"
"$RENDER_PYTHON" "$SKILL_DIR/scripts/handdraw_video.py" verify "$JOB_DIR"

先处理 doctor 和 build 报告的问题,再继续渲染。整片写入工程的 outputs/film.mp4。直接打开这个文件,检查声音、字幕是否重复或遮挡、绘制是否完整,以及片尾是否截断。

检查后,把结果告诉 AI,再发送:

按技能的 finalize 流程完成交付,并告诉我成片、源工程和检查记录的位置。
在 review.json 中如实记录已完成的检查和仍未完成的项目。

finalize 会核对检查记录是否对应当前成片,并将交付检查记录写入 outputs/verification.json 和 outputs/verification.txt。它不会重新渲染视频;尚未完成的连续播放或听音检查会列在记录中。

改为横屏或其他画幅时,让 AI 重新排版并复查字幕和插画,不只缩放竖屏成片。确认工程中的稿件、图片和声音都保留后,就可以继续制作下一条自己的主题。