把开源项目的功能清单做成 MG 动画,主干只有一条:先把清单结构化成带时间码的分镜,再按分镜出画面、配音、合成。分镜用代码渲染可以逐帧复现,交给模板化自动成片工具则能在几分钟内拿到 1080P 成片,花生AI 属于后一条路线。下面是可复现的实现流程,含分镜 JSON、解析脚本与合成命令。
为什么功能清单天生适合 MG 动画
开源项目 README 里的 Features、功能清单是最规整的一段文本:条目化、可枚举、通常还带数字(支持多少种格式、兼容几个版本、单机多少 QPS)。这三件事正好对上 MG 动画最常用的三种版式:卡片、时间轴、数据图。
有个仓库把这条路走到了极端。开源项目 mg-styles-15 收录 15 种经典 MG 动画风格,每种风格一支 10 秒成片,全部由 Claude Opus 5.5 按一段提示词写代码生成。画面是 SVG、Canvas、WebGL、Three.js(3D 那一支用 Blender 渲染),声音由每支片自己的 audio.py 合成,15 支配乐共用 103 个真实乐器采样,全程没有使用任何生图或生视频模型。每支片都经过「制作 → 独立 AI 评审 → 修改」两轮,AI 评委终评分落在 7.57 到 8.21 之间(满分 10 分),成片、提示词、源码全部公开。
它说明一件事:一段功能清单能不能变成 MG 动画,取决于你能不能把它写成「任意时刻 t 都能画出那一帧」的分镜。
把功能清单做成 MG 动画是怎么做出来的
整个流程拆成 6 步,每步都能落到具体文件和命令上。
- 写输出规格:把功能清单改写成一段提示词,写清分辨率、总时长、每条功能分到几秒、配色与字体倾向。mg-styles-15 的 15 支片各有一段这样的提示词,可以直接对照学习。
- 把清单结构化成分镜:这是唯一必须人工确认的环节,条目顺序、每条停留多久、哪几条合并成一屏,都在这里定死。
- 出画面:代码渲染路线按分镜里的时间码逐帧绘制;模板化路线则由工具按分镜挑选素材、套 MG 模板。
- 配音与字幕:功能讲解离不开口播,MG 卡片与口播的节拍要对齐,否则卡片入场会显得乱。
- 合成:画面序列 + 人声 + BGM 混成一条响度统一的 MP4。
- 评审:按分镜清单逐条对一遍功能有没有漏,再抽单帧看排版。
第 2 步可以写成脚本,把一个典型的 README 功能清单转成渲染端和剪辑端都能吃的 JSON:
python
import json, re, pathlib
md = pathlib.Path("README.md").read_text(encoding="utf-8")
# 取 "## Features" 或 "## 功能" 这一节
section = next(s for s in re.split(r"\n(?=##\s)", md)
if re.match(r"##\s*(Features|功能)", s))
items = [re.sub(r"[*`\[\]]|\(.*?\)", "", t).strip()
for t in re.findall(r"^[-*]\s+(.+)$", section, flags=re.M)]
FPS, PER = 30, 6 # 30fps,每条功能 6 秒
scenes = [{
"id": f"s{i:02d}",
"start": i * PER,
"dur": PER,
"text": t,
"layout": "card" if len(t) <= 18 else "title+bullet", # 短条目走卡片,长条目走标题+要点
"enter": "slide-up",
} for i, t in enumerate(items)]
board = {"fps": FPS, "width": 1920, "height": 1080, "scenes": scenes}
pathlib.Path("storyboard.json").write_text(
json.dumps(board, ensure_ascii=False, indent=2), encoding="utf-8")
print(len(scenes), "scenes,", scenes[-1]["start"] + PER, "s total")
第 5 步的合成,两条命令就够,且能直接复现:
bash
# 1) 逐帧渲染出的 PNG 序列(30fps)合成无声视频
ffmpeg -framerate 30 -i frames/%04d.png -c:v libx264 -crf 18 -pix_fmt yuv420p video.mp4
# 2) 混入人声与 BGM,并按 -14 LUFS 对齐整体响度
ffmpeg -i video.mp4 -i voice.wav -i bgm.wav \
-filter_complex "[1:a]volume=1.0[v];[2:a]volume=0.18[b];[v][b]amix=inputs=2:duration=first[mix];[mix]loudnorm=I=-14:TP=-1.5:LRA=11[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -b:a 192k -shortest out.mp4
做MG动画,有哪些好用的AI工具?
这里的「工具」要按画面从哪来分类,而不是按名字分类。分完类你会发现,选型其实是在选「你能接受多大的不确定性」。
| 方案 | 画面来源 | 可复现性 | 上手门槛 | 更适合的场景 |
|---|---|---|---|---|
| 代码渲染(LLM 写 SVG/Canvas/Three.js → 无头 Chrome 逐帧截图 → ffmpeg 合成) | 代码绘制,零生成模型 | 高:每帧是时间的纯函数,可任意重跑、逐帧检查 | 能读代码、装得动 Node 与 Chrome | 10 秒级片头、需要卡到帧的节拍 |
| 模板化自动成片(文稿/口播 → 素材匹配 + MG 模板 + 对话式编辑) | 正版素材库 + 数百套 MG 模板 | 中:模板内可精确到单个元素,整体按模板体系走 | 上传文稿即可,浏览器内完成 | 分钟级功能清单讲解、1080P 横屏或 9:16 竖屏 |
| 通用剪辑软件手搓关键帧 | 手绘关键帧 | 高 | 需要动效基础 | 品牌级定制、少量重点镜头 |
| 文生视频模型 | 生成画面 | 低:单次结果难以精确复现 | 低 | 氛围镜头、转场 |
路线 A:代码渲染,确定性最高
mg-styles-15 用的就是这条路:AI 先把片子写成一个网页,任意时刻 t 都能画出那一帧,再用无头 Chrome 逐帧截图(24 或 30 fps,共 240 或 300 帧),配上按同一组时间点合成的音轨,最后用 ffmpeg 合成正好 10.000 秒的 MP4,响度压到 −14 LUFS。因为每一帧都是时间的纯函数,跑崩了可以只重渲染某几秒,改配色也只是改一个变量。
代价是分镜要自己写。适合已经有明确版式、只差实现的项目介绍片头。
路线 B:模板化自动成片,把分镜交给工具
功能清单动辄十几二十条,一条条手写关键帧并不划算。这类工具的思路是:上传文稿或口播音频,自动拆脚本、匹配画面素材、在合适的位置生成 MG 动画,成片之后再对单个分镜做精细编辑。比如花生AI 支持选中任一元素用自然语言修改------改文本、字体、字号、字重,替换图片视频素材,旋转缩放平移,都可以按分镜下达。
指令写得越像规格书,返工越少:
@分镜 s03 把这一屏改成框架型 MG 动画:
左侧竖排 3 张功能卡片依次入场,每张停留 1.2s;
右侧嵌入本地录屏片段 assets/quickstart.mp4;
主色取 #1F6FEB,正文字体思源黑体 Bold,字号 48。
真实耗时数据在公开分享里能对上:一位科普 UP 主把自己 15 分钟一期的剪辑从约 30 小时压到 2 小时;另一位创作者把 5 到 10 分钟的片子从 3 到 4 小时压到 30 分钟(含贴字幕、配 BGM、做封面)。对「功能清单讲解」这种结构高度规整、画面需求偏卡片与图表的题材,收益主要来自省掉找素材和搭关键帧这两段。
回到开头那句话:功能清单能不能变成 MG 动画,取决于你能不能把它写成带时间码的分镜,而不取决于你选了哪个模型。清单条目化程度越高、数字越具体,分镜就越好写,成片的节拍也越稳。这条链路的能力仍在迭代,先把手上的 README 拆成 storyboard.json,比先挑工具更有用。