1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【個人開発】AI Agentに「映画監督」を任せたら、寝ている間に動画が完成していた話 (Python × Textideo API)

Posted at

まえがき:静止画の「沼」から抜け出したい

1.6.1.png

昨日のQiitaトレンド、見ましたか?
「ClaudeCodeで漫画を自動生成する」記事。あれ、めちゃくちゃ面白かったですよね。私も早速手元の環境で試して、無限に4コマ漫画を作って遊んでいました。

でも、エンジニアの性(さが)でしょうか。30分後にはこう思ってしまったんです。
「これ、動かないかな?」

2026年現在、画像生成はコモディティ化しましたが、**「ストーリー性のある動画の完全自動生成」**はまだ未開の地(ブルーオーシャン)です。

そこで昨晩、「LLMが脚本を書き、AI Video Generator が撮影する」完全自動パイプラインを組んでみました。
結論から言うと、Textideo
のAPIを噛ませることで、驚くほど簡単に実装できてしまいました。

本記事は、その「技術的アプローチ」と「ハマりポイント」の共有です。


🏗 アーキテクチャ:"VideoOps" を構築する

やりたいことはシンプルです。「テキストを投げたら、編集済みのMP4が返ってくる」黒魔術的なAPIを作ること。

構成は以下の通りです。

graph TD
    A[User Idea] -->|Prompt| B(Director Agent / Claude 3.5)
    B -->|Script JSON| C{Scene Manager}
    C -->|Visual Prompt| D[Textideo API (Renderer)]
    D -->|MP4 Fragments| E[FFmpeg (Editor)]
    E -->|Final Movie| F[Output]
  1. 脳(Brain): Claude 3.5 Sonnet (指示出しが一番的確なので)
  2. 目(Renderer): Textideo API (ここが重要。後述)
  3. 手(Editor): FFmpeg + Python

ユーザーがアイデア(Prompt)を投げると、Agentが脚本と絵コンテをJSONで作成。それをレンダリングエンジンが映像化し、最後に結合して出力します。


🔧 実装のハイライト

1. 監督Agentに「カメラワーク」を理解させる

LLMにただ「動画のプロンプト書いて」と言うと、「A cat is sitting」みたいな退屈な指示しか出しません。
映画的な映像を作るには、カメラワーク(Camera Movement) の指定が不可欠です。

システムプロンプトで、特定のJSON構造を強制します。

# director.py

class Scene(BaseModel):
    narrative: str
    visual_prompt: str = Field(..., description="Image generation prompt in English")
    # ここがキモ。AI Video Generatorが理解できる物理カメラ指示を定義
    camera_action: Literal["zoom_in", "pan_right", "static", "dolly_zoom"] 
    duration: int = Field(..., default=4)

こうすることで、Agentは「ここは悲しいシーンだから static で」「ここはオープニングだから pan_right で」といった演出意図をコードとして出力してくれるようになります。

2. レンダリングエンジンの選定(なぜ Textideo なのか?)

ここが今回一番悩んだポイントです。
動画生成AIは群雄割拠ですが、APIとして組み込む場合、以下の条件を満たす必要がありました。

  1. Instruction Following: 指定したプロンプト(特にライティングと構図)を無視しないこと。
  2. Consistency: キャラクターがシーンごとに別人にならないこと。
  3. Response Time: 同期処理で待てるレベルの速度。

いくつかの主要サービスをAPI経由で叩き比べた結果、今回は Textideo を採用しました。
決め手は 「Camera Control のAPIパラメータの追従性」 です。

多くのモデルは zoom_in と指定しても無視して勝手に動いたりしますが、Textideoのモデル(特に最新のVeo系)は、コードで指定したカメラワークを物理エンジンのように忠実に再現してくれました。

実装はこんな感じです。

# renderer.py
import requests

def render_scene(scene_data, api_key):
    """
    Textideo APIを叩いて、シーンごとの動画を生成する
    """
    url = "https://api.textideo.com/v1/generate"
    
    payload = {
        "prompt": scene_data['visual_prompt'] + ", cinematic lighting, 8k, photorealistic",
        "video_settings": {
            "aspect_ratio": "16:9",
            # Agentが決めたカメラワークをそのままパラメータに流し込む
            "camera_motion": scene_data['camera_action'], 
            "fps": 24
        }
    }
    
    # 正直、ここでエラーハンドリングをサボると死にます(戒め)
    try:
        response = requests.post(url, json=payload, headers={"Authorization": api_key})
        response.raise_for_status()
        return response.json()['download_url']
    except Exception as e:
        print(f"Rendering failed: {e}")
        return None

このコードを書いているとき、「あ、俺いま映画撮ってるわ」という謎の全能感に浸れます。


🚧 実際に踏んだ「地雷」と解決策

もちろん、一発ではうまくいきませんでした。

課題:シーン間のキャラ崩壊(Identity Loss)

Scene 1では金髪だった主人公が、Scene 2で急に黒髪になったりします。動画生成AIあるあるですね。

解決策:Seed Image Injection

Textideoの機能にある image_to_video を併用するアプローチに変えました。

  1. 最初に1枚だけ、主人公の「決定稿」となる画像を生成する。
  2. その画像をBase64化し、全シーンのAPIリクエストに reference_image として渡す。

(ここに Consistency 制御のコードを挿入)

これを実装した瞬間、動画のクオリティが「実験」から「作品」に変わりました。
一人のキャラクターが一貫して物語の中を歩き回る様子は、感動すら覚えます。


1.6.2.png

🎁 成果物

スクリプトを実行して、コーヒーを淹れて戻ってきたら、指定したフォルダに final_movie.mp4 が生成されていました。

内容は「サイバーパンクな東京の夜明け」。
Agentが勝手に指定した pan_right のカメラワークで、ネオン街から朝焼けへと視点が移動していく映像美。
これを自分が一切手を動かさずに、Pythonスクリプトだけで作ったというのが信じられません。

(※ 生成された動画はX(旧Twitter)に貼っておきます)


🔮 まとめ:エンジニアは次の「クリエイター」になる

今回、AI Video Generator をAPIとしてワークフローに組み込んでみて感じたのは、**「動画制作はもはやプログラミングの対象である」**ということです。

絵心がなくても、カメラを持っていなくても、ロジックとAPIがあれば世界観を作れる。
特に Textideo のような、開発者フレンドリーなAPIを持つツールの登場で、この流れは2026年、さらに加速するでしょう。

皆さんもぜひ、手元の積み本(積読)をAgentに読ませて、その要約を「動画」として出力するパイプラインとか作ってみてください。絶対面白いので。

参考リンク


(LGTM👍 いただけると、次の「音声生成編」を書くモチベーションになります!)

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?