1. 这个开源神器到底是怎么火起来的
这几年只要刷短视频平台,大概率刷到过那种丝滑到不行的数学动画,复杂的公式推导、抽象的空间几何、微积分的动态变化,几分钟就把一个折磨人的概念讲得明明白白。这类视频的开山鼻祖就是 3Blue1Brown,频道作者 Grant Sanderson 从 2015 年开始用一套自己写的 Python 动画引擎做数学科普,后来他把这套引擎开源了,名字就叫 Manim(Mathematical Animation Engine)。
Manim 开源之后迅速成为数学可视化领域最热门的项目之一。GitHub 上 ManimCommunity/manim 这个社区维护版本目前已经聚集了上万颗 Star,无数 UP 主、老师、科普作者用它产出了大量高质量内容。但问题也很明显:Manim 本质上是一个 Python 库,要用它做动画,你得会写代码。哪怕只是画一条曲线、放一行公式,也得先理解 Python 的基础语法、Manim 的对象模型、动画的播放机制,这对很多想做科普但不懂编程的人来说,门槛实在太高了。
所以当“零代码”版本的 Manim 工具开始出现,并且能够一键生成 3Blue1Brown 级别的数学动画时,这个需求瞬间被引爆。它解决的痛点非常明确:让普通人不需要写一行 Python 代码,也能通过图形界面、在线平台、或者简单的自然语言描述,直接做出专业级的数学科普动画。
这篇文章我就结合自己实际折腾 Manim 的经验,把从零代码到手写代码的完整路线捋一遍,涵盖工具选型、环境搭建、实操案例、常见坑位这几个核心板块,争取让你看完就能上手。
2. 先把 Manim 和 3Blue1Brown 动画的本质拆明白
2.1 3Blue1Brown 动画为什么好看,核心秘密在哪
3Blue1Brown 的动画之所以封神,并不只是因为画面“好看”,而是因为它的每一个视觉设计都在服务一个目标:降低认知负担。绝大多数数学教学视频是“板书式”的,公式写在黑板上,老师用粉笔圈圈点点。但 Grant 的做法是用动画把抽象概念变成可视化对象,让公式不再是静态符号,而是会动、会变形、会生长的实体。
具体来说,有三个核心设计法则:
- 渐进式呈现。哪怕是一个非常长的推导过程,动画也会把它拆成极短的信息块,每一帧只传达一个信息点,观众眼睛始终有聚焦点,脑子不会过载。这也是为什么 Manim 动画天然适合做短视频,因为它的叙事节奏就是短视频节奏。
- 色彩语义化。用固定的颜色代表固定的数学对象,比如某个变量出现的时候永远是同一种颜色,观众看到颜色变化就能推断出数据在变,不需要额外看公式里字母的变化。
- 同步语音与视觉。视频里画面变化节奏和旁白的讲解节奏严格同步,哪里该停顿、哪里该加速,都是精心设计过的,这种“音画对位”是普通 PPT 录屏完全做不到的。
Manim 这套引擎能够完美支撑以上设计,因为它的核心概念就是“场景”(Scene)。每个场景里你可以定义对象、变换、动画,所有元素都支持精细的插值和过渡。这种设计让创作者可以把注意力集中在叙事上,而不是底层的绘图逻辑。
2.2 Manim 生态的核心组件梳理
现在提到 Manim,其实有两条主要支线,很多新手容易搞混:
| 版本 | 维护方 | 特点 | 适用场景 |
|---|---|---|---|
| ManimGL | 3Blue1Brown 本人维护(旧版) | 实时渲染效果最接近原版视频,但依赖项多、文档偏少、代码风格偏老 | 追求 3Blue1Brown 原版质感、有编程基础的玩家 |
| Manim Community Edition(manimce) | 社区维护(目前主流) | 安装简单、文档完善、兼容性好、社区活跃、有大量第三方插件 | 绝大多数用户首选,推荐直接用这个 |
另外还有基于 Web 的 manim-online 和 manim.science 等在线版本,用浏览器就能跑 Manim 代码,免去本地环境配置的麻烦。零代码工具有 Mango(原 Manim Editor)、Manim Studio 之类的可视化编辑器,以及一些基于 AI 大模型的工具,用户用自然语言描述动画需求,AI 自动生成 Manim 代码。这个生态已经相当成熟了。
2.3 零代码解决方案的三种实现路径
根据“你到底有多不想碰代码”,我把零代码方案分成三个梯度,你可以自己对号入座:
第一梯度:纯在线编辑器。打开网站就能用,页面本身就是个代码编辑器加渲染器,你只需要把别人写好的代码模板粘进去,改改数字,点运行,就能出视频。这其实是“伪零代码”,但对完全不懂编程的人来说,改数字没有任何心理负担。
第二梯度:带图形界面的本地工具。典型代表是 Mango,它有可视化的时间轴、对象列表、属性面板,大部分操作靠鼠标拖拽就能完成。你导入素材或者添加文本、几何图形,设置动画类型和参数,软件自动生成 Manim 代码并渲染视频。这类工具把编程语言的可视化能力集成到了一起,适合不想写代码但想做定制化内容的用户。
第三梯度:AI 对话式生成。最近的 AI 工具(这里泛指大语言模型)已经能够准确生成 Manim 代码了。你只要用自然语言描述:我想要一个对函数 f(x)=x^2 在 x=1 处做切线动画的演示,AI 直接输出一段完整代码,你复制粘贴进 Manim 就能渲染。这个方式我现在用得最多,门槛最低,效率也最高。
我个人认为,最靠谱的零代码路线是“第二梯度 + 第三梯度”组合:用 AI 生成基础代码,在 GUI 工具里微调参数和布局,最后用场景脚本整合。这样既不会完全依赖某个工具,又能保持高效。
3. 实操第一步:环境安装与快速启动
这一部分分两种情况讲,一种是你愿意折腾本地环境,另一种是你想彻底跳过环境配置,直接开浏览器干活。
3.1 本地安装 Manim 的完整步骤
我用的是 Windows 系统,后面的命令都以 Windows 为例,macOS 和 Linux 上逻辑一致,只是个别依赖包的安装命令会不同。
安装前先确认你的 Python 版本在 3.9 以上,建议直接用 Anaconda 管理环境,这样后面装依赖会省心很多。打开命令行,依次执行:
# 创建并激活一个新的 conda 环境,避免污染系统 Python conda create -n manim-env python=3.11 conda activate manim-env # 安装 Manim 社区版 pip install manim # 安装工具链依赖 pip install pycairo pangoLinux 用户需要额外安装几个系统库,最常踩坑的是 Pango 和 Cairo。如果是 Ubuntu/Debian:
sudo apt update sudo apt install libcairo2-dev libpango1.0-dev ffmpeg texlive-fullmacOS 用户用 Homebrew:
brew install cairo pango ffmpeg dvisvgmtexlive-full 是用来渲染 LaTeX 公式的。如果你只需要简单的文本,可以暂时不装,但一遇到分数、根号、积分符号这种数学公式就会报错。建议一步到位直接装,还能用 LaTeX 写各种漂亮的数学符号。ffmpeg 是导出 MP4 时用的视频编码工具,必须装。
验证是否安装成功,在命令行输入:
manim --version能输出版本号就说明安装成功了。接下来可以做一个最小测试,新建一个 Python 文件 test.py,写入:
from manim import * class FirstScene(Scene): def construct(self): circle = Circle(color=BLUE) self.play(Create(circle)) self.wait(1)在命令行运行:
manim render -ql test.py FirstScene参数 -ql 表示低画质渲染,生成速度快,适合测试。第一次运行 Manim 会初始化一些缓存和配置文件,稍微有点慢,属正常现象。顺利的话,会在 output 文件夹下生成一个 480p 分辨率的 MP4 视频。
3.2 一键起步:推荐几个开箱即用的在线版本
如果你不想在本地装任何东西,以下几个在线平台实测可用,推荐优先尝试:
- Manim Community Online,它是 Manim 社区推出的 Playground,浏览器里直接写代码并渲染动画,界面简洁,自动配置好所有依赖,适合快速验证代码。
- Manim.science,比前一个更友好的 WebIDE,内置模板和代码补全,可以导出视频和 GIF,适合新手体验。
- Google Colab 加 Manim 一键安装脚本,搜索 “manim colab”,复制安装脚本进代码块,运行后你可以在 Colab 里使用 Manim。它比专用平台更灵活,因为 Colab 本身就是完整的 Jupyter 环境,适合做代码实验。
在线的免费版本通常有渲染时间和视频分辨率限制,我的经验是:变通的思路是先用在线版熟悉代码,后面确定要批量产出内容再折腾本地环境。
3.3 第一次启动的配置优化技巧
Manim 渲染出来的视频默认是 1080p 的,如果是第一次测试,直接用高画质渲染会非常慢。很多人第一次运行 Manim 等了两分钟没出结果,就以为卡死了,其实只是在渲染。建议配置文件里全局降低默认分辨率。
在用户主目录下找 manim.cfg 文件(如果没有就新建一个),写入:
[CLI] quality = low [preview] preview_while_rendering = true这样每次运行时如果没指定 -q 参数,默认就是低画质,渲染快很多。等代码调通、动画效果满意后,再手动加 -qh 参数渲染高清版。preview 参数开启后,渲染结束会自动打开视频预览,方便即时查看效果。
4. 零代码实战:三种方式制作第一个 3Blue1Brown 风格动画
4.1 方式一:用在线 Playground 画出旋转的曲面
我们做一个常见于 3Blue1Brown 视频的动画:一个三维曲面(比如抛物面 z = x^2 + y^2),旋转展示它的形态。
打开 Manim Community Online,在代码区粘贴:
from manim import * class SurfaceExample(ThreeDScene): def construct(self): axes = ThreeDAxes(x_range=[-3, 3], y_range=[-3, 3], z_range=[-1, 5]) surface = Surface( lambda u, v: np.array([u, v, u**2 + v**2]), u_range=[-2, 2], v_range=[-2, 2], fill_color=BLUE, fill_opacity=0.7 ) self.set_camera_orientation(phi=70 * DEGREES, theta=-45 * DEGREES) self.play(Create(axes), Create(surface)) self.move_camera(theta=100 * DEGREES, run_time=3) self.wait()点击运行,等大约 10 到 30 秒,浏览器里就能看到曲面生成后镜头绕着它旋转的效果。这个动画虽然简单,但视觉效果已经带点 3Blue1Brown 的味道了。如果你完全看不懂这些代码也没关系,重点是你不需要自己写,粘贴、运行、点下载,视频就导出好了。
4.2 方式二:用 GUI 工具 Mango 拖拽生成动画
Mango 是目前比较成熟的 Manim 可视化编辑器,它把对象树、属性面板和时间轴都做成了图形界面。你操作的对象包括文本、圆形、矩形、线条、坐标轴等,设置动画效果时,在时间轴里把对象拖进去,就能看到动画片段。每个操作背后,Mango 自动生成对应的 Manim 代码,你甚至可以在代码视图里直接修改细节,然后一键渲染。
用 Mango 做动画的流程大概是:
- 打开 Mango,新建场景文件。
- 在左侧对象面板拖入 Text,输入文字“Dirichlet 函数”。
- 拖入 Circle,设置颜色为绿色。
- 在时间轴上把 Text 和 Circle 的创建动画拖到第 0 秒位置。
- 在属性面板微调动画的持续时间和缓动函数。
- 点击渲染按钮,生成视频。
Mango 对新手非常友好,但功能还在更新中,复杂的三维场景支持还不够完善。不过对 80% 的二维数学动画,它完全够用了。
4.3 方式三:用 AI 自然语言生成 Manim 代码
这是我现在最推崇的方式,因为它把“零代码”真正做到了极致。以我常用的做法为例:我需要做一个“说明导数的几何意义”的动画,就打开任意一个大语言模型平台,输入:
请用 Python 的 Manim 社区版编写一段代码,实现如下效果:画一个坐标系,绘制函数 f(x)=x^2 的曲线,然后固定点 (1,1),用红色画出该点处的切线,随着切点的移动,切线也跟着移动,最终停留在点 (2,4) 并显示其切线方程。
AI 会返回类似这样的代码:
from manim import * class DerivativeAnimation(Scene): def construct(self): axes = Axes(x_range=[-1, 4], y_range=[-1, 5]) graph = axes.plot(lambda x: x**2, color=YELLOW) labels = MathTex("y=x^2").next_to(graph, UR) tangent1 = TangentLine(graph, x=1, length=2.5, color=RED) tangent2 = TangentLine(graph, x=2, length=3, color=RED) dot1 = Dot(axes.coords_to_point(1, 1), color=RED) dot2 = Dot(axes.coords_to_point(2, 4), color=RED) self.add(axes, graph, labels) self.add(dot1, tangent1) self.wait(1) self.play( Transform(tangent1, tangent2), Transform(dot1, dot2) ) self.wait(1)你不需要理解 TangentLine 具体怎么实现,你只需要把这段代码粘贴到本地 Manim 环境或者在线 Playground,运行渲染,动画就出来了。如果效果不符合预期,把问题描述得更详细一点,再让 AI 调整。用这种方式,产生一百种不同视频的难度,仅仅在于你想法的丰富程度,而不是你的编程水平。
4.4 经典效果制作:渐变出现公式加动态轨迹
除了粘贴现成代码,你还可以用一套“模板思维”来快速做出各种变体。我最常用的模板是:
- 创建坐标系。
- 绘制函数曲线。
- 用 Dot 标记关键点。
- 用 TracedPath 把点的运动轨迹画出来。
- 加数学公式标签。
这套模板覆盖了函数动态、参数方程、轨线演示等大部分数学动画场景。举个例子,下面的代码可以实现“一个点在圆周上运动,同时它的横坐标随时间的轨迹以正弦曲线的方式显现”,这也是 3Blue1Brown 视频里常见的正弦函数直觉来源动画:
from manim import * class SineWaveFromCircle(Scene): def construct(self): axes = Axes(x_range=[-1, 10], y_range=[-2, 2]) circle = Circle(radius=1, color=BLUE).shift(LEFT * 2) dot = Dot(point=circle.point_from_proportion(0), color=RED) tracker = ValueTracker(0) def update_dot(mob): mob.move_to(circle.point_from_proportion(tracker.get_value())) dot.add_updater(update_dot) sin_graph = axes.plot( lambda x: np.sin(x), color=YELLOW ) self.add(axes, circle, dot, sin_graph) self.play(tracker.animate.set_value(1), run_time=10)初学阶段,将这个模板里的函数、轨迹、对象替换成你需要的数学模型,就能批量产出看起来“高不可攀”的科普动画。
5. 进阶技巧:让动画更有 3Blue1Brown 质感
如果你已经可以渲染出基础动画,接下来要解决的是“质感”问题。3Blue1Brown 的动画之所以一眼能认出来,除了内容之外,还有几个视觉元素可以借鉴。
5.1 字体和色彩的选择
Manim 社区版的默认字体跟原版有一些差异。要做出更接近原版的风格,核心是两类字体:文本类字体和数学公式字体。文本部分可以用 LaTeX 的 Computer Modern 字体,数学公式部分用 LaTeX 排版。社区版内置了 LaTeX 支持,默认效果已经很接近原版,前提是你安装了 texlive。
色彩方面,3Blue1Brown 的视觉体系偏爱高饱和度的纯色,黄、蓝、红、绿用得最多。Manim 内置了一组颜色常量,比如 YELLOW、BLUE、RED、GREEN,直接用这些就能保证整体配色跟原版风格统一。背景色上用纯黑(BLACK)或者深灰(DARK_GRAY),不要加渐变背景,简洁有力是王道。
5.2 控制动画节奏的秘密
很多人做出来的动画一眼看着不舒服,问题大多出在动作的时间分配上。Manim 里的每个动画都可以指定 run_time 参数,表示动画持续时间,但这个参数不是随便设的。3Blue1Brown 的节奏有一个很明显的规律:快慢交替。重要步骤放慢,展示生成过程的动画也放慢,过渡和位移则稍快。
我自己常用的时间模板:
| 动画类型 | run_time 建议值 | 示例场景 |
|---|---|---|
| Create(图形逐步画出) | 2~4 秒 | 圆、多边形、函数曲线 |
| Write(文字/公式逐笔写出) | 1~2 秒 | 标题、公式标签 |
| Transform(图形变形/移动) | 1~2 秒 | 点移动、切线滑动 |
| FadeIn/FadeOut(淡入淡出) | 0.5~1 秒 | 场景切换 |
同一场景内多个动画组合时,遵循“先慢后快、重点放慢”的原则。另外可以利用 lag_ratio 参数控制同一时间多个动画之间的时间偏移,数值越大,动画之间的先后感越强。
5.3 用摄像机移动提升空间感
如果只是平铺直叙的二维画面,看久了容易乏味。3Blue1Brown 视频中经常用镜头的缩放、平移来强调重点,这种镜头感用 Manim 也很容易实现:
self.play( self.camera.frame.animate.move_to(point).scale(0.5), run_time=2 )这样就把画面焦点移到了某个对象上并放大。对于三维场景,用 move_camera 让镜头环绕物体旋转,是最容易出效果的手段。特别提醒:镜头移动不要太多,否则观众会晕,重点场景移动一两次就够。
5.4 背景音乐的配合
Manim 本身不处理音频,生成的视频是静音的。很多科普up主会后期加上低音量的背景音乐,3Blue1Brown 视频也有专属的配乐风格,偏电子、偏氛围、音量很低。在剪辑软件里,把 Manim 渲染的视频(支持透明通道也可以渲染带 alpha 的版本)叠加到背景音乐上,保持音乐音量在人声的 10% 到 20% 左右,这样能显著提升质感。
6. 常见疑难问题与排查技巧实录
6.1 安装 LaTeX 失败或渲染公式报错
最典型的场景是运行包含 MathTex 代码时直接报错:Package inputenc Error 或者 File not found。这个问题的根源是系统里没装 LaTeX 引擎,或者装了但不是完整版本。解决思路:Windows 用户建议使用 MiKTeX 最新版,安装时勾选自动安装缺失宏包选项;macOS 和 Linux 用户确保安装了 texlive-full 而不是精简版。安装完成后重启终端,再渲染公式就正常了。
6.2 中文字体显示成方框
Manim 源码默认的字体不含中文字符,直接写中文 Text 对象预览时全部变成方框。解决方案有两个。最省事的方案:使用支持中文的字体文件,在 Text 设置里添加 font 参数,指向系统中文字体路径。在 Windows 下通常是 C:\Windows\Fonts\msyh.ttc(微软雅黑)。
text = Text("你好,世界", font="C:/Windows/Fonts/msyh.ttc", color=YELLOW)另一个方案:用 LaTeX 加中文支持包,但配置比较麻烦,不建议新手折腾。
6.3 渲染速度慢到怀疑人生
Manim 渲染占用的资源比你想象的高得多。三维场景、高分辨率、复杂曲面,几个因素叠加,一台普通笔记本渲染几十秒的动画耗时几十分钟都正常。我的排查顺序:先确认是否真的需要高清画质,测试阶段一律低压渲染;其次是检查动画个数,动画数量越多渲染越慢,尽量把多个动画合并成一个,减少中间帧;再次是检查 Updater 函数,如果用了 add_updater,它每一帧都会执行,逻辑越复杂越慢,尽量让 Updater 只做简单的数学计算。
6.4 不想写代码,但又想完全定制化怎么办
这个需求本质上是个“既要又要”的问题。我的建议是:先接受一个事实,现在没有任何一个零代码工具能做到完全拖拽式生成 3Blue1Brown 原版级别动画,原因不是工具不好,而是数学动画的核心在于逻辑编排,这个逻辑本身是一种抽象能力。Mango 这类工具能解决 80% 的场景,剩下 20% 的定制化需求,仍然需要手写代码或者让 AI 帮忙改代码。所以比较好的进阶路线是:先用零代码工具培养动画感觉,然后找个周末花两小时把 Manim 的基础语法过一遍,你不需要成为高手,只要有改参数、改坐标、改文本的能力,你的创作自由度就已经提升了十倍。
7. 学习路线建议与资源分享
我收到过很多类似私信:博主,我是数学老师,完全不懂编程,想学这个做微课,从哪儿开始?我给的建议一直很固定,整理成下面这个路线图。
7.1 阶段一:用现成模板做拼接(第 1-3 天)
从 GitHub 上下载 Manim 官方示例库,或者从中文社区搜“Manim 模板合集”,把代码复制到本地或在线 Playground,改标题、改公式、改数字。这个阶段的目标是产出第一个视频,哪怕只是让一个圆出现再消失。重点在于体验完整的工作流程:代码、运行、渲染、导出。
7.2 阶段二:针对性懂一点 Python(第 4-10 天)
不需要系统学 Python,只需要学几个高频关键词:import、class、def、val、for 循环、范围 range。这些基础语法足够读懂和修改 Manim 代码了。遇到不懂的函数,直接用 Python 的 help() 函数查看文档,或者去 Manim 官方文档搜。
7.3 阶段三:逆向拆解 3Blue1Brown 经典片段(第 11-30 天)
这个阶段是最有价值的。挑一个 3Blue1Brown 视频里你觉得最震撼的十秒片段,截图拆解它的视觉元素:用了什么图形、文字怎么出现、镜头怎么动的。然后用 Manim 尝试复刻,不用完全一致,达到八成相似的视觉效果就说明你真正入门了。我当年就是靠这个方式把曼德博集合的经典缩放动画研究清楚,那之后对 Manim 的理解提升了一大截。
7.4 需要收藏的优质资源
- Manim 官方文档:manimce 的文档地址我记得是 docs.manim.community,内容非常详细,每个对象、动画、参数都有示例。
- Manim 中文文档和教程社区:搜索“Manim 中文文档”,有热心网友维护的站点,对新手友好的中文教程不少。
- GitHub 上的 awesome-manim 仓库:整理了大量教程、插件、工具、示例代码,强烈推荐进去逛一圈。
- B站上搜“Manim 教程”,有一批 UP 主做过保姆级系列,比如“数学建模老哥”和一些数学科普博主的分享,跟下来能解决起步阶段的绝大多数问题。
8. 做个总结,顺便聊点实在的
我做的第一个 Manim 动画是一段 15 秒的抛物线运动演示,当时花了整整一个晚上才跑通,渲染出来的视频还带着水印和难看的黑边。但说实话,那天晚上看着小球在屏幕上划出那条流畅的抛物线,我比当年用几何画板做动态课件的时候兴奋得多。因为这个工具让人真正把“讲清楚”和“看得懂”这两件事结合在了一起。
后来给朋友做毕业答辩用的数学演示、给老师做微课动画、给科普账号做短视频,Manim 已经成了我工具箱里最稳定的输出方案。我自己的体会是:工具的作用从来不是替你思考,而是帮你的思考更顺畅地变成看得见的东西。零代码工具也好,手写代码也好,最终目的都是把复杂的数学讲得让普通人也能看懂,这件事本身的价值比任何工具技巧都要大。
最后分享一个小技巧:当你觉得自己的动画哪里不对劲但说不出来的时候,把动画放慢一倍看一遍,再快进一倍看一遍。慢放能暴露动画逻辑的问题,快进能暴露节奏的问题,两个问题都解决了,这个动画基本就过关了。