Manim简介

6 阅读5分钟

1. 什么是Manim

Manim 是一个用Python编写的动画引擎,专门用于创建精确、高质量的数学和科学解释性视频。它最初由著名数学教育频道3Blue1Brown的创作者为其视频而开发,并于后来开源。现在,主要由社区维护和发展的 Manim Community Edition (ManimCE) (www.manim.community/) 是最为活跃和推荐的版本。

它的核心思想是通过编写Python代码来精确控制动画的每一个细节,从而将复杂的数学概念、算法过程或科学原理以生动、直观的视觉形式呈现出来。

2. Manim的核心特点

Manim的强大之处在于其将编程的精确性与视觉艺术的表现力相结合,具体体现在以下几个方面:

  1. 编程式精确控制:用户通过Python脚本定义场景、对象和动画。这彻底改变了传统动画制作中繁琐的逐帧调整方式,让创作者能够精确到每一帧地控制对象的移动、变换和交互。
  2. 原生支持LaTeX:Manim内置了对LaTeX的支持,可以完美地渲染复杂的数学公式和符号,确保学术内容的准确性和美观性,这是其作为数学可视化工具的一大亮点。
  3. 丰富的对象与动画库
    • 数学对象 (Mobjects):提供了从基础的几何形状(圆形、正方形、箭头)到复杂的函数图像、坐标轴、矩阵、甚至3D物体的丰富图形单元。
    • 动画系统:内置了大量的动画效果,如对象的创建与消失、形状的平滑变换、对象的移动与旋转、文本的逐字书写等,可以轻松组合出复杂的动画序列。
  4. 高质量视频输出:Manim能够渲染出高分辨率的视频文件(如MP4格式),支持从低质量的快速预览到4K超高清的最终成片,满足从开发调试到专业制作的各种需求。

3. 快速入门

3.1 安装(Windows)

  1. 安装Python:确保你的系统已安装Python 3.7或更高版本。
  2. 安装依赖:Manim依赖于一些系统库,主要是FFmpeg(用于视频编码)和LaTeX(可选,用于公式渲染)。
  3. 安装Manim库:最直接的方式是使用Python的包管理器pip进行安装: pip install manim

3.2 编写第一个动画

在项目创建过程中可以使用PyCharm,也可以自行创建 .py文件。当然最推荐的还是 使用Manim 官方的 manim init project 命令创建项目骨架

创建步骤

  1. Win+R,输入cmd 打开你的终端(命令行界面);
  2. 切换到创建项目的目录。也可以在项目文件夹中直接 shift + 鼠标右键,点击 在此处打开Powershell窗口
  3. 输入 manim init project my-project --default
  • my-project: 这是你想要创建的项目文件夹名称,可以替换成你喜欢的任何名字;
  • default: 这个标志会让命令使用默认配置(如480p分辨率)快速创建项目,避免交互式问答;如果去掉--default会有一些交互式的问答,不过这个没有关系,生成之后也可以在配置文件中自行配置;

如果在执行manim init project my-project --default中存在卡住的问题,可能是与 Windows 系统中某些已安装的 UWP 应用的兼容性或交互问题。

可以使用manim init project my-project交互式创建,也可以自行创建文件。

  1. 创建之后的目录结构 命令执行成功后,会生成一个名为 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  # 默认要渲染的场景名称
  1. 视频生成命令

manim -pql main.py DefaultTemplate

DefaultTemplate一定要和main.py中的类名一致

命令参数解释:
-p:渲染完成后自动预览视频。
-ql:使用低画质进行快速渲染(-qm 为中画质,-qh 为高画质),这对开发和测试非常友好。
main.py:指定要渲染的脚本文件。
DefaultTemplate:指定要渲染的场景类名。

生成的视频目录 .\media\videos\main\480p15\DefaultTemplate.mp4