📌 AI関連

Geminiで80秒のショートアニメを作ったら、敵は「Chromeのタブ」だった話

Crystal Dragon's Neon AdventureのYouTubeサムネイル

Geminiで8カットの動画を作って、1本のショートアニメにしてみました。

完成したのは、虹色の翼を持つ赤ちゃんクリスタルドラゴンが、ネオン街からスイーツの国へ冒険する「Crystal Dragon’s Neon Adventure」。尺は約1分20秒です。

「同じキャラのまま物語を続けられるのか?」を試した企画だったんですが、実際に一番苦戦したのはプロンプトではありませんでした。Chromeの表示状態、生成上限、途中のクラッシュ……。今回は、完成までにやったことと、地味だけど効いたコツをそのまままとめます。

完成した動画

YouTubeで「Crystal Dragon’s Neon Adventure」を見る

どんな動画?

主役は、結晶のような体と虹色の翼を持つ赤ちゃんドラゴンです。

ネオンきらめく夜の街で目を覚まし、星型キャンディを追いかけ、虹のガラス滑り台を一気に滑り降りる。着いた先ではロボット猫やモンスターたちとダンス。魔法のステッキを振れば夜空にスマイル花火が上がり、最後はみんなで紙吹雪の中バイバイ——という、かなりにぎやかな80秒になりました。

項目 内容
約1分20秒(10秒×8カット)
解像度 1280×720
フレームレート 24fps
音声 AACステレオ
制作 Geminiで動画生成、ffmpegで確認・連結

作ろうと思ったきっかけ

AIで短い動画を1本作るだけなら、かなり手軽になりました。でも「同じキャラクターで話が続く動画」となると、急に難しくなります。カットが変わった瞬間に、顔も体型も別人になることがあるからです。

そこで今回は、先に8カット構成の絵コンテをテキストで作り、同じチャットの中で1カットずつ生成する方式を試しました。結論から言うと、思っていた以上にキャラクターの一貫性を保てました。

使用したもの

  • Gemini(Google AI Proプラン)— 各カットの動画生成
  • ffmpeg — ラストフレームの切り出し、動画の連結、確認用画像の作成
  • テキストで作った8カット分の絵コンテ

有料の動画編集ソフトは使っていません。生成した8本が同じ解像度・fps・コーデックだったので、最後は再エンコードせずにつなげられました。

制作の流れ

  1. 絵コンテに沿ってカットごとの英語プロンプトを作る
  2. Geminiの同じチャットへ順番に入力する
  3. 生成が終わった動画を、その都度ダウンロードする
  4. ffmpegでラスト付近のフレームを切り出す
  5. 狙った締めの構図になっているか確認する
  6. 問題なければ次のカットへ進む
  7. 8本そろったら、ffmpegで1本に連結する
  8. 各カットの中間フレームを並べ、順番と内容を最終確認する

当初は1カット8秒、合計64秒の予定でした。ところが今回生成された動画は1本10秒だったため、完成版は約80秒になりました。最初の1本で実際の尺を確認してから全体を組むと、後の調整がラクです。

全8カットの構成

# シーン 内容
01 目覚めと飛翔 ネオン街で目を覚まし、虹色の翼を広げて飛び立つ
02 キャンディ・アクロバット飛行 ビルの間を飛びながら星型キャンディをキャッチ
03 レインボースライダー 虹のガラス滑り台を街の上空から滑り降りる
04 仲間とのダンス ロボット猫やモンスターたちとダンスフロアで踊る
05 スイーツワールドへ 街がドーナツ城とアイス山の世界に変わる
06 魔法の杖と笑顔の花火 ステッキを振ると夜空にスマイル花火が上がる
07 クリスタル宝箱 空から降りてきた宝箱を開けると金色の光があふれる
08 グランドフィナーレ 全員集合。紙吹雪の中で手を振り、フェードアウト

つまずいたポイント

1.Chromeのタブが見えない状態になると動画を扱えなかった

今回いちばんハマったのがここです。

画面には「生成完了」と出ているのに、動画が0:00/0:00のままで再生できない。ダウンロードを押しても反応せず、確認用のスクリーンショットも取得できませんでした。

いろいろ試した結果、今回の環境ではGeminiを開いているChromeを別ウィンドウの後ろへ完全に隠さず、左右に並べて表示状態にすると復旧しました。動画生成を回しながら別作業をする場合でも、対象タブを見える位置に残しておくのが安全そうです。

2.生成上限に2回ぶつかった

今回の制作では、途中で生成上限の案内が2回表示されました。1回目はCut 02の後、2回目はCut 06の後です。どちらも画面に再開できる時刻が表示されたので、その時間まで待って再開しました。

撮り直しも含めると、一気に8本を作り切れるとは限りません。長めの作品は、上限待ちも込みで余裕のあるスケジュールにしたほうがよさそうです。

3.Chromeが落ち、生成中のセッションが消えた

途中でChromeがクラッシュし、生成中だったカットが消えました。完成済みの動画は残っていましたが、「あとでまとめて保存しよう」は危険です。

1本完成するたびにダウンロード。地味ですが、これが一番確実でした。

キャラクターを保つために効いたコツ

同じチャットで「the same」を明示する

最初は、前カットのラストフレームを画像として次のカットへ渡す予定でした。でも今回は、同じチャット内で続けて生成するだけでも、かなり見た目を保てました。

continuing from previous frame, the same baby crystal dragon ...

the sameを入れ、前の映像から続く同じキャラクターだと明示します。8カットを通して、結晶質のボディ、虹色の翼、大きな瞳が安定。Cut 04で登場したロボット猫やモンスターも、Cut 08で再登場してくれました。

締めの構図は「at the end」で指定する

今回の一番の発見がこれです。カットをつなぐ作品では、終わり方が次のカットのスタートへ影響します。

..., at the end it grabs a large golden star candy with both hands
and its whole body bursts with radiant glowing light.

Cut 02の初回だけは締めの指示を入れ忘れ、狙っていた「黄金の星をキャッチする瞬間」が出ずに撮り直しました。末尾へat the end…を追加した後は、Cut 03以降がすべて一度で狙った構図になりました。

ffmpegでラストフレームを確認

毎回動画を最後まで再生して確認すると時間がかかるので、終わりから0.1秒前のフレームを画像にしました。

ffmpeg -sseof -0.1 -i input.mp4 -update 1 -y lastframe.png

フェードアウトで終わる動画では真っ黒な画像になることがあります。その場合は少し手前の時刻を指定します。

ffmpeg -ss 8.2 -i input.mp4 -frames:v 1 -y finale.png

8本を画質劣化なしで連結

全カットの仕様が同じだったので、一覧ファイルを作り、ストリームコピーで連結しました。

file 'C:/path/to/cut01.mp4'
file 'C:/path/to/cut02.mp4'
...
file 'C:/path/to/cut08.mp4'
ffmpeg -f concat -safe 0 -i list.txt -c copy -y output.mp4

再エンコードを行わないため、画質を落とさず短時間で1本にまとめられます。

順番の確認にはコンタクトシートが便利

8本が正しい順番で入っているかを頭から再生して確認するのは大変です。そこで、各カットの中間フレームを抜き出して4×2の画像に並べました。

ffmpeg -i full.mp4 -vf "select='eq(n,120)+eq(n,360)+eq(n,600)+eq(n,840)+eq(n,1080)+eq(n,1320)+eq(n,1560)+eq(n,1800)',scale=320:180,tile=4x2" -frames:v 1 -y sheet.png

10秒×24fpsなので、各カットの真ん中は120、360、600……フレームになります。ネオン街、キャンディ、スライダー、ダンス、スイーツワールド、魔法の杖、宝箱、フィナーレの順に並んでいることを一目で確認できました。

まとめ

やってみて思ったのは、AI動画制作で詰まりやすいのは、プロンプトだけではないということです。

  • 生成中のChromeは見える状態にしておく
  • 生成上限が来る前提で余裕を持つ
  • 完成した動画は、その都度ダウンロードする
  • 同じキャラで続けるときは「the same」を明示する
  • 締めの構図は「at the end…」で指定する
  • ラストフレームと連結後の順番はffmpegで確認する

このあたりを押さえるだけで、複数カットの制作がかなり進めやすくなりました。同じキャラクターが物語の中を動き続ける動画、思ったよりちゃんと作れます。

また別のキャラクターや構成でも試して、制作ログとして紹介します。

※当サイトはアフィリエイト広告を利用しています。商品の価格・仕様は変更になる場合があります。