Communitygithub.com

Syammon02/VideoUse

用于数学和技术动画的生产流水线,基于Manim Community Edition。可创建3Blue1Brown风格的解释性视频、算法可视化、公式推导、架构图和数据故事。当用户需要动画解说、数学动画、概念可视化、算法演示、技术讲解、3Blue1Brown风格视频或任何程序化几何/数学内容动画时使用。

VideoUse 是什么?

这是一个完整的 Manim 视频制作流水线,专为创建教育性数学和技术动画而设计。它提供了一套严格的创作标准,强调“几何先于代数”、视觉层次(不透明度分层)和连贯的视觉语言(统一配色、字体和动画速度)。该技能支持多种模式:概念讲解、公式推导、算法可视化、数据故事、架构图、论文讲解和 3D 可视化。工作流程遵循 PLAN → CODE → RENDER → STITCH → AUDIO → REVIEW 的六步流水线,所有场景都编写在单个 Python 脚本中。它还提供了详细的配色方案、动画速度表、排版比例和性能目标,并包含创意变化方法(SCAMPER 和假设反转)以生成非传统的输出。该技能适用于 Claude Code、Cursor 等支持 Manim 的 AI 代理。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Syammon02/VideoUse/tree/HEAD/skills/manim-video

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Manim 视频制作流水线

创作标准

这是教育电影。每一帧都在教学,每一个动画都在揭示结构。

在编写任何代码之前,明确叙事弧线。它要纠正什么误解?什么是“顿悟时刻”?什么样的视觉故事能将观众从困惑带到理解?用户的提示只是一个起点——要用教学野心去诠释它。

几何先于代数。 先展示形状,再展示方程。视觉记忆编码快于符号记忆。当观众在公式之前看到几何模式时,方程便显得理所当然。

初版渲染的卓越性不容商量。 输出必须在视觉上清晰、美学上协调,无需修改迭代。如果看起来杂乱、节奏不佳,或者像“AI 生成的幻灯片”,那就是失败的。

不透明度分层引导注意力。 永远不要将所有内容以全亮度显示。主要元素透明度 1.0,上下文元素 0.4,结构元素(坐标轴、网格)0.15。大脑按视觉显著性层次处理信息。

留白呼吸。 每个动画之后都需要 self.wait()。观众需要时间理解刚刚出现的内容。切勿仓促地从一个动画切换到下一个。关键揭示后 2 秒的停顿绝非浪费。

连贯的视觉语言。 所有场景共享一个配色方案、一致的排版字号和匹配的动画速度。技术上正确但每个场景随机使用不同颜色的视频是美学上的失败。

前提条件

运行 scripts/setup.sh 检查所有依赖项。需要:Python 3.10+,Manim Community Edition v0.20+(pip install manim),LaTeX(Linux 上为 texlive-full,macOS 上为 mactex)和 ffmpeg。参考文档针对 Manim CE v0.20.1 测试通过。

模式

模式输入输出参考文档
概念讲解主题/概念带几何直觉的动画解释references/scene-planning.md
公式推导数学表达式逐步动画证明references/equations.md
算法可视化算法描述带数据结构的逐步执行references/graphs-and-data.md
数据故事数据/指标动画图表、比较、计数器references/graphs-and-data.md
架构图系统描述组件逐步构建并连接references/mobjects.md
论文讲解研究论文关键发现和方法的动画references/scene-planning.md
3D 可视化3D 概念旋转曲面、参数曲线、空间几何references/camera-and-3d.md

技术栈

每个项目使用单个 Python 脚本。无需浏览器、Node.js 或 GPU。

层工具用途
核心Manim Community Edition场景渲染,动画引擎
数学LaTeX (texlive/MiKTeX)通过 MathTex 渲染方程
视频 I/Offmpeg场景拼接,格式转换,音频混合
语音合成ElevenLabs / Qwen3-TTS (可选)旁白配音

流水线

计划 --> 编码 --> 渲染 --> 拼接 --> 音频 (可选) --> 审查
  1. 计划 — 编写 plan.md,包含叙事弧线、场景列表、视觉元素、配色方案、旁白脚本
  2. 编码 — 编写 script.py,每个场景一个类,每个类可独立渲染
  3. 渲染 — manim -ql script.py Scene1 Scene2 ... 用于草稿,-qh 用于最终成品
  4. 拼接 — 使用 ffmpeg 将场景片段连接为 final.mp4
  5. 音频 (可选) — 通过 ffmpeg 添加旁白和/或背景音乐。参见 references/rendering.md
  6. 审查 — 渲染预览静态帧,对照计划检查,调整

项目结构

项目名称/
  plan.md                # 叙事弧线,场景分解
  script.py              # 所有场景在一个文件中
  concat.txt             # ffmpeg 场景列表
  final.mp4              # 拼接输出
  media/                 # 由 Manim 自动生成
    videos/script/480p15/

创意方向

配色方案

调色板背景色主色次要色强调色用途
经典 3B1B#1C1C1C#58C4DD (蓝色)#83C167 (绿色)#FFFF00 (黄色)通用数学/计算机科学
温暖学术#2D2B55#FF6B6B#FFD93D#6BCB77亲切友好
霓虹科技#0A0A0A#00F5FF#FF00FF#39FF14系统、架构
单色#1A1A2E#EAEAEA#888888#FFFFFF极简

动画速度

上下文run_time之后的 self.wait()
标题/介绍出现1.5s1.0s
关键方程揭示2.0s2.0s
转换/变形1.5s1.5s
辅助标签0.8s0.5s
淡出清理0.5s0.3s
“顿悟时刻”揭示2.5s3.0s

排版比例

角色字号用途
标题48场景标题、开场文字
标题36场景内章节标题
正文30解释性文字
标签24注释、坐标轴标签
字幕20副标题、小字

字体

对所有文本使用等宽字体。 Manim 的 Pango 渲染器在处理比例字体时,所有字号下都会产生破损的字距。完整建议见 references/visual-design.md。

MONO = "Menlo"  # 在文件顶部定义一次

Text("傅里叶级数", font_size=48, font=MONO, weight=BOLD)  # 标题
Text("n=1: sin(x)", font_size=20, font=MONO)                  # 标签
MathTex(r"\nabla L")                                            # 数学 (使用 LaTeX)

可读性下限 font_size=18。

场景间变化

切勿对所有场景使用相同的配置。对于每个场景:

  • 使用调色板中不同的主导颜色
  • 使用不同的布局——不要总是将一切居中
  • 使用不同的动画入场方式——在 Write、FadeIn、GrowFromCenter、Create 之间交替
  • 使用不同的视觉权重——有些场景密集,有些稀疏

工作流

步骤 1: 计划 (plan.md)

在任何代码之前,编写 plan.md。完整模板见 references/scene-planning.md。

步骤 2: 编码 (script.py)

每个场景一个类。每个场景可独立渲染。

from manim import *

BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"

class Scene1_Introduction(Scene):
    def construct(self):
        self.camera.background_color = BG
        title = Text("为什么这有效?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("为什么这有效?", duration=2)
        self.play(Write(title), run_time=1.5)
        self.wait(1.0)
        self.play(FadeOut(title), run_time=0.5)

关键模式:

  • 所有动画添加字幕:使用 self.add_subcaption("文本", duration=N) 或在 self.play() 中使用 subcaption="文本"
  • 文件顶部共享颜色常量,确保场景间一致性
  • 在每个场景中设置 self.camera.background_color
  • 干净退出——场景结束时淡出所有 mobject:self.play(FadeOut(Group(*self.mobjects)))

步骤 3: 渲染

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # 草稿
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # 最终成品

步骤 4: 拼接

cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4

步骤 5: 审查

manim -ql --format=png -s script.py Scene2_CoreConcept  # 预览静止帧

关键实现说明

LaTeX 的原始字符串

# 错误:MathTex("\frac{1}{2}")
# 正确:
MathTex(r"\frac{1}{2}")

边缘文本的 buff >= 0.5

label.to_edge(DOWN, buff=0.5)  # 绝不能小于 0.5

替换文本前先淡出

self.play(ReplacementTransform(note1, note2))  # 而不是在其上使用 Write(note2)

切勿动画化未添加的 mobject

self.play(Create(circle))  # 必须先添加
self.play(circle.animate.set_color(RED))  # 然后动画化

性能目标

质量分辨率FPS速度
-ql (草稿)854x480155-15 秒/场景
-qm (中等)1280x7203015-60 秒/场景
-qh (最终成品)1920x10806030-120 秒/场景

始终在 -ql 下迭代。仅在最终输出时渲染 -qh。

参考文档

文件内容
references/animations.md核心动画、速率函数、组合、.animate 语法、时序模式
references/mobjects.md文本、形状、VGroup/Group、定位、样式、自定义 mobject
references/visual-design.md12 个设计原则、不透明度分层、布局模板、配色方案
references/equations.mdManim 中的 LaTeX、TransformMatchingTex、推导模式
references/graphs-and-data.md坐标轴、绘图、BarChart、动画数据、算法可视化
references/camera-and-3d.mdMovingCameraScene、ThreeDScene、3D 曲面、摄像机控制
references/scene-planning.md叙事弧线、布局模板、场景过渡、规划模板
references/rendering.mdCLI 参考、质量预设、ffmpeg、旁白工作流、GIF 导出
references/troubleshooting.mdLaTeX 错误、动画错误、常见错误、调试
references/animation-design-thinking.md何时动画化 vs 显示静态、分解、节奏、旁白同步
references/updaters-and-trackers.mdValueTracker、add_updater、always_redraw、基于时间的更新器、模式
references/paper-explainer.md将研究论文转化为动画——工作流、模板、领域模式
references/decorations.mdSurroundingRectangle、Brace、箭头、DashedLine、Angle、注释生命周期
references/production-quality.md编码前、渲染前、渲染后检查清单、空间布局、颜色、节奏

创意发散(仅当用户要求实验性/创意性/独特输出时使用)

如果用户要求创意性、实验性或非传统的解释方法,请在设计动画之前选择一个策略并深入思考。

  • SCAMPER — 当用户希望对标准解释采用全新视角时
  • 假设反转 — 当用户想要挑战某事物的典型教学方法时

SCAMPER 转换

对标准的数学/技术可视化进行转换:

  • 替代 (Substitute):替换标准的视觉隐喻(数轴 → 蜿蜒路径,矩阵 → 城市网格)
  • 组合 (Combine):合并两种解释方法(代数 + 几何同时进行)
  • 逆向 (Reverse):反向推导——从结果开始,解构到公理
  • 修改 (Modify):夸张某个参数以显示其重要性(10 倍学习率,1000 倍样本量)
  • 消除 (Eliminate):移除所有符号——完全通过动画和空间关系进行解释

假设反转

  1. 列出该主题可视化的“标准”做法(从左到右、2D、离散步骤、形式符号)
  2. 选择最根本的假设
  3. 反转它(从右到左推导、将 2D 概念嵌入 3D、连续变形而非步骤、零符号)
  4. 探索这种反转揭示了哪些被标准方法隐藏的内容

相关技能