manimgl 常见问题
作者:鹤翔万里 & widcardw
Manim-Kindergarten
version 1.2
更新:2021-10-06
Contents
一切之前
manim 是一个使用 python 制作视频的动画引擎。学习它你首先要会一点 python,至少要学会 python 的基础语法、模块的调用以及类的基础知识(如果想要阅读源码,还需要掌握更多 python 面向对象的知识)。没有 python 的知识学 manim 是毫无意义的,会非常吃力,也会遇到非常多的问题。学会了 python 之后便可以少走非常多的弯路,这也是我们的忠告。因此,加入我们 Manim-Kindergarten[1] 首先要会使用 python,我们会在入群问题[2]中进行一个最基础的检测。
最后,本常见问题文档基于 manim 的 master 分支版本[3],此文档中未出现的问题可能在旧版也会有同样问题,所以推荐两个常见问题文档一起查阅。
如何提问
- 在 mk 群里提问,首先需要阅读完本常见问题文档和基于旧版的常见问题文档
- 确保你问的问题不是由于 python 基础语法问题而造成的错误。
- 如果在
manim使用过程中出现了报错:- 确保问题不在本文档和旧版常见问题文档中
- 将你的代码和完整的报错信息全部发送到群中,这样会方便群友为你解答
- 如果你想要实现某个效果,但不知道如何操作。请将你想要达到的效果详细易懂地描述出来。
- 语气友善,态度谦虚,避免造成不必要的纠纷。
教程推荐
- Python 教程
- 《Python 编程:从入门到实践》,ISBN 978-7-115-42802-8
- 《流畅的 Python》,ISBN 978-7-115-45415-7(适合掌握 Python 基础知识后进阶)
- 菜鸟教程-Python3 教程 https://www.runoob.com/python3/python3-tutorial.html
manim教程- MK 中文官网:https://manim.org.cn/
- manim 教程文档(制作中):https://docs.manim.org.cn/
- MK 制作的系列视频教程(制作中)
- MK 制作的视频源码 (videos/) 和常用自定义类 (utils/)
- 群主 cigar666 的 B 站专栏
- pdcxs 大大转载的 manim 教程
- GitHub 上 cai-hust 的中文教程
- 看
manim源码
- 新版
manim教程- 新版
manim官方文档 https://3b1b.github.io/manim/ - 新版
manim中文文档 https://docs.manim.org.cn/
- 新版
- OpenGL 及 shaders 教程(Grant 亲自推荐)
- The Book of Shaders: https://thebookofshaders.com/
- Python & OpenGL for Scientific Visualization: https://www.labri.fr/perso/nrougier/python-opengl/
- Geometry Shader: https://learnopengl.com/Advanced-OpenGL/Geometry-Shader/
1. 安装问题
注: 这里未提到的部分安装时会出现的问题请见旧版常见问题文档“manim常见问题 v3.1”
1.1 Python 问题
Q1: 关于 pip install manimgl
如果想要安装新版,请不要这样做。pypi 上目前的 manimlib 仍为旧版,即目前 cairo-backend 分支中的版本。安装新版请克隆下 GitHub 上的 3b1b/manim 的 master 分支并根据文档安装使用,或者使用 pip install manimgl 来安装 pypi 上的版本。
注意:如果想要使用实时最新的版本,请最好克隆 github 的仓库并在该目录中使用
pip install -e .来进行安装。由于 pypi 上的版本需要管理员手动操作,因此相对于仓库源码会有一些延迟。
Q2: 关于 pip install manim
如果想要安装 3b1b 最新版 manim,请不要这样做。pypi 上的包 manim 为 community 版本,与 3b1b 版本有很大不同。它们的命令区别在后面会提到。
Q3: 无法安装包 mapbox_earcut
如果在安装包时出现报错
CMake must be installed to build the following extensions
先通过运行 pip install cmake 安装 cmake,再尝试。
Q4: pip install -e . 时抛出 Exception:Versioning for ... 异常
该问题已在 #1565 修复。目前可以通过 git clone https://github.com/3b1b/manim.git[4]克隆下源码,也可通过下载 zip 后用 pip install -e . 命令安装。
2. 运行时问题
2.1 import 问题
Q1: 无法导入 OpenGL,抛出 ImportError
在最新的 macOS Big Sur 里,OpenGL 的默认位置被从 library 改到了 library 下面的 frameworks 中,所以在目前的版本中 PyOpenGL 找不到原来的位置,会导致报错。
ImportError: ('Unable to load OpenGL library',
'dlopen(OpenGL, 10): image not found', 'OpenGL', None)
为此,长期的解决方法是等待接下来的 Python 更新。短期的解决方法是改变 PyOpenGL 的读取位置,步骤如下:
- 找到 Python 下
PyOpenGL的文件 OpenGL/platform/ctypesloader.py,并且在做出任何改动之前做好完整的备份 - 找到其中的
fullName = util.find_library(name) - 把它更改为
fullName = '/System/Library/Frameworks/OpenGL.framework/OpenGL'
Q2: 无法导入 manim_sandbox
使用命令 manimgl <file> <SceneName> 进行渲染时,当前路径会自动切换到 <file> 所在的路径。所以在文件中导入外部库是要以当前文件路径为基础的。解决方法有以下几个:
- 将要渲染的文件和要引用的外部库放在同一个目录下
- 在当前的文件头部将要引用的外部库通过
sys.path.append(<folder>)添加到sys.path变量中 - 使用
python manimlib <file> <Scene>来代替,这时的基础路径为manimlib所在的路径,可以方便导入
📌 2.2 LaTeX 问题
具体 问题请见旧版常见问题文档 “manim 常见问题 v3.1”
Q1: 如何使用中文
如果要通过 (即 manim 中的类 TexText)使用中文,需要在 custom_defaults.yml 文件中进行更改。
将其中的 tex: 部分改为
tex:
text_to_replace: [tex_expression]
executable: xelatex -no-pdf
template_file: ctex_template.tex
intermediate_filetype: xdv
如果想要使用 生成自定义字体[5],请在 tex_templates/ctex_template.tex 文件的 \linespread{1} 的上面添加以下两行代码
\usepackage{xeCJK}
\setCJKmainfont{SourceHanSerifSC-Medium.otf}
另外也请注意,Text 和 TexText 不同,具体区别下面会提到。
Q2: 怎么检测少了哪个包
尝试运行群文件“入群必看!!”中的 check_latex_packages.py 文件,其中哪个包检查后为 failed,则缺少了哪个包。可以安装这个包,或者不必要的话将其从 ctex_template.tex 中删除。
Q3: 未设置 temporary_storage 导致的问题
如果未在配置的 yml 文件中设置 temporary_storage 的目录的话,manimgl 将会使用 Windows 默认的缓存路径。这时可能会因为无法访问导致各种问题。所以出现 OSError: ... not Found 这样的问题时可以先考虑设置一个 temporary_storage 路径。
Q4: 我放弃了,不装 LaTeX 了
目前也是有暂时解决方案,可以使用 MK 的 Manim-MathJax 来生成公式。这个库依赖于 MathJax,因此你需要先安装相关依赖才能使用(相比完整的 体积更小,速度更快,但功能没有那么丰富)。
同时,目前该库可能还不是很成熟,也不支持带有中文的公式。
2.3 dvisvgm 问题
📌 Q1: 报错 OSError: C:\Users\...\Temp\Tex\<...>.svg not Found
如果你运行 manim 的位置不在 C 盘,那么请按照以下处理;如果你运行的位置在 C 盘,请看旧版常见问题文档中“dvisvgm 问题”部分。
处理这个问题有两种方法:
- 更换 2.8 以上版本的 dvisvgm
- 在
custom_config.yml中为temporary_storage设置一个在同一磁盘下的路径
Q2: 报错 ERROR: MiKTeX session could not be initialized
有可能在你的环境变量中已经有其他版本的 dvisvgm,而这个版本在 MiKTex 版本的上方,解决方法是将 MiKTeX 所包含 dvisvgm 的环境变量移动到其它版本的上方。
2.4 命令行选项问题
Q1: -pl 选项不能用了怎么办
在新版中,命令行参数有了很大改变。-p 选项已经变成了演讲者模式,取而代之的是 -o 选项(在保存文件后打开文件)。目前常用的选项如下[6]:
-w将场景写入视频文件-o将场景写入文件,并打开-s直接跳到视频最后一帧,但是并不保存-s与-o连用(-s -o或-so),保存并打开视频最后一帧manimgl -h查看常用命令参数
Q2: 怎么调整导出画质
目前默认了四种画质
- low: 480p15
- medium: 720p30
- high: 1080p30
- ultra_high: 2160p60
可以通过更改 custom_config.yml 中的 camera_qualities.default_quality 来设置默认质量。也可以通过使用 -l,-m,--hd,--uhd 四个选项指定质量。也可以通过 -r WxH 指定分辨率、--frame_rate FRAME_RATE 指定帧率。
2.5 窗口问题
Q1: 在运行的时候为什么会弹出一个窗口,如何交互
这是新版本的特性,有实时播放的窗口,并且可以通过鼠标键盘进行交互。默认支持的交互操作有:
- 滚动鼠标中键来上下移动画面
- 按住键盘上
z键的同时滚动鼠标中键来缩放画面 - 按住键盘上
s键的同时移动鼠标来平移画 - 按住键盘上
d键的同时移动鼠标来改变三维视角
需要注意:请确保你的输入法在英文模式,使用中文模式按上述按键无效。
Q2: self.embed() 模式下窗口卡出,而且无法交互
在进入 self.embed() 打开了 iPython 终端后,窗口暂时无法触碰,否则会出现无响应的情况(但是只要新的命令输入后就会恢复)。
要想在这是也通过鼠标进行交互,先输入 touch() 或者 self.interact()。
Q3: 如何调整窗口的位置
在 custom_config.yml 中,更改 window_position。也可以使用 -f 选项来全屏显示窗口。
📌 2.6 文字问题
Q1: 使用 Text 时中文都是小方块怎么办
出现这个问题是因为当前 Text 的字体不包含中文字形,解决方法是通过 font= 指定一个带中文字形的字体,具体字体名字应该写什么请看 Q4。
Q2: 有些中文无法正常显示,出现实心等问题怎么办
该问题已经在 #1586 中基本修复,请更新至最新版本再尝试,如果仍遇到了类似问题,欢迎在群里指出。
Q3: Tex、TexText、Text 有什么区别
旧版本中的 TexMobject 和 TextMobject 改了名字。TexMobject 改为了 Tex,TextMobject 改为了 TexText。
Tex: 使用 的公式环境,使用 语法TexText: 使用 的正文环境,使用 语法Text: 使用manimpango来生成 svg 文字,不使用 语法,可以更换字体
Q4: 如何查看 Text 中的 font 该填什么
如果填入了 manimpango 无法识别的字体名称,它会自动用默认字体来进行渲染,警告语句如下
(process:1680): Pango-WARNING **: couldn't load font "X Not-Rotated 48",
falling back to "Sans Not-Rotated 48", expect ugly output.
在 Python 中使用下面的命令可以查看可用的字体列表
>>> import manimpango
>>> fonts = manimpango.list_fonts()
>>> for f in fonts:
... print(f)
同时,字重 (font weight)、斜体 (slant) 等属性可以在 Text 的 weight和 slant 参数中设置。例如:
text = Text(
"Here is some text.",
font="Consolas",
weight="MEDIUM",
slant="SLANT",
)
3. 其他问题
Q1: 新旧版 manim 有什么区别
新版 manim 使用 OpenGL 和 moderngl 来进行 GPU 渲染,会有更快的速度,也支持实时渲染和交互操作。更改了很多底层逻辑和结构,也调整了一些小的用法。具体的所有用法上的更改待更新。
关于三个版本的 manim 的简要说明在 #1243
Q2: 三个版本 manim 的安装途径和命令怎么区分
| manim 版本 | 包名称 (pypi) | 导入[7] | 命令[8] |
|---|---|---|---|
| 3b1b 新版[9] | manimgl | manimlib | manimgl |
| community 版本 | manim | manim | manim |
| 3b1b 旧版[10] | manimlib | manimlib.imports | python manim.py |
Q3: 带透明度的 png 图片背景为黑色怎么办
已经在 #1541 中修复,请更新至最新版。
Q4: 某些线条不显示,或者出现杂乱线条怎么办
这可能是你电脑 GPU 或者 OpenGL 的问题,或许将显卡设置调为“高性能模式”会有效果,但有时它又会自己好了,反正这个问题很玄学。
4. 注意
如果有以上之外的问题, 可以在群里提出, 也可以在 GitHub 上提出 issue,或者按照下图操作

也请注意群规第 3,4 条
- 虽为 manim 交流群, 但不要一有问题就提出来, 简单的问题能自己解决最好, 不能解决时再寻求帮助
- 群主和管理员平时较忙, 有时若不能及时回复敬请谅解
5. 附录
更新日志
v 1.0
- 开始为新版
manim编写常见问题文档
v 1.1
- 更新中文文档的网址到 manim.wiki
- 新增为 修改默认字体到方法
- 新增了查看字体名字的方法
- 新增了
pip安装manimgl会出现的问题 - 新增了版本区分的相关内容
- 新增了两个其他问题 Q3、Q4
v 1.2
- 更新中文文档网址到 manim.org.cn
- 修复了 pip 安装时的 versioning 问题
- 新增了导入外部库的指引
- 新增了
temporary_storage引起的各种问题 - 新增了窗口相关问题
- 新增了中文
Text字体问题 - 添加了线条不显示问题的解决方法
- 新增了获取版本的方法