Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


title: “Manim Video — Manim CE animations: 3Blue1Brown math/algo videos” sidebar_label: “Manim Video” description: “Manim CE animations: 3Blue1Brown math/algo videos”

{/* 本页面由 website/scripts/generate-skill-docs.py 根据技能对应的 SKILL.md 文件自动生成。请直接编辑源文件 SKILL.md,而非此页面。 */}

Manim 视频生成

Manim CE 动画:3Blue1Brown 风格的数学/算法教学视频。

技能元数据

来源内置(默认已安装)
路径skills/creative/manim-video
版本1.0.0
支持平台linux、macos、windows

参考:完整 SKILL.md 文件

:::info 以下是当触发该技能时 Hermes 会加载的完整技能定义。当技能处于激活状态时,智能体看到的指令即为此内容。
::

Manim 视频制作流程

适用场景

当用户需要以下内容时可使用此技能:动画化解释、数学动画、概念可视化、算法演示、技术说明、3Blue1Brown 风格的视频,或任何包含几何/数学内容的程序化动画。它能够利用 Manim Community Edition 制作出 3Blue1Brown 风格的讲解视频、算法可视化内容、方程推导过程、架构图以及数据叙事作品。

创作标准

这属于教育类电影。每一帧都承载着教学意义,每一个动画都在揭示事物的结构。

在编写任何代码之前,首先要明确故事的叙事脉络。要纠正哪些误解?怎样的呈现才能带来“顿悟时刻”?又该通过怎样的视觉叙事帮助观众从困惑走向理解?用户的提示只是起点——需以教育为导向来解读这些需求。

先讲几何,再讲代数。 先展示图形,再呈现方程式。视觉记忆的编码速度远快于符号记忆。当观众先看到几何图案,再了解对应的公式时,就会觉得这个公式是水到渠成的。

初次渲染的质量至关重要。 输出结果必须在无需多次修改的情况下就具备清晰的视觉效果和统一的美学风格。如果画面显得杂乱、节奏不当,或类似“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 功能实现方程式渲染
视频处理层ffmpeg场景拼接、格式转换及音频混音
文本转语音层ElevenLabs / Qwen3-TTS(可选)提供旁白配音

工作流程

PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW
  1. 规划阶段 — 编写 plan.md 文件,明确故事情节脉络、场景列表、视觉元素、配色方案以及旁白脚本。
  2. 编码阶段 — 编写 script.py 文件,为每个场景定义一个独立的可渲染类。
  3. 渲染阶段 — 使用 manim -ql script.py Scene1 Scene2 ... 生成初稿,使用 -qh 参数则用于最终输出。
  4. 拼接阶段 — 通过 ffmpeg 将各场景片段合并为 final.mp4 文件。
  5. 音频处理(可选) — 利用 ffmpeg 添加旁白和/或背景音乐。详情请参阅 references/rendering.md
  6. 审阅阶段 — 生成预览帧,与规划内容进行比对并做相应调整。

项目结构

project-name/
  plan.md                # Narrative arc, scene breakdown
  script.py              # All scenes in one file
  concat.txt             # ffmpeg scene list
  final.mp4              # Stitched output
  media/                 # Auto-generated by Manim
    videos/script/480p15/

创意设计方向

颜色方案

颜色方案背景色主色调辅助色强调色适用场景
经典 3B1B#1C1C1C#58C4DD(蓝色)#83C167(绿色)#FFFF00(黄色)通用数学/计算机科学内容
温暖学术风#2D2B55#FF6B6B#FFD93D#6BCB77贴近大众的视觉风格
霓虹科技风#0A0A0A#00F5FF#FF00FF#39FF14系统设计、架构相关内容
单色风格#1A1A2E#EAEAEA#888888#FFFFFF极简主义设计

动画速度

使用场景运行时间动画结束后自停时间
标题/开场画面出现1.5秒1.0秒
关键公式展示2.0秒2.0秒
变形/过渡动画1.5秒1.5秒
辅助标签显示0.8秒0.5秒
淡出收尾动画0.5秒0.3秒
“顿悟时刻”内容展示2.5秒3.0秒

字体大小规范

字体角色字体尺寸用途
标题48场景标题、开场文字
标题级文字36场景内的章节标题
正文30解释性文字
标签24注释、坐标轴标签
字幕20字幕、细则说明

字体选择

所有文本均应使用等宽字体。 Manim的Pango渲染器在所有字体大小下使用比例字体时都会出现字距异常问题。详细建议请参阅 references/visual-design.md 文件。

MONO = "Menlo"  # define once at top of file

Text("Fourier Series", font_size=48, font=MONO, weight=BOLD)  # titles
Text("n=1: sin(x)", font_size=20, font=MONO)                  # labels
MathTex(r"\nabla L")                                            # math (uses LaTeX)

为确保可读性,font_size 的最小值应设置为 18。

每个场景的差异化设计

切勿为所有场景使用完全相同的配置。针对每个场景:

  • 从预设调色板中选择不同的主色调
  • 设计不同的布局结构——无需始终将所有元素居中
  • 采用不同的动画起始方式,可在“写入”、“淡入”、“从中心放大”和“创建”之间切换
  • 调整视觉重点的分布,让部分场景内容密集,部分场景则较为简洁

工作流程

第一步:规划(plan.md)

在编写任何代码之前,先撰写 plan.md 文件。详细的模板可参考 references/scene-planning.md

第二步:编码(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("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("Why does this work?", 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  # draft
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # production

第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  # preview still

重要实现注意事项

用于 LaTeX 的原始字符串

# WRONG: MathTex("\frac{1}{2}")
# RIGHT:
MathTex(r"\frac{1}{2}")

边缘文本的增强系数需大于或等于 0.5

label.to_edge(DOWN, buff=0.5)  # never < 0.5

在替换文本前先渐隐

self.play(ReplacementTransform(note1, note2))  # not Write(note2) on top

绝不对未添加的Mobject应用动画效果

self.play(Create(circle))  # must add first
self.play(circle.animate.set_color(RED))  # then animate

性能指标

质量等级分辨率帧率渲染速度
-ql(草稿级)854x48015每场景 5-15 秒
-qm(中等级)1280x72030每场景 15-60 秒
-qh(成品级)1920x108060每场景 30-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坐标轴绘制、数据可视化、柱状图展示、动态数据呈现以及算法可视化方法
references/camera-and-3d.mdMovingCameraScene、ThreeDScene、3D 曲面处理以及相机控制技巧
`references/scene-planning.md**叙事结构设计、布局模板、场景切换方式以及规划模板使用指南
`references/rendering.md**CLI 命令参考、质量预设选项、ffmpeg 工具使用、旁白录制流程以及 GIF 导出方法
`references/troubleshooting.md**LaTeX 错误处理、动画故障排查、常见错误及调试技巧
`references/animation-design-thinking.md**何时选择动画展示而非静态图像、内容分解策略、节奏控制以及叙事同步技巧
`references/updaters-and-trackers.md**ValueTracker、add_updater、always_redraw 函数,以及基于时间的更新器与模式设计
`references/paper-explainer.md**将研究论文转化为动画的流程、模板设计及领域特定模式
`references/decorations.md**SurroundingRectangle、Brace、箭头、虚线、角度标记等装饰元素及其生命周期管理
`references/production-quality.md**预编码处理、预渲染步骤、渲染后检查清单、空间布局设计、色彩搭配及节奏控制策略

创意变体(仅当用户要求实验性/创意性/独特风格的输出时使用)

若用户希望获得更具创意、实验性或非传统风格的解释方式,应在设计动画之前先选定策略并明确其逻辑依据。

  • SCAMPER 方法——适用于用户希望对常规解释方式进行创新改造的场景
  • 假设反转法——适用于用户希望挑战传统教学方式的场景

SCAMPER 变换方法

对标准的数学/技术可视化内容进行以下变换:

  • 替换:用新的视觉隐喻替代原有元素(例如将数轴替换为蜿蜒路径,矩阵替换为城市网格)
  • 组合:将两种不同的解释方式结合使用(如同时采用代数与几何方法)
  • 反转:从结果倒推,逐步分解至基本原理
  • 修改:夸大某些参数以凸显其重要性(例如将学习率放大10倍,样本量放大1000倍)
  • 消除:完全去掉所有符号标记,仅通过动画与空间关系来传达内容

假设反转法

  1. 列出该主题在常规可视化中的“标准”特征(从左到右的呈现顺序、2D格式、离散步骤、正式符号等)
  2. 选出其中最根本的假设
  3. 对该假设进行反转(例如从右到左推导、将2D概念以3D形式呈现、用连续过渡替代离散步骤、完全不使用符号)
  4. 探索这种反转方式能揭示出常规方法所隐藏的内容