Animation Manim — Vidéo mathématique et technique
Manim est un moteur d'animation Python pour des visuels explicatifs. Sa force réside dans l'exactitude : une formule, un graphique ou une construction peut être animé en tant qu'objet mathématiquement défini, plutôt qu'une approximation dans un outil de design.
Consultez references/MANIM-PLAYBOOK.md pour les modèles et le code. Vérifiez les indicateurs par rapport à la version installée : https://docs.manim.community/en/stable/
1. Quand choisir Manim
Choisissez Manim quand :
- Des équations, symboles ou preuves sont le sujet.
- Des systèmes de coordonnées, graphiques, vecteurs ou constructions géométriques doivent être exacts.
- Un algorithme, une structure de données ou un processus nécessite une explication visuelle étape par étape.
- Les étiquettes doivent être alignées sur un objet mathématique, et non sur une position de cadre placée manuellement.
- Le style doit être sobre et schématique, non cinématographique.
N'utilisez pas Manim pour : des animations 3D cinématographiques, des vidéos promotionnelles axées sur une marque, des typographies animées ou des livrables interactifs. Ceux-ci relèvent de Blender, Remotion ou de graphiques web.
2. Installation (isolée, reproductible)
uv --version # installez d'abord uv s'il manque
uv init --python 3.12 manim-project
cd manim-project
uv add manim
uv run manim --version
Linux nécessite souvent des bibliothèques natives :
sudo apt update
sudo apt install build-essential python3-dev pkg-config libcairo2-dev libpango1.0-dev ffmpeg
sudo apt install texlive texlive-latex-extra texlive-fonts-recommended # pour MathTex/Tex
macOS : brew install cairo pango pkg-config ffmpeg et une distribution TeX comme MacTeX si MathTex est utilisé.
Windows : installez FFmpeg et MiKTeX/TeX Live ; les outils de build C++ de Microsoft peuvent être nécessaires pour les wheels Cairo/Pango.
Vérifiez :
uv run manim --version
uv run python -c "import manim; print(manim.__version__)"
N'installez pas Manim dans le Python système si un environnement de projet est disponible. Enregistrez la version dans le README du projet.
3. Commandes de rendu
# aperçu basse qualité (rapide)
uv run manim -pql scenes/explain.py ExplainScene
# moyen
uv run manim -qm scenes/explain.py ExplainScene
# haute / production
uv run manim -qh scenes/explain.py ExplainScene
# 4K
uv run manim -qk scenes/explain.py ExplainScene
# fond transparent
uv run manim -qh -t scenes/explain.py ExplainScene
# section spécifique
uv run manim -qh scenes/explain.py ExplainScene -n 12,20
Préréglages de qualité : -ql 480p15, -qm 720p30, -qh 1080p60, -qk 2160p60. Confirmez dans la version installée. La sortie se trouve dans media/videos/<fichier>/<qualité>/.
ffprobe -v error -show_entries stream=width,height,r_frame_rate,duration \
-of json media/videos/explain/1080p60/ExplainScene.mp4
4. Règles de conception des scènes
- Une idée par scène. Divisez en sous-classes de
Scene; composez une vidéo plus longue par concaténation, pas avec une seule scène géante. - Définissez la palette et les polices une fois dans un module (
theme.py) et importez-les, plutôt que de répéter des valeurs hexadécimales. - Contraignez la caméra. La
MovingCameraScenede Manim est puissante et facile à abuser ; zoomez uniquement pour révéler une structure que le spectateur ne pourrait pas voir autrement. - Respectez la durée. Une dérivation de formule qui se lit bien en 3 minutes semblera précipitée en 40 secondes. Calculez le temps de fixation à partir de la vitesse de lecture, pas de l'intuition.
- Gardez les étiquettes attachées à l'objet qu'elles décrivent (
Tex+next_to), afin qu'un changement de disposition ultérieur ne brise pas silencieusement l'alignement. - Utilisez
Transform/ReplacementTransformpour le sens,FadeIn/FadeOutpour la présence. Morphing de formes non liées perturbe les spectateurs. - N'animez pas chaque élément indépendamment. Regroupez avec
VGroupet échelonnez intentionnellement.
5. Recette de composition
from manim import *
class ExplainScene(Scene):
def construct(self):
title = Text("Pourquoi la dérivée est une limite", font="Inter").scale(0.7)
self.play(Write(title), run_time=1.2)
self.wait(0.6)
self.play(title.animate.to_edge(UP).scale(0.8), run_time=0.9)
formula = MathTex(r"f'(x) = \lim_{h \to 0} \frac{f(x+h)-f(x)}{h}")
formula.scale(1.2)
self.play(Write(formula), run_time=1.6)
self.wait(1.2)
self.play(formula.animate.set_color_by_tex(r"h \to 0", YELLOW), run_time=0.8)
self.wait(1.5)
6. Exportation et transfert
-qhproduit du 1080p60 à haut débit ; ré-encodez pour la livraison plutôt que d'expédier l'intermédiaire.- Transparence :
-técrit un.movavec alpha (ou une séquence PNG avec--format=png). Vérifiez l'alpha sur un damier avant de composer. - Pour combiner Manim avec Remotion/Blender : faites correspondre les FPS et la résolution, puis assemblez dans FFmpeg ou Remotion. Manim utilise par défaut 60 FPS en
-qh; changezconfig.frame_rateou convertissez délibérément. - Pour les intros/outros de marque et les sous-titres, rendez les scènes Manim propres et composez-les dans Remotion — ne luttez pas contre le système de typographie de Manim pour la mise en page de la marque.
7. Validation
- Regardez le rendu basse qualité avant le rendu haute qualité ; les erreurs mathématiques sont visibles en 480p.
- Vérifiez qu'aucune formule n'est coupée au bord du cadre et qu'aucune étiquette n'en chevauche une autre.
- Vérifiez que LaTeX a compilé sans replis silencieux (cherchez des avertissements de texte rouge dans la console).
- Confirmez la durée finale et la fréquence d'images avec
ffprobe. - Lisez chaque symbole à voix haute par rapport au calcul visé ; un signe inversé est un bogue de correction, pas un choix de style.
8. Échecs courants
| Symptôme | Cause | Correction |
|---|---|---|
latex: command not found | Pas de distribution TeX | Installez TeX Live/MiKTeX, ou utilisez Text au lieu de MathTex |
| Erreur de build Cairo/Pango | Bibliothèques natives manquantes | Installez les paquets de développement listés ci-dessus |
| Une formule s'affiche comme un texte d'erreur rouge | Syntaxe LaTeX ou paquet manquant | Vérifiez la console ; ajoutez les paquets TexTemplate |
| Tout semble flou | Préréglage basse qualité | Rendez en -qh/-qk pour le résultat final |
| Texte grec/arabe cassé | La police manque de glyphes ou de façonnage | Utilisez une police avec capacité de façonnage, testez une image fixe, ou pixellisez le texte |
| Rendu très lent | 60 FPS + 4K + chemins complexes | Prévisualisez en -ql, simplifiez les chemins, divisez les scènes |
| Transparence perdue | Mauvais format | Utilisez -t et un conteneur compatible alpha ; vérifiez |
9. Références officielles
- Documentation : https://docs.manim.community/en/stable/
- Installation : https://docs.manim.community/en/stable/installation.html
- Tutoriels : https://docs.manim.community/en/stable/tutorials.html
- Galerie d'exemples : https://docs.manim.community/en/stable/examples.html
- Code source : https://github.com/ManimCommunity/manim