1. 什么是Manim
Manim 是一个用Python编写的动画引擎,专门用于创建精确、高质量的数学和科学解释性视频。它最初由著名数学教育频道3Blue1Brown的创作者为其视频而开发,并于后来开源。现在,主要由社区维护和发展的 Manim Community Edition (ManimCE) (www.manim.community/) 是最为活跃和推荐的版本。
它的核心思想是通过编写Python代码来精确控制动画的每一个细节,从而将复杂的数学概念、算法过程或科学原理以生动、直观的视觉形式呈现出来。
2. Manim的核心特点
Manim的强大之处在于其将编程的精确性与视觉艺术的表现力相结合,具体体现在以下几个方面:
- 编程式精确控制:用户通过Python脚本定义场景、对象和动画。这彻底改变了传统动画制作中繁琐的逐帧调整方式,让创作者能够精确到每一帧地控制对象的移动、变换和交互。
- 原生支持LaTeX:Manim内置了对LaTeX的支持,可以完美地渲染复杂的数学公式和符号,确保学术内容的准确性和美观性,这是其作为数学可视化工具的一大亮点。
- 丰富的对象与动画库:
- 数学对象 (Mobjects):提供了从基础的几何形状(圆形、正方形、箭头)到复杂的函数图像、坐标轴、矩阵、甚至3D物体的丰富图形单元。
- 动画系统:内置了大量的动画效果,如对象的创建与消失、形状的平滑变换、对象的移动与旋转、文本的逐字书写等,可以轻松组合出复杂的动画序列。
- 高质量视频输出:Manim能够渲染出高分辨率的视频文件(如MP4格式),支持从低质量的快速预览到4K超高清的最终成片,满足从开发调试到专业制作的各种需求。
3. 快速入门
3.1 安装(Windows)
- 安装Python:确保你的系统已安装Python 3.7或更高版本。
- 安装依赖:Manim依赖于一些系统库,主要是FFmpeg(用于视频编码)和LaTeX(可选,用于公式渲染)。
- 安装Manim库:最直接的方式是使用Python的包管理器pip进行安装:
pip install manim
3.2 编写第一个动画
在项目创建过程中可以使用PyCharm,也可以自行创建 .py文件。当然最推荐的还是 使用Manim 官方的 manim init project 命令创建项目骨架。
创建步骤
- Win+R,输入cmd 打开你的终端(命令行界面);
- 切换到创建项目的目录。也可以在项目文件夹中直接 shift + 鼠标右键,点击 在此处打开Powershell窗口;
- 输入
manim init project my-project --default
my-project: 这是你想要创建的项目文件夹名称,可以替换成你喜欢的任何名字;default: 这个标志会让命令使用默认配置(如480p分辨率)快速创建项目,避免交互式问答;如果去掉--default会有一些交互式的问答,不过这个没有关系,生成之后也可以在配置文件中自行配置;
如果在执行manim init project my-project --default中存在卡住的问题,可能是与 Windows 系统中某些已安装的 UWP 应用的兼容性或交互问题。
可以使用manim init project my-project交互式创建,也可以自行创建文件。
- 创建之后的目录结构
命令执行成功后,会生成一个名为
my-project的文件夹。它的核心结构非常简单,包含一个配置文件以及第一个动画脚本:
my-project/ # 你的项目根目录
├── manim.cfg # 项目的配置文件 (可设置分辨率、帧率等)
└── main.py # 默认的场景脚本文件 (内含示例动画)
manim.cfg:这是Manim项目的核心配置文件,可以在这里设置视频分辨率、背景色、渲染质量等全局参数,而不必每次在命令行中指定;main.py:这个文件已经为你准备好了示例动画代码。打开后,你会看到一个名为DefaultTemplate的类,它继承自Scene,并演示了动画制作过程;
from manim import *
class DefaultTemplate(Scene):
def construct(self):
circle = Circle() # create a circle
circle.set_fill(PINK, opacity=0.5) # set color and transparency
square = Square() # create a square
square.flip(RIGHT) # flip horizontally
square.rotate(-3 * TAU / 8) # rotate a certain amount
self.play(Create(square)) # animate the creation of the square
self.play(Transform(square, circle)) # interpolate the square into the circle
self.play(FadeOut(square)) # fade out animation
上述代码是自动生成,也可以使用官方示例的代码,docs.manim.community/en/stable/t…
manim.cfg配置文件
[CLI] # CLI(命令行界面)配置部分
frame_rate = 30 # 视频帧率(每秒30帧)
pixel_height = 1080 # 视频高度(1080像素,即1080p)
pixel_width = 1920 # 视频宽度(1920像素,即1080p)
background_color = BLACK # 背景颜色(黑色)
background_opacity = 1 # 背景不透明度(1 = 完全不透明)
scene_names = DefaultTemplate # 默认要渲染的场景名称
- 视频生成命令
manim -pql main.py DefaultTemplate
DefaultTemplate一定要和main.py中的类名一致
命令参数解释:
-p:渲染完成后自动预览视频。
-ql:使用低画质进行快速渲染(-qm 为中画质,-qh 为高画质),这对开发和测试非常友好。
main.py:指定要渲染的脚本文件。
DefaultTemplate:指定要渲染的场景类名。
生成的视频目录 .\media\videos\main\480p15\DefaultTemplate.mp4