
在我用3Blue1Brown的manim数学引擎制作了几期视频之后,有不少人觉得视频效果不错,也想自己尝试一番,不过压根看不懂说明文档,跑来问我这个东西究竟怎么用。说实话,我很早之前就想说说manim的配置方法了,不过因为(1) manim的配置有点麻烦;(2) 我懒得做后期;(3) 视频不容易修补错漏,这部分内容就迟迟没有放出来。刚好最近B站出了专栏,省去了不少制作视频的负担,所以我就采用了这种方式来讲解。看到这些内容的人可能会非常少,不过无所谓了,我相信真爱总是能找到这里的(`・ω・´)
闲话不多说,直接进入这篇文章的正题:如何才能让manim跑起来。
考虑到不少人用的是Windows操作系统,加上没有太多配置方面的经验,所以我会详细讲在Windows平台上配置manim的方法,尽可能简化流程,并让你少走弯路。况且熟悉Linux的人也根本不用我来教,自己就能捣鼓明白,对吧~
〇、关于manim的简单介绍
manim是3Blue1Brown(3b1b)频道主Grant Sanderson编写的一个基于Python的数学动画引擎,Windows、Mac OS、Linux等操作系统下均可运行。用它制作出来的视频简洁美观,当然也可以用来做别的东西,比如这期专栏的封面。
manim的源码放在GitHub上,地址为https://github.com/3b1b/manim。
一、manim的运行前提和注意事项
下面罗列的是运行manim所需的条件。看着挺多挺杂,但是别急,我会详细讲。
manim源码:这个...还用说吗?
Python 2.7.x + pip:Python的本体以及模块管理工具。
Git for Windows:代码管理工具,但是在这里是为了安装一个pip无法安装的Python模块。
LaTeX:美到极致的文档处理系统,在这里是为了生成视频中的文字。推荐直接安装CTeX,下面我也会按照CTeX来讲。
FFmpeg:音视频流处理软件。
dvisvgm:DVI格式到SVG格式的转化工具。然后是一点重要的注意事项:
使用合法路径!所有路径中不要带有空格及特殊字符,也不要有中文字符,尽量使用英文字符+数字+下划线的组合。
二、manim源码
下载manim源码访问https://github.com/3b1b/manim/,点击“Clone or Download”,在其中选择“Download ZIP”。找个地方将下载好的manim-master.zip解压,这步就算完成了。
对源码稍加改动光下载源码还不够,这个源码还需要针对Windows系统做出些许修改。主要有两条改动:
打开源码根目录下的requirements.txt,删掉其中numpy和scipy所在的行。这是因为在Windows下用pip安装numpy时并不会同时安装MKL库,导致接下来scipy的安装出现大几率报错的情况。所以我们防患于未然,提前删掉这两行,后面手动安装。
打开源码根目录下mobject文件夹中的tex_mobject.py,翻到最下面,找到tex_to_dvi和dvi_to_svg两个函数,将这两个函数中的“> /dev/null”改成“> NUL”。详见下面两张图。这是因为“> /dev/null”是Linux系统下的“黑洞”,而Windows系统下的“黑洞”不是这个名字,而是“> NUL”。

dvi_to_svg函数中需要改动的部分(红框)

tex_to_dvi函数中需要改动的部分(红框)
三、Python 2.7.x、pip、Git for Windows以及相关Python模块的安装
安装Python 2.7.x访问www.python.org,找到Downloads标签页,下载32位的Python 2.7.x(目前的最新版本是2.7.14),然后安装即可。安装时注意一点,一定要记得把python.exe加进Path,具体方法见下图。

将python.exe添加进Path
安装Visual C++ Compiler for Python 2.7访问aka.ms/vcpython27,点Download下载VC++ for Python 2.7,然后直接安装,没什么好说的。
升级pip至最新版pip会随着Python一同安装,但是版本可能稍低,不能满足后需要求。此时唤出命令提示符(Win徽标键+R,输入“cmd”后回车),输入“pip install --upgrade pip”后回车,即可将pip升级至最新版。在命令提示符中键入“pip --version”可查看当前pip的版本,只要高于8.0就可以。
安装Git for Windows访问git-for-windows.github.io,点Download下载Git for Windows。安装时你完全可以无脑狂点Next,不过也可以耐心看看它究竟在设置些啥。
手动下载numpy和scipy的.whl文件还记得之前删掉的两行吗?一行numpy,一行scipy。现在我们要手动去找合适的版本安装,不然就很容易报错。先说numpy。访问http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy,下载numpy‑1.13.1+mkl‑cp27‑cp27m‑win32.whl,把它放到manim源码的根目录下。这个文件名中“cp27”代表它适用于Python 2.7.x,“win32”代表它适用于32位的Python。scipy也是同理。访问http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy,下载scipy‑0.19.1‑cp27‑cp27m‑win32.whl,也把它放到manim源码的根目录下。如果你不听话,安装的是64位的Python,那就下载文件名末尾是“win_amd64”的.whl文件。
相关模块的安装
在命令提示符中切换到manim源码所在的目录运行命令提示符,然后切换到manim源码所在的目录。怎么做呢?比如说manim源码放在路径D:\github\manim\下,而目前命令提示符上显示的是C:\Users\Solara570>,那就依次键入如下两条命令: D: cd github\manim此时命令提示符左边显示的应该就是manim源码所在的目录了。其他路径同理。
安装numpy模块先装numpy。命令提示符中键入“pip install numpy‑xxx.whl”,回车即可。后面的“numpy‑xxx.whl”代表你之前下载并安放好的numpy的whl文件名。
安装scipy模块确认numpy安装成功之后,再安装scipy。命令提示符中键入“pip install scipy‑xxx.whl”,回车即可。后面的“scipy‑xxx.whl”代表你之前下载并安放好的scipy的whl文件名。
用pip安装剩余的模块搞定两个老大难之后,剩下的就很简单了。确保你有网络连接,然后在命令提示符中键入“pip install -r requirements.txt”,pip会自动在网络上收集对应版本的模块并且安装好。前面如果都照着做了,这里就会非常顺利。你只需要确保没有“大红字”(报错信息)出现就行了。
四、CTeX的安装和配置
安装CTeX访问http://www.ctex.org/CTeXDownload,下载稳定+完整版本的CTeX,找个好地方直接安装即可。记得要安装所有组件。
在线同步TeX宏包打开刚安装好的WinEdt,找到菜单栏中的“TeX→MiKTeX→MiKTeX Package Manager”,单击打开MiKTeX宏包管理器。确保网络连接通畅,在打开的窗口中,找到菜单栏中的“Repository→Synchronize”,单击以在线同步宏包,耐心等待同步完成即可。
五、FFmpeg与dvisvgm的配置
下载FFmpeg访问ffmpeg.zeranoe.com/builds/,Version下选择稳定的版本(目前是3.3.3),Architecture按照系统类型选择,Linking选择Static,点Download下载即可。然后找个好地方解压下载之后的zip。
下载dvisvgm访问https://sourceforge.net/projects/dvisvgm/,点Download下载即可。然后找个好地方解压下载之后的zip。
环境变量的设置 具体操作如下,图示见后:
右击“计算机”,点选“属性”;
弹出的窗口左侧点选“高级系统设置”;
选择“高级”页面,单击下方的“环境变量...”;
在上面的用户变量中找到“Path”变量,编辑这个变量的值,在末尾添加ffmpeg.exe和dvisvgm.exe所在的目录(FFmpeg的路径多了一个\bin\,注意一下)。不同路径要用半角分号分隔开,最后确定即可。

设置环境变量的方法
六、检查各个程序和模块是否正常安装/配置
在命令提示符中依次输入以下内容进行检查:
python --version:Python安装完成后,输入这条指令会显示当前Python的版本。
pip list:展示当前已经安装的Python模块,其中必须有aggdraw、colour、numpy、Pillow、progressbar、scipy和tqdm。
latex --version:CTeX安装完成后,输入这条指令会显示当前MiKTeX的版本。
ffmpeg -version:FFmpeg配置正确后,输入这条指令会显示当前FFmpeg的版本以及其他信息。
dvisvgm --version:dvisvgm配置正确后,输入这条指令会显示当前dvisvgm的版本。如果有其中一条命令没有正常执行,那就需要再回头检查相应的安装/配置过程是否有误。
七、开始享受使用manim的乐趣吧~
检查全部通过之后,manim的配置就算全部完成惹!接下来就是试试manim制作出来的视频效果啦~
打开命令提示符,切换到manim源码所在的目录下,键入“python extract_scene.py -p example_scenes.py”。随后会弹出一个菜单,显示当前文件中涉及的所有场景,输入前面的数字之后回车就能预览所选场景的效果。(如下图所示)

红线上是输入的命令,红框中是选择的场景
example_scenes.py提供了三个可以观看的场景:
SquareToCircle:画出一个白边的正方形,然后变换成一个红边的圆形。
WarpSquare:让一个正方形经过复平面上的e^z变换。
WriteStuff:很直白,就是在屏幕上写“Stuff”字样。
简单拆解一下上面这条命令:“python extract_scene.py -p example_scenes.py”
前两个参数是固定的,不用变,也不能变。
-p代表预览模式(preview),这个模式会用低质量展示当前场景中的动画。你也可以换成-w或者-s,其中-w代表写入模式(write),这个模式会把当前场景的内容写成一个视频,写入完成会告诉你放在了哪个路径下;-s代表保存模式(save),这个模式会把场景的最后一帧写成图片,告诉你路径之后再直接显示出来。
最后一个参数就是包含场景的*.py文件。example_scenes.py只是个样例,你也可以自己新建一个*.py文件,在里面写场景。
八、后记
好像写得太长了呢......但是在Windows下的配置就是这么麻烦,如果改用Linux的话就简单得多,不妨装个虚拟机一试。
而且这也只是教你如何让manim跑起来,我还没有说到任何关于写场景的内容。所以考虑再三,我把封面从“如何使用manim”改成了“如何配置manim”,有时间+需求的话再补。
如果你真的愿意自己玩玩这个引擎的话,不妨去学点Python,读读源代码。Grant制作视频时使用的代码全都放在old_projects文件夹下,你可以对着视频效果去看源代码,很快你就能学到不少独特的用法了。
今天就到这里吧,祝你玩得愉快~
(°∀°)ノ