今回は数式から美しいアニメーションを作成できる
Manimのご紹介です

解説動画はこちら






Manimとは

Manim(Mathematical Animation Engine)
数学や物理を視覚的に表現するための
Pythonのアニメーションエンジンです。

3Blue1Brownの制作者(Grant Sanderson)によって開発
数学の教育動画で幅広く使用されています。

Python コードで数式やグラフをアニメーションとして
動画化してくれるライブラリです。


Manim を利用するうえで必要なこと

関連ライブラリのインストール
   - FFmpeg と必須ライブラリ
   - LaTeX (MacTeX) 
   - Manim本体
Python の知識
TeX 記法の知識

この辺りが必要です。


関連ライブラリのインストール

Manimを動かすには以下の3つが必要です。

1.FFmpeg と必須ライブラリ
2.LaTeX (MacTeX) 
3.Manim本体

早速インストールしていきましょう。

こちらはMac用のインストールコマンドです。
(Windowsの人はMacを買うか、Macを買いましょう)

1.FFmpeg と必須ライブラリのインストール

Manimが動画を描画・出力するために必要なツールです。
brew install ffmpeg py3cairo pkg-config


2.LaTeX (MacTeX) のインストール

美しい数式を描画するためのLaTeX環境です。
brew install --cask mactex-no-gui


3.Manim のインストール
pip install manim


インストール後の確認
manim --version



基本的な使い方

ファイルを作成して実行する

Pythonファイルとして作成した後
そのファイルをターミナルで実行することで
動画を作成できます。

manim -pqh ファイル名 シーン名


 - -p: レンダリング後に動画を自動再生
 - -q: 品質 (l=低, h=高, k=4K)
 - ファイル名 : hello.py
 - シーン名 : Hello


動画ファイルの出力先は
media/videos/...
になる(デフォルト)

hello.py というファイルでサンプルを用意しました。
# hello.py
from manim import *

class Hello(Scene):
    def construct(self):
        text = Text("どうもこんばんわ、乙pyです")
        self.play(Write(text))
        self.wait()

実行方法は次のようになります。

サンプルの実行
manim -pqh hello.py Hello




基本文法

インポートとコンストラクタの定義

ライブラリをインポートして
コンストラクタを最初に定義します。
from manim import *

class MyAnimation(Scene):
    def construct(self):


コンストラクタを作ったら
描きたいものを定義していきます。

変数名 = オブジェクト名(引数など)

self.play(): 
アニメーションを実行

.animate: 
オブジェクトのプロパティ(位置や色)を滑らかに変化

ReplacementTransform: 
前の物体を消して、次の物体へモーフィング

オブジェクトを生成して動かすサンプルも用意しました。

サンプルコード

# basicflow.py
# manim -pqh basicflow.py BasicFlow
from manim import *

class BasicFlow(Scene):
    def construct(self):
        # 1. オブジェクトの生成
        title = Text("Manimの基本操作", font_size=40)
        square = Square(color=BLUE, fill_opacity=0.5)
        circle = Circle(color=RED, fill_opacity=0.5)

        # 2. 配置の設定
        title.to_edge(UP) # 画面上端へ

        # 3. アニメーションの実行
        self.play(Write(title))        # 文字を書く
        self.play(DrawBorderThenFill(square)) # 枠線から塗りつぶし
        self.wait(1)

        # 4. 移動と変形 (Transform)
        self.play(
            square.animate.shift(LEFT * 2), # 左に動かしながら
            run_time=1
        )
        # 四角を円に変形させる
        self.play(ReplacementTransform(square, circle))
        self.play(circle.animate.shift(RIGHT * 4))
        
        self.wait(2)

オブジェクトを定義して配置し
アニメーション内容を書いていくことで
様々なアニメーションを作ることができます。




いろんなサンプルを見てみよう

5つの動画サンプルを用意しました。

1.正規分布のパラメータ変化
2.三角関数
3.フーリエ変換
4.ロジスティック写像
5.勾配降下法


どんなアニメーションを作れるかは
動画の方で確認してみてください。



まとめ


数学や物理系の綺麗なアニメーションを作るのは
かなりしんどいと思います。

このライブラリであれば、かなり綺麗な
アニメーションを作ることが出来るので
その道の動画を作りたい方は
試してみるのも面白いと思います。

それでは。