Communitygithub.com

Manim 動画制作パイプライン

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

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

このスキルは、Manim Community Edition (Python) を使って教育用アニメーションビデオを制作するための本格的なパイプラインです。3Blue1Brown スタイルの数理解説、アルゴリズムのステップバイステップ可視化、方程式の導出、システムアーキテクチャ図、データストーリーなど、あらゆる「動く解説」をコードベースで生成します。 主な特徴は、フルプログラム制御による高品質な出力と、教育的なストーリーテリングに重点を置いた設計です。各シーンは独立してレンダリング可能で、レンダリングには Manim の `-ql` (ドラフト) と `-qh` (プロダクション) を使い分け、ffmpeg で結合します。カラーパレット、アニメーション速度、タイポグラフィ、レイアウトの一貫性を重視し、最初のレンダリングから視覚的に洗練された結果を目指します。 対応プラットフォームは Manim CE (Python 3.10+, LaTeX, ffmpeg 必須)。ブラウザや Node.js、GPU は不要で、単一の Python スクリプトで完結します。オプションで ElevenLabs や Qwen3-TTS によるナレーションも追加可能です。 このスキルは、単なるアニメーション生成ツールではなく、「教育的映像制作」のためのクリエイティブスタンダードを備えています。ジオメトリ → 数式の順で見せる、不透明度で視線を誘導する、各アニメーション後に `self.wait()` で呼吸を与える、など人間の認知に基づいた設計ルールと、SCAMPER や前提逆転といった創造的分岐手法もサポートしており、標準的な説明から実験的なビジュアルストーリーまで幅広く対応します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Syammon02/VideoUse/tree/HEAD/skills/manim-video

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

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

ドキュメント

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

クリエイティブスタンダード

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

コードを一行も書く前に、ナラティブアークを明確にしましょう。これはどのような誤解を正すものか?「なるほど!」の瞬間はどこか?視聴者を混乱から理解へと導く視覚的なストーリーは何か?ユーザーのプロンプトは出発点です — それを教育的な野心で解釈しましょう。

幾何学は代数学に先立つ。 形を先に見せ、方程式は後から。視覚記憶は記号記憶よりも速くエンコードされます。視聴者が数式の前に幾何学的パターンを見れば、その方程式は「納得」されます。

初回レンダリングでの完成度は譲れません。 出力は修正ラウンドなしで視覚的に明瞭かつ美的に一貫している必要があります。ごちゃごちゃしていたり、タイミングが悪かったり、「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.5s1.0s
主要数式リビール2.0s2.0s
変形/モーフ1.5s1.5s
補助ラベル0.8s0.5s
FadeOut クリーンアップ0.5s0.3s
「なるほど」の瞬間のリビール2.5s3.0s

タイポグラフィスケール

役割フォントサイズ使用法
タイトル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 を設定
  • クリーンな終了 — シーン終了時にすべての mobject を 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) しない

未追加の Mobject をアニメーションしない

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、配置、スタイリング、カスタム mobject
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. その逆転が、標準的なアプローチでは隠れていた何を明らかにするかを探る

関連スキル