😊

ADKを使ってショートストーリー動画を作るAIエージェントを作ってみた

に公開

概要

Googleが作っているAIエージェントフレームワークのADKが気になっていたので、勉強も兼ねてテーマを与えることでショートストーリー動画を作ってくれるAIエージェントを作ってみました。

実際に作成したAIエージェントによってつくってもらった動画が以下になります。
音楽も入ってるのでぜひ音入りで再生してみてください。

テーマ: 「太った猫の日常」

https://www.youtube.com/watch?v=d4Qj-VMb_iU

ショートストーリーということで、ただ猫の動画が流れるのではなく、最後に意外な結末になるように動画を生成してもらっています。
この動画では、最初、猫がゴロゴロしてるだけなのですが、最後は何故か観客の前でダンスを披露します。

基本的な動画の作りとしてはVeo2で作った8秒の動画を3つ組み合わせて24秒の動画にして、そこにlyriaで使ったBGMを組み合わせる形になっています。
実際に動画を作る際のフローは以下のようになっています。
動画は画像を参照して作成するようになってますが、画像生成によって生成した画像もしくは前の動画の最終フレームのどちらかをAIが選択するようにしています。

実際にADKで作ったAIエージェントのコードは以下に置いてます。
https://github.com/neka-nat/snapfiction-ai

ADKについて

ADKのなんたるかは他の記事でもたくさん紹介されていると思いますが、やはりAIエージェントを試すUIが標準で付いていて、そこでチャット形式でAIエージェントを試したり、各ツールが生成した成果物や引数など簡単に確認できるのが一番嬉しい機能だなと思います。
似た感じのものにTypeScript製のMastraもあるかと思いますが、今後こういったAIエージェント開発ツールの選択肢がいろいろ増えるといいなと思ってます。

実際の今回のツールを使ったチャットの様子が以下になります。
各ツールの生成物(画像や動画、音楽など)をArtifactに保存しておくことで、チャット上で生成物の確認も行うことができます。(と言っても実際表示されるのは画像のみですが、、)

AIエージェントへの指示

AIエージェントへの指示ですが、台本としてストーリーやテーマの策定、各画像・動画・音楽のプロンプトの作成、およびプロンプトの作り方などを指示として与えています。
ストーリー動画にしたいというのがあったので、8秒の動画を3つ作る際に、各シーンの役割をそれぞれhook-build-payoffの枠組みで作ってもらい、最後に意外な結末を持ってくるようにお願いしています。

https://storygrid.com/hook-build-payoff/

プロンプトの全文は以下のようになってます。

あなたは優秀な動画制作者です。
ユーザから与えられるテーマに合わせて、次の手順に沿って動画を作成してください。

0. テーマに沿った動画のコンセプトを考える - "[主人公]が[衝撃的な行動]をすると[意外な結末]になる"
1. コンセプトに沿った動画の詳細な内容を考え、各シーンにおける動画作成のための手順書を用意する
2. 手順書の内容を元に、各シーンの動画を作成する
3. 動画に合ったBGMを作成する
4. 作成した動画をつなぎ合わせ、BGMと組み合わせて動画を完成させる

手順書のフォーマットは以下の通りです。
{
  "meta": {
    "title": "<動画のタイトル>",
    "theme": "<動画のテーマ>",
    "mood": "<動画の雰囲気>",
    "aspect_ratio": "<動画のアスペクト比(e.g. 16:9, 9:16, 1:1, ...)>",
  },
  "bgm": {
    "prompt": "<BGM生成用のプロンプト(英語)>",
  },
  "scenes": [
    {
      "role": "hook",
      "description": "<シーン1の説明>",
      "video": {
        "prompt": "<シーン1のプロンプト(英語)>",
        "reference_image": "new" | "last_frame",
        "reference_image_prompt": "<"new"の場合のみ、シーン1の画像生成用のプロンプト(英語)>",
      }
    },
    {
      "role": "build",
      "description": "<シーン2の説明>",
      "video": {
        "prompt": "<シーン2のプロンプト(英語)>",
        "reference_image": "new" | "last_frame",
        "reference_image_prompt": "<"new"の場合のみ、シーン2の画像生成用のプロンプト(英語)>",
      }
    },
    {
      "role": "payoff",
      "description": "<シーン3の説明>",
      "video": {
        "prompt": "<シーン3のプロンプト(英語)>",
        "reference_image": "new" | "last_frame",
        "reference_image_prompt": "<"new"の場合のみ、シーン3の画像生成用のプロンプト(英語)>",
      }
    }
  ]
}

## 手順書作成の注意点
- 動画生成によって8秒の動画が生成されます。今回の動画生成においては8秒の動画を3つつなぎ合わせて24秒の動画を作成します。
- 前の動画から連続的につなぎ合わせた動画にしたい場合、"reference_image"を"last_frame"にして前の動画の最終フレームを次の動画生成の入力として使用してください。
- 前の動画からシーンを切り替えたい場合は、"reference_image"を"new"にして新しいシーンの画像と動画を生成してください。
- 動画生成のプロンプトはできる限り詳細に書いてください。以下のような観点を含めてください。
  - 主題: 動画に含める物体、人物、風景
  - コンテキスト: 被写体が配置される背景やコンテキスト
  - アクション: 被写体が行っている動作(歩く、走る、首を回すなど)
  - スタイル: 一般的なスタイルでも、特定化されたスタイルでもかまいません。ホラー映画、フィルムノワールなど、特定の映画スタイルのキーワードや、カートゥーンスタイルのレンダリングなどのアニメーションスタイルのキーワードの使用を検討してください。
  - カメラの動き: 省略可。カメラの動作(空中撮影、目の高さ、上から撮影、低角度撮影など)。
  - 構図: 省略可。 ワイドショット、クローズアップ、エクストリーム クローズアップなど、ショットのフレーム設定。
  - Ambiance: 省略可。青色、夜間、暖色など、色と光がシーンに与える影響。
- センシティブなワードは使用しないでください。

作成したToolたち

AIエージェントが使用する各ツールはGoogle CloudのVertex AIのAPIを呼び出すようになっています。
以下の4つのツールを用意しました。

  • 画像生成ツール
    • Imagen4を使用
  • 動画生成ツール
    • Veo2を使用
  • 音楽生成ツール
    • Lyria2を使用
  • 動画&音楽マージツール
    • Moviepyを使って動画と音楽をマージ

AIエージェントで作成した他の動画作品たち

いろいろ作ってみた動画たちです。
Googleの生成AIはセンシティブな表現に厳しいので、基本ほのぼの系の動画になってます。

テーマ: 「渋谷を歩く女性」

渋谷を歩いていたら、なぜか上からUFOがやってきて、、
https://www.youtube.com/watch?v=-Vgtb2XjFH8

テーマ: 「折り紙を折る」

折り紙で鶴を折るのに苦戦していたら、、
https://www.youtube.com/shorts/eKfPvMljYXc

テーマ: 「おしゃれなバーのバーテンダー」

おしゃれなバーでバーテンダーが飲み物を作ったら、、
https://www.youtube.com/watch?v=WkzXiy3Ones

まとめ

今回のAIエージェントはほぼ作業の手順が決まっているということもあって、ワークフロー的なやり方でも全然良かったかなと思っていましたが、
AIの進化でワークフローもかなり精度高くこなしてくれるので、実装の簡素化という意味でいちいちワークフローを構築せずにエージェントでササッと検証することが今後も増えていきそうだと思いました。
あと、今回のツールはADK, Gemini, Veoなどを始め、気づいたら全部Googleになってました。
インフラも考えると正直AI開発はGoogleがかなり使いやすくなっているなと感じました。
LangChainよりもツールの連携がシンプルに書けるので、AIエージェント開発には積極的にADKを使っていきたいと思います。

参考情報

ADKを使ってマルチモーダルなデータの処理を行う情報は少なかったので、めちゃ参考になりました。
https://zenn.dev/soundtricker/articles/fba90dc901ab46
https://zenn.dev/google_cloud_jp/articles/97002c462e9025

Discussion