【已过时】想学着制作3Blue1Brown风格的视频吗?先让manim跑起来再说~
Solara570
编辑于 2020年05月08日 21:09

注:这期专栏的内容已经严重过时,参考需谨慎。

在我用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源码

  1. 下载manim源码访问https://github.com/3b1b/manim/,点击“Clone or Download”,在其中选择“Download ZIP”。找个地方将下载好的manim-master.zip解压,这步就算完成了。

  2. 对源码稍加改动光下载源码还不够,这个源码还需要针对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模块的安装

  1. 安装Python 2.7.x访问www.python.org,找到Downloads标签页,下载32位的Python 2.7.x(目前的最新版本是2.7.14),然后安装即可。安装时注意一点,一定要记得把python.exe加进Path,具体方法见下图。

将python.exe添加进Path

  1. 安装Visual C++ Compiler for Python 2.7访问aka.ms/vcpython27,点Download下载VC++ for Python 2.7,然后直接安装,没什么好说的。

  2. 升级pip至最新版pip会随着Python一同安装,但是版本可能稍低,不能满足后需要求。此时唤出命令提示符(Win徽标键+R,输入“cmd”后回车),输入“pip install --upgrade pip”后回车,即可将pip升级至最新版。在命令提示符中键入“pip --version”可查看当前pip的版本,只要高于8.0就可以。

  3. 安装Git for Windows访问git-for-windows.github.io,点Download下载Git for Windows。安装时你完全可以无脑狂点Next,不过也可以耐心看看它究竟在设置些啥。

  4. 手动下载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文件。

  5. 相关模块的安装

    1. 在命令提示符中切换到manim源码所在的目录运行命令提示符,然后切换到manim源码所在的目录。怎么做呢?比如说manim源码放在路径D:\github\manim\下,而目前命令提示符上显示的是C:\Users\Solara570>,那就依次键入如下两条命令:  D:  cd github\manim此时命令提示符左边显示的应该就是manim源码所在的目录了。其他路径同理。

    2. 安装numpy模块先装numpy。命令提示符中键入“pip install numpy‑xxx.whl”,回车即可。后面的“numpy‑xxx.whl”代表你之前下载并安放好的numpy的whl文件名。

    3. 安装scipy模块确认numpy安装成功之后,再安装scipy。命令提示符中键入“pip install scipy‑xxx.whl”,回车即可。后面的“scipy‑xxx.whl”代表你之前下载并安放好的scipy的whl文件名。

    4. 用pip安装剩余的模块搞定两个老大难之后,剩下的就很简单了。确保你有网络连接,然后在命令提示符中键入“pip install -r requirements.txt”,pip会自动在网络上收集对应版本的模块并且安装好。前面如果都照着做了,这里就会非常顺利。你只需要确保没有“大红字”(报错信息)出现就行了。

四、CTeX的安装和配置

  1. 安装CTeX访问http://www.ctex.org/CTeXDownload,下载稳定+完整版本CTeX,找个好地方直接安装即可。记得要安装所有组件。

  2. 在线同步TeX宏包打开刚安装好的WinEdt,找到菜单栏中的“TeX→MiKTeX→MiKTeX Package Manager”,单击打开MiKTeX宏包管理器。确保网络连接通畅,在打开的窗口中,找到菜单栏中的“Repository→Synchronize”,单击以在线同步宏包,耐心等待同步完成即可。

五、FFmpeg与dvisvgm的配置

  1. 下载FFmpeg访问ffmpeg.zeranoe.com/builds/,Version下选择稳定的版本(目前是3.3.3),Architecture按照系统类型选择,Linking选择Static,点Download下载即可。然后找个好地方解压下载之后的zip。

  2. 下载dvisvgm访问https://sourceforge.net/projects/dvisvgm/,点Download下载即可。然后找个好地方解压下载之后的zip。

  3. 环境变量的设置 具体操作如下,图示见后:

    1. 右击“计算机”,点选“属性”;

    2. 弹出的窗口左侧点选“高级系统设置”;

    3. 选择“高级”页面,单击下方的“环境变量...”;

    4. 在上面的用户变量中找到“Path”变量,编辑这个变量的值,在末尾添加ffmpeg.exedvisvgm.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文件夹下,你可以对着视频效果去看源代码,很快你就能学到不少独特的用法了。

今天就到这里吧,祝你玩得愉快~ 

(°∀°)ノ