Manim, un module Python pour faire des animations

animations python module manim

Manim, un module Python pour faire des animations

Manim est un module Python pour faire des animations “simplement”. Tout est relatif… Il m’a fallu quand-même quelques heures pour comprendre la logique du bousin. Mais au final, on peut faire des choses bien sympathiques… comme par exemple cette animation:

Manim Python: installation

Pour plus de détails, regardez la page https://docs.manim.community/en/stable/index.html.

En gros, il suffit d’aller en mode console de son OS et de taper:

pip install manim

Manim Python: un exemple

Le module Manim est orienté objet, ce qui est à mon avis une bonne chose pour comprendre facilement le fonctionnement.

Un code Manim Python

from manim import *

class SquareToCircle(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        square.flip(RIGHT)
        square.rotate(-3 * TAU / 8)
        circle.set_fill(PINK, opacity=0.5)

        self.play(Create(square))
        self.play(Transform(square, circle))
        self.play(FadeOut(square))

Sauvegardons ce fichier sous le nom “example.py”.

La compilation

Elle se passe en mode console OS (et non console Python, attention !).

Pour effectuer des tests successifs jusqu’à obtention de la vidéo que l’on veut, je vous conseille de créer une vidéo basse résolution :

manim -p -ql example.py SquareToCircle

L’option “-p” permet de lancer la vidéo tout de suite après sa création.

L’option “-ql” génère une vidéo basse résolution.

La syntaxe sera toujours :

manim <options> <fichier.py> <classe>

Attention: cette ligne de commande doit être lancée à partir du dossier dans lequel se trouve le fichier. Sinon, il faudra indiquer le chemin complet du fichier.

Selon le code contenu dans la classe, cette étape peut être plus ou moins longue.

Le résultat est alors la vidéo suivante:

Pour une vidéo de résolution optimale, oubliez le “-ql”.

La logique

Elle est relativement simple: on crée un objet (un texte normal, un objet \(\LaTeX\), un cercle, un point, un carré, un rectangle, …):

cercle = Circle(<options>)

Par défaut, il est au centre de la vidéo. On peut le placer où l’on veut avec la commande “shift”; par exemple:

cercle.shift(LEFT)

pour le placer à gauche, ou bien:

cercle.shift(3 * LEFT)

pour le décaler de 3 fois la longueur qui sépare le centre de son côté gauche.

Ensuite, on lui fait tout ce que l’on veut (il faut bien sûr avoir en tête toutes les méthodes possibles… et donc regarder bien attentivement la documentation).

Un deuxième exemple avec \(\LaTeX\)

class MovingFrameBox(Scene):
    def construct(self):
        text=MathTex(
            "\\frac{d}{dx}f(x)g(x)=","f(x)\\frac{d}{dx}g(x)","+",
            "g(x)\\frac{d}{dx}f(x)"
        )
        self.play(Write(text))
        framebox1 = SurroundingRectangle(text[1], buff = .1)
        framebox2 = SurroundingRectangle(text[3], buff = .1)
        self.play(
            Create(framebox1),
        )
        self.wait()
        self.play(
            ReplacementTransform(framebox1,framebox2),
        )
        self.wait()

Le code de la vidéo du début

Cette partie est réservée aux abonné.e.s de ce site.
Si vous êtes abonné·e·s, merci de vous identifier pour visualiser le contenu dans son intégralité.

Stéphane Pasquet
Stéphane Pasquet

Laissez votre message