跳到主要内容

Manim 视频

使用 Manim 社区版制作数学和技术动画的生产流水线。创建类似 3Blue1Brown 风格的讲解视频、算法可视化、公式推导、架构图和数据故事。当用户请求以下内容时使用:动画讲解、数学动画、概念可视化、算法演示、技术解释器、3Blue1Brown 风格视频,或任何带有几何/数学内容的程序化动画。

技能元数据

来源捆绑(默认安装)
路径skills/creative/manim-video
版本1.0.0

参考:完整 SKILL.md

信息

以下是 Hermes 在触发此技能时加载的完整技能定义。这是技能激活时代理看到的指令。

Manim 视频生产流水线

创意标准

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

在编写第一行代码之前,阐明叙事弧线。这纠正了什么误解?什么是“顿悟时刻”?什么样的视觉故事能带领观众从困惑走向理解?用户的提示只是一个起点——要以教学雄心来诠释它。

几何先于代数。 先展示形状,再展示方程。视觉记忆比符号记忆编码更快。当观众在看到公式之前先看到几何模式时,方程会显得水到渠成。

首次渲染卓越是强制性的。 输出必须在无需修订轮次的情况下视觉清晰且美学协调。如果某些内容看起来杂乱、时机不当或像“AI 生成的幻灯片”,那就是错误的。

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

呼吸空间。 每个动画之后都需要 self.wait()。观众需要时间来吸收刚刚出现的内容。切勿从一个动画匆忙跳转到下一个动画。关键揭示后的 2 秒停顿绝非浪费。

** cohesive 视觉语言。** 所有场景共享调色板、一致的排版大小、匹配的动画速度。如果一个技术上正确的视频中每个场景使用随机不同的颜色,那就是美学上的失败。

前提条件

运行 scripts/setup.sh 以验证所有依赖项。要求:Python 3.10+、Manim 社区版 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 社区版场景渲染、动画引擎
数学LaTeX (texlive/MiKTeX)通过 MathTex 渲染方程
视频 I/Offmpeg场景拼接、格式转换、音频混流
TTSElevenLabs / Qwen3-TTS(可选)旁白配音

流水线

PLAN --> CODE --> RENDER --> STITCH --> AUDIO (optional) --> REVIEW
  1. 计划 (PLAN) — 编写 plan.md,包含叙事弧线、场景列表、视觉元素、调色板、旁白脚本
  2. 编码 (CODE) — 编写 script.py,每个场景一个类,每个类均可独立渲染
  3. 渲染 (RENDER) — 使用 manim -ql script.py Scene1 Scene2 ... 进行草稿渲染,使用 -qh 进行生产渲染
  4. 拼接 (STITCH) — 使用 ffmpeg 将场景片段 concat 拼接为 final.mp4
  5. 音频 (AUDIO)(可选)— 通过 ffmpeg 添加旁白和/或背景音乐。参见 references/rendering.md
  6. 审查 (REVIEW) — 渲染预览静帧,根据计划进行验证,调整

项目结构

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/

创意指导

调色板

调色板背景色主色次要色强调色适用场景
Classic 3B1B#1C1C1C#58C4DD (蓝色)#83C167 (绿色)#FFFF00 (黄色)通用数学/计算机科学
Warm academic#2D2B55#FF6B6B#FFD93D#6BCB77亲和力强
Neon tech#0A0A0A#00F5FF#FF00FF#39FF14系统、架构
Monochrome#1A1A2E#EAEAEA#888888#FFFFFF极简主义

动画速度

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

字体大小比例

角色字体大小用途
标题48场景标题、开场文本
heading36场景内的章节标题
正文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

每场景变化

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

  • 不同的主导颜色(来自调色板)
  • 不同的布局——不要总是将所有内容居中
  • 不同的动画入场方式——在 Write、FadeIn、GrowFromCenter、Create 之间变化
  • 不同的视觉权重——某些场景密集,其他场景稀疏

工作流

步骤 1:规划 (plan.md)

在编写任何代码之前,先编写 plan.md。 comprehensive 模板请参阅 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("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("text", duration=N) 或在 self.play() 上使用 subcaption="text"
  • 文件顶部共享颜色常量以保持跨场景一致性
  • 在每个场景中设置 self.camera.background_color
  • 干净退出——在场景结束时 FadeOut 所有 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}")

边缘文本的 buff >= 0.5

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

替换文本前先 FadeOut

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

切勿对未添加的 Mobjects 进行动画处理

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

性能目标

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

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

参考资料

文件内容
references/animations.md核心动画、速率函数、组合、.animate 语法、计时模式
references/mobjects.md文本、形状、VGroup/Group、定位、样式、自定义 mobjects
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、基于时间的 updater、模式
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. 探索这种逆向揭示了哪些标准方法所隐藏的内容