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
开发者SHL0MS, Hermes Agent
许可协议MIT
支持平台linux、macos、windows
标签Manim、动画、数学、视频

参考:完整 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

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

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 级别进行渲染。

参考资料

FileContents
references/animations.mdCore animations, rate functions, composition, .animate syntax, timing patterns
references/mobjects.mdText, shapes, VGroup/Group, positioning, styling, custom mobjects
references/visual-design.md12 design principles, opacity layering, layout templates, color palettes
references/equations.mdLaTeX in Manim, TransformMatchingTex, derivation patterns
references/graphs-and-data.mdAxes, plotting, BarChart, animated data, algorithm visualization
references/camera-and-3d.mdMovingCameraScene, ThreeDScene, 3D surfaces, camera control
references/scene-planning.mdNarrative arcs, layout templates, scene transitions, planning template
references/rendering.mdCLI reference, quality presets, ffmpeg, voiceover workflow, GIF export
references/troubleshooting.mdLaTeX errors, animation errors, common mistakes, debugging
references/animation-design-thinking.mdWhen to animate vs show static, decomposition, pacing, narration sync
references/updaters-and-trackers.mdValueTracker, add_updater, always_redraw, time-based updaters, patterns
references/paper-explainer.mdTurning research papers into animations — workflow, templates, domain patterns
references/decorations.mdSurroundingRectangle, Brace, arrows, DashedLine, Angle, annotation lifecycle
references/production-quality.mdPre-code, pre-render, post-render checklists, spatial layout, color, tempo

创意发散模式(仅当用户要求生成实验性、创意性或独特的输出时使用)

若用户希望采用富有创意、实验性或非传统的方式来进行解释,应在设计动画之前选定策略并明确其逻辑依据。

  • SCAMPER法 —— 适用于用户希望对常规解释方式进行创新性重构的场景
  • 假设反转法 —— 适用于用户希望挑战事物通常被教授的方式的场景

SCAMPER法的应用思路

对标准的数学/技术可视化内容进行改造:

  • 替换:更换原有的视觉隐喻(如用蜿蜒路径替代数轴,用城市网格替代矩阵)
  • 组合:融合两种不同的解释方法(同时运用代数与几何方式)
  • 反转:逆向推导——从最终结果出发,逐步分解为基本原理
  • 修改:夸大某个参数以凸显其重要性(如将学习率提高10倍,样本量增加1000倍)
  • 消除:去除所有符号表达——完全通过动画与空间关系来进行解释

假设反转法的具体步骤

  1. 列出该主题在可视化呈现上的“标准特征”(从左到右的顺序、二维界面、离散步骤、正式符号等)
  2. 确定其中最根本的假设
  3. 对该假设进行反转(如从右到左推导、将二维概念以三维形式呈现、用连续过渡替代分步展示、完全不使用符号)
  4. 探索这种反转所带来的新发现,即常规方法所隐藏的内容