跳到主要内容

Manim 视频

Manim CE 动画:3Blue1Brown 数学/算法视频。

技能元数据

来源内置(默认安装)
路径skills/creative/manim-video
版本1.0.0
平台linux, macos, windows
信息

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

Manim视频制作流程

何时使用

当用户请求以下内容时使用:动画讲解、数学动画、概念可视化、算法演示、技术讲解、3Blue1Brown风格视频,或任何具有几何/数学内容的编程动画。使用Manim社区版创建3Blue1Brown风格的讲解视频、算法可视化、方程推导、架构图和数据故事。

创意标准

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

在编写一行代码之前,先阐述叙事弧线。它纠正了什么误解?什么是"顿悟时刻"?什么样的视觉故事能将观众从困惑带到理解?用户的提示是一个起点——带着教学目标去诠释它。

几何先于代数。 先展示形状,再展示方程。视觉记忆比符号记忆编码更快。当观众在公式之前看到几何图案时,方程就感觉是应得的。

首次渲染的卓越性是不可妥协的。 输出必须视觉清晰且美观统一,无需多轮修订。如果看起来杂乱、时间安排不当,或像"AI生成的幻灯片",那就是错误的。

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

呼吸空间。 每个动画之后都需要self.wait()。观众需要时间吸收刚刚出现的内容。永远不要从一个动画匆忙跳到下一个。关键揭示后暂停2秒永远不会浪费。

统一的视觉语言。 所有场景共享调色板、一致的排版尺寸、匹配的动画速度。一个技术上正确但每个场景使用随机不同颜色的视频是美学失败。

前置条件

运行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进行方程渲染
视频输入/输出ffmpeg场景拼接、格式转换、音频混流
文本转语音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. 审查 — 渲染预览静帧,对照计划验证,进行调整

项目结构

project-name/
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极简主义

动画速度

上下文运行时间之后等待时间
标题/开头出现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" # 在文件顶部定义一次

Text("Fourier Series", 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("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
  • 干净退出 — 在场景结束时淡出所有物体: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)) # 不是在上面写入note2

永远不要动画化未添加的物体

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

性能目标

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

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

参考资料

文件内容
references/animations.md核心动画、速率函数、组合、.animate语法、时间模式
references/mobjects.md文本、形状、VGroup/Group、定位、样式、自定义物体
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何时动画化与静态显示、分解、节奏、解说同步
references/updaters-and-trackers.mdValueTracker、add_updater、always_redraw、基于时间的更新器、模式
references/paper-explainer.md将研究论文转化为动画——工作流、模板、领域模式
references/decorations.mdSurroundingRectangle、Brace、箭头、DashedLine、Angle、注释生命周期
references/production-quality.md编码前、渲染前、渲染后检查清单、空间布局、颜色、节奏

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

如果用户要求创意、实验性或非常规的解释方法,请先选择一种策略并思考其原理,然后再设计动画。

  • SCAMPER — 当用户希望对标准解释进行全新解读时使用
  • 假设逆转 — 当用户希望挑战通常的教学方式时使用

SCAMPER 转换

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

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

假设逆转

  1. 列出该主题通常可视化的“标准”方式(从左到右、二维、离散步骤、正式符号)
  2. 选择最根本的假设
  3. 逆转它(从右到左推导、二维概念的三维嵌入、连续变形而非分步、零符号)
  4. 探索逆转揭示了标准方法所隐藏的内容