如果您在過去十年中看過 YouTube 上的教育影片,您幾乎肯定見過 Manim 的作品。Grant Sanderson 的 3Blue1Brown 頻道獨特的風格——流暢、精確動畫的幾何變換、即時展開的方程式以及將複雜數學概念渲染得直觀可視——完全由這個開源 Python 函式庫驅動。Manim 代表 Mathematical Animation Engine(數學動畫引擎),它已經讓世界級的數學視覺化創作變得普及。
Sanderson 最初編寫 Manim 作為個人工具,用於製作他的 3Blue1Brown 頻道的動畫,該頻道已成長為超過 600 萬訂閱者。該函式庫於 2019 年首次公開釋出,並迅速在教育工作者、學生和內容創作者中獲得關注,他們希望將同樣的視覺清晰度帶到自己的專案中。Manim 背後的基本見解是:數學動畫不是插圖——它們是論證。精心設計的動畫可以以靜態圖表無法做到的方式,傳達證明背後的邏輯或概念背後的直覺。
該函式庫自首次開源釋出以來已顯著發展。最重要的發展是 ManimCommunity 分支的出現,它接管了 Sanderson 的原始程式碼庫,並增加了全面的文件、穩定的發佈週期、廣泛的測試和數十項新功能。兩個版本都仍在積極維護,但它們現在服務於不同的受眾:原始版本用於 3Blue1Brown 的製作工作,社群版用於其他所有人。
Manim 是如何誕生的?為什麼有兩個版本?
Manim 的起源故事在開源領域中並不常見。Grant Sanderson 完全為自己使用而建立了第一個版本的 Manim,同時製作 3Blue1Brown 影片。它從來就不是一個通用的動畫函式庫——它只是一個碰巧被開源化的個人工具。API 僅由 Sanderson 自己的使用模式來記錄,並且不保證穩定性或向後相容性。
隨著 YouTube 頻道人氣的增長,對該工具的興趣也隨之增加。開發者開始貢獻補丁和功能,但程式碼庫並非為協作維護而設計。2020 年,社群成立了 ManimCommunity 組織,以建立一個分支的、由社群維護的版本,可以獨立於 Sanderson 的製作需求而發展。該分支進行了完整的文件重寫、適當的渲染器架構和語義版本控制方案。
graph TB
A[Grant Sanderson 建立 Manim<br>用於 3Blue1Brown 影片] --> B[2019:首次開源釋出]
B --> C[原始分支:3b1b/manim]
B --> D[2020:ManimCommunity 分支]
D --> E[MCE:ManimCommunity/manim]
C --> F[Sanderson 維護用於<br>3Blue1Brown 製作]
E --> G[社群功能:<br>文件、測試、外掛]
E --> H[穩定釋出:<br>v0.18, v0.19+]
F --> I[針對特定影片需求<br>的自訂補丁]| 面向 | 3b1b/manim (原始) | ManimCommunity/manim |
|---|---|---|
| 維護者 | Grant Sanderson | 社群維護者 |
| 發佈週期 | 不定期,以製作為導向 | 定期語義版本 |
| 文件 | 極簡(原始碼即文件) | 全面的指南和 API 文件 |
| 穩定性 | 可能出現破壞性變更 | 穩定,附棄用警告 |
| 安裝命令 | pip install manim (原始) | pip install manim (社群) |
| 最適合 | 遵循 Sanderson 的確切工作流程 | 一般用途、教學、學習 |
你可以用 Manim 建立什麼?
Manim 擅長於特定類別的動畫:精確、程式化的數學物件運動。它的原始物件——稱為「Mobjects」——包含從基本幾何形狀到 LaTeX 渲染的方程式、座標系統、函數圖形、數線和 3D 曲面的一切。
動畫是透過隨時間變換 Mobjects 來定義的:移動圓形、變形圖形、轉換方程式或在兩個形狀之間進行插值。Manim 的渲染器會自動處理中間幀,產生具有可自訂緩動函數的流暢運動。
| 功能類別 | 範例 | 實作 |
|---|---|---|
| 幾何物件 | 圓形、方形、多邊形、弧 | Circle(), Square(), Polygon() |
| 數學符號 | LaTeX 公式、變數文字 | Tex(), MathTex(), Text() |
| 圖形和座標軸 | 座標系統、函數繪圖 | Axes(), Graph(), NumberPlane() |
| 3D 場景 | 旋轉物件、3D 曲面 | ThreeDScene(), Surface() |
| 攝影機效果 | 縮放、平移、跟隨物件 | self.camera.frame.move_to() |
| 動畫類型 | 淡入、變形、生長、繪製邊框 | FadeIn(), Transform(), Create() |
sequenceDiagram
participant Dev as 開發者 (Python)
participant Manim as Manim 引擎
participant FFmpeg as FFmpeg
participant Output as 影片檔案
Dev->>Manim: 定義含 construct() 的 Scene 類別
Dev->>Manim: 加入 mobjects 和動畫
Manim->>Manim: 渲染中間幀
Manim->>Manim: 逐幀應用變換
Manim->>FFmpeg: 傳送幀序列
FFmpeg->>Output: 編碼為 MP4
Output-->>Dev: 完整動畫檔案如何編寫 Manim 動畫?
Manim 動畫是純 Python 程式碼。每個動畫從建立一個繼承自 Scene 的類別並在 construct 方法中定義其內容開始:
from manim import *
class SquareToCircle(Scene):
def construct(self):
square = Square()
self.play(Create(square))
self.play(square.animate.move_to(RIGHT))
self.play(Transform(square, Circle()))
self.wait(1)
這個七行腳本建立了一個完整的動畫:一個方形出現、向右滑動、變形成一個圓形,然後暫停。使用 manim -pql scene.py SquareToCircle 執行,它會用單一終端機命令渲染成影片檔案。-pql 標誌表示「預覽品質,低」——適合快速迭代——而 -pqh 則產生用於發佈的高品質輸出。
執行 Manim 需要什麼硬體?
| 元件 | 最低 | 建議 |
|---|---|---|
| CPU | 雙核心處理器 | 四核心或更好 |
| RAM | 4 GB | 8 GB 或更多 |
| GPU | 內建顯示卡 | 專用 GPU(用於 OpenGL 渲染器) |
| Python | 3.8 | 3.11 或更新版本 |
| 儲存空間 | 函式庫 500 MB | 渲染專案需 5 GB+ |
Manim 預設使用 cairo 後端,完全在 CPU 上渲染。可選的 OpenGL 後端提供更快的渲染和即時預覽,但需要效能足夠的 GPU。社群版還支援用於替代渲染器的外掛系統。
關於 Manim 的常見問題
Manim 只適用於數學嗎?
雖然 Manim 的名稱和傳統來自數學,但其功能遠不止於純數學。教育工作者和內容創作者已將 Manim 用於:
- 物理動畫:視覺化場、力和粒子運動
- 電腦科學:展示演算法執行、資料結構操作
- 工程:說明電路圖、機械系統
- 資料視覺化:建立動態圖表、圖形和網路圖
- 音樂理論:動態樂譜、和弦進行和節奏模式
該函式庫能夠動畫化 LaTeX 渲染的文字和數學符號,使其對於任何 STEM 領域特別強大,但其物件導向的動畫模型足夠通用,適用於任何類型的說明性內容。
Manim 在教育與內容創作中的應用
自開源釋出以來,Manim 已在像 YouTube 這樣的平台上推動了教育內容創作的革命。「3Blue1Brown 風格」本身已成為一種可識別的類型,數千個教育頻道採用 Manim 來製作他們的影片。大學已將 Manim 整合到數學傳播的課程中,該函式庫已被用於 TED-Ed 動畫、會議簡報和互動式教科書。
ManimCommunity 版已顯著降低了入門門檻。文件包含一個名為「快速入門指南」的綜合教學系列、帶有可下載原始碼的範例畫廊,以及一個活躍的 Discord 社群,初學者可以在其中獲得動畫方面的幫助。
延伸閱讀
- ManimCommunity 儲存庫 — 社群版原始碼和安裝指南
- 3Blue1Brown YouTube 頻道 — Grant Sanderson 展示 Manim 完整功能的頻道
- 原始 Manim 儲存庫 (3b1b) — Grant Sanderson 的個人製作分支
- Manim 文件 — 官方社群版文件和教學
- Manim 範例畫廊 — 帶原始碼的範例動畫集合