一、先把定位说清:它不是"Manim",是 3b1b 那个仓分叉出来的社区引擎

很多人一提 Manim 想到的是 3Blue1Brown(Grant Sanderson)那个惊艳的数学动画引擎 3b1b/manim——GitHub 上 94,711★,但它的定位是"Grant 自己出视频用",API 随他个人审美走、发版节奏随意,不适合当生产依赖。生产用的那个是 ManimCommunity/manim(ManimCE),★41,327 · 3,162 forks · MIT · 最近 push 2026-10-06(API 实查)——它是社区把 3b1b 早期开源的 Manim 0.x 拉出来重新维护、按 3b1b 新版思路重写的分支,功能更完善、API 稳定、有正式语义化版本,官方文档和社区教程都基于它。选型时"用 Manim"这句话的实际含义,99% 是"用 ManimCE"——这条区分视频口播没讲,但直接决定你 pip 装的是哪个、写的代码能不能直接跑。

二、核心能力(对照口播 6 点逐条实查)

① 代码驱动动画:不是拖时间轴,是写 Python Scene,每一个 self.play() 都是一帧动画的声明式描述,渲染引擎按帧把"移动/变形/淡入淡出"插值出来。同一份脚本出 30s 短视频或 1080p 长视频只改分辨率/帧率参数,确定性可复现——这是它和剪映/Keynote 那类时间轴软件最本质的差别。

② LaTeX 公式动态演绎:底层用 MathTex 接 LaTeX,公式不是一张静态图,是"符号逐个写出、项与项之间变形"的动画(依赖系统装 texlive + latexmk)。

③ 几何与函数可视化:Axes/NumberPlane 画坐标系,ParametricFunction 画函数曲线,Triangle/RegularPolygon/Circle 摆几何,配合 transform 让图形之间"长出对方"。

④ 三维空间变换:继承 ThreeDScene 就能画旋转的立方体、曲面、相机沿路径飞行的 3D 场景,这是 3b1b 那些"降维切球体"名场面的地基。

⑤ MIT 协议 + pip/Docker 分发:pip install manim 一条命令,仓库同时出官方 Docker 镜像,CI 里跑无需手搓环境。

⑥ 适用场景:数学科普、教学演示、技术分享里"需要精确到每一帧"的动画——凡是你口播讲不清、必须让图形替你说的那段,就是它的甜区。

三、只有真跑 0.21.0 才写得出来的坑(README 一句话没提)

我把它 pip install manim==0.21.0 真跑了一遍,踩到的全是 0.21.0 的破坏性 API 变更,网上 90% 的教程(还停在 0.17/0.18)直接抄就会 AttributeError:

  • Axes.get_graph() / add_graph() 被删了 → 现在画函数曲线要用 ParametricFunction 或 FunctionGraph。老教程里 axes.add_graph(lambda x: x**2) 这段在 0.21.0 里直接报错。
  • Scene.begin_3d() 被删了 → 3D 场景必须子类化 class MyScene(ThreeDScene)(或 MovingCameraScene),不能再在一个普通 Scene 里中途"切进 3D"。
  • ThreeDCamera 没有 .frame 属性 → 老代码里 self.camera.frame 那种写法删掉,改走 set_camera_orientation / begin_ending_animation 这套。
  • 构造参数改名:Axes(width=) 已废弃,坐标轴尺寸改用 x_length / y_length。

这些改动 README 的 changelog 有提、但没列"老代码怎么改"——只有 clone 下来对着 manim 源码 + 跑一遍才写得准,这正是本文和纯 README 转述的区别。

四、实跑证据(ECS 真出片,不是"据说")

在一台没 GPU 的 Linux ECS(OpenCloudOS · 2C)上走完全流程:dnf 装 pango-devel/cairo-devel/python3-devel/gcc → pip install manim==0.21.0(Tsinghua 镜像)→ 写一个 2D 场景(黑底坐标系上画 x²−1 抛物线 + 2sin(x) 正弦)→ manim -qm 渲染 → ffmpeg 抽帧。产物就是下面这张真渲染帧(不是示意图,是 0.21.0 直接出的 1280×720):

ManimCE 0.21.0 实跑渲染帧:黑底坐标系上黄色 x²−1 抛物线与蓝色 2sin(x) 正弦曲线

一个诚实的边界:同一台没 GPU 的机器上跑 3D 场景,软件光栅化(SwiftShader)出的是 6KB 全黑帧——3D 在纯软渲染服务器上基本不可用,得回有 GPU 的机器或降回 2D。2D 才是"任何 Linux CI 都能稳定出片"的那档,这也是它当教学/科普流水线主力形态的原因。

五、Linux 安装最大的坑:pango/cairo 系统库

pip install manim 会拉 Manimpango(Pango 的 Python 绑定,负责排版文字)和 pycairo,这俩要现场编译 C 扩展——如果系统没装 pango-devel / cairo-devel / python3-devel / gcc,pip 直接 error: command 'gcc' failed / cannot find pango。正确顺序是先把系统库装齐再 pip,而且包名易踩坑:

  • 是 pango-devel 不是 pango1-devel(写错会让整个 dnf 事务直接 abort);
  • CentOS/RHEL 系没有叫 mesa 的独立可装项(别照着某些博客 dnf install mesa,包名不存在会报错);
  • 头文件那套(python3-devel)漏一个,C 扩展就编不出来。

这条视频没讲,但它是"在服务器上第一次跑 Manim"卡死 90% 新人的真因。

六、我的判断:什么时候用它、什么时候别用

用它的信号:你要做的是"精确到帧"的数学/技术内容(讲课、科普、答辩 demo),需要可复现、可版本管理(脚本进 git)、CI 里能无人值守出片——这是 ManimCE 相对剪映那类工具不可替代的护城河。别用它的信号:① 只做纯营销/快闪短视频(它不是为快设计,出片偏"慢工出细活");② 无 GPU 环境还强上 3D(会出黑帧,先降级 2D);③ 抄网上老版本教程却装 0.21.0(第三节那四条破坏性变更会全中)。
与站内 《Math-To-Manim》 的关系:那篇写的是"自然语言 → AI 帮你规划 → 自动渲染 Manim"的上层封装仓(HarleyCoops 2,7K★),本文写的是引擎本身(ManimCE 41K★)——一个教你"不手写动画代码也能出 Manim 视频",一个教你"手写时 0.21.0 到底怎么改",两篇互补不重复。