Communitygithub.com

Manim動画制作パイプライン

Manim Community Editionを使用した数理・技術アニメーションの制作パイプライン。3Blue1Brownスタイルの解説動画、アルゴリズム可視化、数式導出、アーキテクチャ図、データストーリーを作成します。

Manim動画制作パイプライン とは?

このスキルは、Manim Community Editionを用いて高品質な数理・技術アニメーション動画を制作するための統合パイプラインです。3Blue1Brownスタイルの解説動画、アルゴリズムの可視化、方程式の段階的導出、システムアーキテクチャ図、データストーリーなど、教育的な映像コンテンツをプログラムで生成します。 パイプラインは「計画→コード→レンダリング→結合→音声(オプション)→レビュー」の6段階で構成され、単一のPythonスクリプトで全シーンを管理します。ビデオ品質はドラフト(854x480/15fps)からプロダクション(1920x1080/60fps)まで選択可能で、反復作業は低品質で行い、最終出力のみ高品質でレンダリングします。 このスキルが特に強みを発揮するのは、幾何学的・数学的な内容を視覚的に直感的に伝えることです。「幾何学を代数に先立たせる」「不透明度レイヤリングで注意を誘導する」「各アニメーション後に適切な待機時間を設ける」といった教育的映像制作の原則が組み込まれており、単なる技術的実行ではなく、学習効果の高い映像体験を設計します。 対応モードは「概念解説」「数式導出」「アルゴリズム可視化」「データストーリー」「アーキテクチャ図」「論文解説」「3D可視化」の7種類で、各モード専用のリファレンス文書が用意されています。クリエイティブな出力が求められた場合には、SCAMPERや前提反転といった発想法を使って標準的な説明に新鮮な視点を加えることも可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/HemVaria/Ai-powered-video-editor/tree/HEAD/engine/skills/manim-video

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Manim動画制作パイプライン は何をしますか?

クリエイティブ基準

これは教育的な映画です。すべてのフレームが教え、すべてのアニメーションが構造を明らかにします。

コードを1行も書く前に、物語の流れを明確にしてください。この動画はどのような誤解を正すのか?「ahaモーメント」はどこか?視聴者を混乱から理解へ導く視覚的なストーリーは何か?ユーザーのプロンプトは出発点であり、それを教育的な野心を持って解釈してください。

代数よりも幾何を先に。 方程式の前に図形を示しなさい。視覚的記憶は記号的記憶よりも速くエンコードされます。視聴者が数式の前に幾何学的パターンを見るとき、その方程式は「獲得された」感覚を与えます。

初回レンダリングでの完成度は譲れません。 修正ラウンドなしで、出力は視覚的に明確で美的に一貫している必要があります。ごちゃごちゃしていたり、タイミングが悪かったり、「AIが生成したスライド」のように見えるものは誤りです。

不透明度レイヤリングで注意を誘導します。 すべての要素を最大輝度で表示してはいけません。主要要素は1.0、コンテキスト要素は0.4、構造要素(軸、グリッド)は0.15に設定します。脳は視覚的な顕著性をレイヤーで処理します。

余白(ブレス)を取る。 すべてのアニメーションの後には self.wait() が必要です。視聴者は表示された内容を吸収する時間が必要です。決して次のアニメーションへ急いではいけません。重要な表示後の2秒のポーズは決して無駄になりません。

一貫した視覚言語。 すべてのシーンでカラーパレット、一貫したフォントサイズ、一致するアニメーション速度を共有します。技術的に正しくても、各シーンでランダムに異なる色を使った動画は美的に失敗です。

前提条件

scripts/setup.sh を実行してすべての依存関係を確認します。必要なもの: Python 3.10以上、Manim Community Edition v0.20以上(pip install manim)、LaTeX(Linuxでは texlive-full、macOSでは mactex)、ffmpeg。リファレンスドキュメントはManim CE v0.20.1でテスト済みです。

モード

モード入力出力リファレンス
概念解説トピック/概念幾何学的直観によるアニメーション解説references/scene-planning.md
数式導出数式段階的アニメーション証明references/equations.md
アルゴリズム可視化アルゴリズムの説明データ構造を用いた段階的実行references/graphs-and-data.md
データストーリーデータ/指標アニメーション化されたグラフ、比較、カウンターreferences/graphs-and-data.md
アーキテクチャ図システム説明接続とともに構築されるコンポーネントreferences/mobjects.md
論文解説研究論文主要な発見と方法をアニメーション化references/scene-planning.md
3D可視化3D概念回転する曲面、パラメトリック曲線、空間幾何references/camera-and-3d.md

スタック

プロジェクトごとに単一のPythonスクリプト。ブラウザ、Node.js、GPUは不要です。

レイヤーツール目的
コアManim Community Editionシーンレンダリング、アニメーションエンジン
数式LaTeX(texlive/MiKTeX)MathTex による数式レンダリング
ビデオI/Offmpegシーン結合、フォーマット変換、音声多重化
TTSElevenLabs / Qwen3-TTS(オプション)ナレーションボイスオーバー

パイプライン

計画 --> コード --> レンダリング --> 結合 --> 音声(オプション) --> レビュー
  1. 計画 — plan.md に物語の流れ、シーンリスト、ビジュアル要素、カラーパレット、ナレーション台本を記述
  2. コード — script.py にシーンごとに1つのクラスを作成し、それぞれ独立してレンダリング可能にする
  3. レンダリング — ドラフトは manim -ql script.py Scene1 Scene2 ...、プロダクションは -qh
  4. 結合 — ffmpegでシーンクリップを結合して final.mp4 を生成
  5. 音声(オプション) — ffmpegでボイスオーバーやBGMを追加。詳細は references/rendering.md
  6. レビュー — プレビュー静止画をレンダリングし、計画と照らし合わせて調整

プロジェクト構造

project-name/
  plan.md                # 物語の流れ、シーン内訳
  script.py              # すべてのシーンを1ファイルに
  concat.txt             # ffmpegシーンリスト
  final.mp4              # 結合済み出力
  media/                 # Manimが自動生成
    videos/script/480p15/

クリエイティブディレクション

カラーパレット

パレット背景メインセカンダリアクセント使用例
クラシック3B1B#1C1C1C#58C4DD(青)#83C167(緑)#FFFF00(黄)一般数学/CS
温かみのある学術#2D2B55#FF6B6B#FFD93D#6BCB77親しみやすい解説
ネオンテック#0A0A0A#00F5FF#FF00FF#39FF14システム、アーキテクチャ
モノクローム#1A1A2E#EAEAEA#888888#FFFFFFミニマリスト

アニメーション速度

コンテキストrun_time後の self.wait()
タイトル/イントロ出現1.5秒1.0秒
主要数式表示2.0秒2.0秒
変形/モーフィング1.5秒1.5秒
補助ラベル0.8秒0.5秒
FadeOutクリーンアップ0.5秒0.3秒
「ahaモーメント」表示2.5秒3.0秒

タイポグラフィスケール

役割フォントサイズ使用法
タイトル48シーンタイトル、冒頭テキスト
見出し36シーン内のセクションヘッダー
本文30説明テキスト
ラベル24注釈、軸ラベル
キャプション20字幕、細かい文字

フォント

すべてのテキストに等幅フォントを使用します。 ManimのPangoレンダラーは、プロポーショナルフォントでどのサイズでもカーニングが壊れます。詳細は references/visual-design.md を参照してください。

MONO = "Menlo"  # ファイルの先頭で一度定義

Text("Fourier Series", font_size=48, font=MONO, weight=BOLD)  # タイトル
Text("n=1: sin(x)", font_size=20, font=MONO)                  # ラベル
MathTex(r"\nabla L")                                            # 数式(LaTeXを使用)

読みやすさのため、最小 font_size=18。

シーンごとのバリエーション

すべてのシーンで同一の設定を使用してはいけません。各シーンで:

  • パレットから異なる主要色を使用
  • 異なるレイアウト — 常に中央に配置しない
  • 異なるアニメーション開始方法 — Write、FadeIn、GrowFromCenter、Create を変化させる
  • 異なる視覚的重み — 密度の高いシーンと疎なシーンを混ぜる

ワークフロー

ステップ1: 計画 (plan.md)

コードの前に、plan.md を書きます。詳細なテンプレートは references/scene-planning.md を参照してください。

ステップ2: コード (script.py)

シーンごとに1つのクラス。すべてのシーンは独立してレンダリング可能です。

from manim import *

BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"

class Scene1_Introduction(Scene):
    def construct(self):
        self.camera.background_color = BG
        title = Text("Why Does This Work?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("Why does this work?", duration=2)
        self.play(Write(title), run_time=1.5)
        self.wait(1.0)
        self.play(FadeOut(title), run_time=0.5)

主要パターン:

  • すべてのアニメーションに字幕を付ける: self.add_subcaption("text", duration=N) または self.play() の subcaption="text"
  • シーン間の一貫性のためにファイル先頭に共有色定数
  • すべてのシーンで self.camera.background_color を設定
  • クリーンな終了 — シーン終了時にすべてのモブジェクトをFadeOut: self.play(FadeOut(Group(*self.mobjects)))

ステップ3: レンダリング

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # ドラフト
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # プロダクション

ステップ4: 結合

cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4

ステップ5: レビュー

manim -ql --format=png -s script.py Scene2_CoreConcept  # プレビュー静止画

重要な実装ノート

LaTeXのためのRaw文字列

# 誤り: MathTex("\frac{1}{2}")
# 正しい:
MathTex(r"\frac{1}{2}")

エッジテキストの buff >= 0.5

label.to_edge(DOWN, buff=0.5)  # 決して < 0.5 にしない

テキスト置換前のFadeOut

self.play(ReplacementTransform(note1, note2))  # 上にWrite(note2)しない

未追加のモブジェクトをアニメーションしない

self.play(Create(circle))  # 最初に追加する必要がある
self.play(circle.animate.set_color(RED))  # その後アニメーション

パフォーマンス目標

品質解像度FPS速度
-ql(ドラフト)854x480155-15秒/シーン
-qm(ミディアム)1280x7203015-60秒/シーン
-qh(プロダクション)1920x10806030-120秒/シーン

常に -ql で反復作業を行い、最終出力のみ -qh でレンダリングします。

リファレンス

ファイル内容
references/animations.mdコアアニメーション、レート関数、合成、.animate 構文、タイミングパターン
references/mobjects.mdテキスト、図形、VGroup/Group、配置、スタイリング、カスタムモブジェクト
references/visual-design.md12のデザイン原則、不透明度レイヤリング、レイアウトテンプレート、カラーパレット
references/equations.mdManimでのLaTeX、TransformMatchingTex、導出パターン
references/graphs-and-data.mdAxes、プロット、BarChart、アニメーションデータ、アルゴリズム可視化
references/camera-and-3d.mdMovingCameraScene、ThreeDScene、3Dサーフェス、カメラ制御
references/scene-planning.md物語の流れ、レイアウトテンプレート、シーン遷移、計画テンプレート
references/rendering.mdCLIリファレンス、品質プリセット、ffmpeg、ボイスオーバーワークフロー、GIFエクスポート
references/troubleshooting.mdLaTeXエラー、アニメーションエラー、よくある間違い、デバッグ
references/animation-design-thinking.mdいつアニメーションを使うか vs 静的表示、分解、ペーシング、ナレーション同期
references/updaters-and-trackers.mdValueTracker、add_updater、always_redraw、時間ベースのアップデータ、パターン
references/paper-explainer.md研究論文をアニメーションに変換する — ワークフロー、テンプレート、ドメインパターン
references/decorations.mdSurroundingRectangle、Brace、矢印、DashedLine、Angle、注釈ライフサイクル
references/production-quality.mdコード前、レンダリング前、レンダリング後のチェックリスト、空間レイアウト、色、テンポ

クリエイティブ・ダイバージェンス(ユーザーが実験的/クリエイティブ/ユニークな出力を求めた場合のみ使用)

ユーザーがクリエイティブな、実験的な、または型にはまらない説明アプローチを求めた場合は、戦略を選択し、アニメーションをデザインする前にその理由を検討してください。

  • SCAMPER — 標準的な説明に新鮮な視点が欲しい場合
  • 前提反転 — 何かが通常どのように教えられているかに挑戦したい場合

SCAMPER変換

標準的な数学的/技術的可視化を取り上げ、変換します:

  • 代替(Substitute): 標準的な視覚的メタファーを置き換える(数直線 → 曲がりくねった道、行列 → 都市グリッド)
  • 結合(Combine): 2つの説明アプローチを融合する(代数的 + 幾何的を同時に)
  • 逆転(Reverse): 結果から逆に導出し、公理まで分解する
  • 修正(Modify): パラメータを誇張してその重要性を示す(学習率10倍、サンプルサイズ1000倍)
  • 除去(Eliminate): すべての表記を排除し、アニメーションと空間的関係のみで説明する

前提反転

  1. このトピックがどのように可視化されるかについて「標準的」なことをリストアップする(左から右、2D、離散ステップ、形式的表記)
  2. 最も基本的な前提を選ぶ
  3. それを反転する(右から左への導出、2D概念の3D埋め込み、ステップではなく連続モーフィング、表記ゼロ)
  4. その反転が標準的アプローチでは隠されていた何を明らかにするかを探求する

関連スキル