📌 AI関連

Geminiで動画が生成されない原因は「単語」だった|4分待たされてエラーも出ない罠

`toy water sprayer` と書いただけなのに、出てきたのはしっかり水鉄砲

Geminiで動画を作っていて、こんな目に遭ったことはないでしょうか。

  • 「生成中…」のまま4分待たされて、気づいたら入力画面に戻っている
  • エラーメッセージも上限の通知も、何も出ない
  • 同じプロンプトを投げ直しても、また同じことが起きる

今回まさにこれで詰まりました。しかも原因が想像の斜め上で、プロンプトに含まれていた「たった1単語」でした。

この記事は、8カット構成のショートアニメ(合計80秒)をGeminiで作りきるまでの実録です。プロンプトのコツもありますが、正直それより環境まわりの罠のほうが役に立つと思うので、そっちを中心に書きます。

同じところで止まっている人の検索に引っかかってくれたら本望です。

💡 以前も同じ手法でクリスタルドラゴンのショートアニメを作っています。基本的なワークフロー(絵コンテの組み方、カットの繋ぎ方)はそちらで詳しく書いているので、あわせてどうぞ。


作ったもの

夏休みにYouTube ShortsやTikTokで流行っている「電動水鉄砲バトル」をテーマに、こんな構成で作りました。

# シーン
01 ネオンのアクアアリーナに入場、水鉄砲を構える
02 障害物をスライディングで抜けて水を噴射
03 落ちてくる巨大水風船をパルクールで回避
04 給水タワーでレインボー水をチャージ
05 滝スライダーから飛んで黄金ターゲットを撃破
06 水上ステージで勝利のダンス
07 夜空に虹色の水花火が大爆発
08 全員でバイバイ、フェードアウト

主役は少年とカメ型ロボット。仕上がりのスペックはこうなりました。

項目
1分20秒(10秒 × 8カット)
解像度 1280 × 720
フレームレート 24fps
音声 AAC ステレオ(自動で付く)
ファイルサイズ 20.1MB

使ったのは Gemini(Google AI Pro)ffmpeg だけ。有料の編集ソフトは使っていません。

できあがったのがこちらです。

https://www.youtube.com/shorts/6LHg2KPdZMc


罠その1:銃と戦闘の言葉が「無言で」弾かれる

ここが今回の最大のハマりどころです。

症状

最初のカットのプロンプトはこう書いていました。

3D Pixar style animation, an energetic anime kid ... holding a high-tech
glowing blue electric water blaster at a massive neon aqua obstacle arena ...

これを投げると、4分ほど「生成中」の表示が続いたあと、何事もなかったように入力画面に戻ります。 プロンプトは入力欄に残ったまま。エラーも出ない。上限メッセージも出ない。

2回試して2回とも同じ。これは偶然じゃないな、と。

原因の切り分け方

ここで大事なのは、推測で書き換えないことです。当てずっぽうで直すと、何が効いたのか分からないまま次のカットでまた踏みます。

疑わしい要素は2つありました。

  1. 子ども(anime kid)
  2. (electric water blaster)

そこで、両方外したプロンプトを投げてみました。

3D Pixar style animation, a cute turtle robot mascot splashing happily
in a massive neon aqua arena ...

成功。 動画が出ました。

つまり原因はこの2つのどちらか。次に、少年を残したまま銃の表現だけ和らげて投げます。

3D Pixar style animation, a cheerful anime boy in colorful summer swimwear
... holding a glowing blue toy water sprayer ...

これも成功。

これで確定しました。弾かれていたのは「銃」の語彙だけ。少年の登場は何の問題もない。

言い換え表

判明した対応はこうです。

弾かれる語 通る言い換え
water blaster / water gun toy water sprayer
shoot / fire / rapid-fire spray / splash / water arcs
battle / sniper / opponent water play / friendly game
cannonball big water balloon
target(撃破対象) goal buzzer

大事なポイント:絵は変わらない

「言い換えたらつまらない絵になるのでは」と思うかもしれませんが、そんなことはありません。

toy water sprayer と書いても、出てくる映像はしっかり水鉄砲です。虹色に光るタンク付きの、いかにもオモチャっぽいやつがちゃんと描かれます。

変わるのはこちらが打つ言葉だけで、画面に出るものは変わらない。ここが分かってからは一気に進みました。

`toy water sprayer` と書いただけなのに、出てきたのはしっかり水鉄砲

罠その2:Chromeのタブが裏に回ると全部止まる

これは前回のAI動画制作でも踏んだやつです。今回もしっかり踏みました。

症状

  • 動画は「生成完了」なのに再生されない(0:00 / 0:00 のまま)
  • ダウンロードボタンを押しても何も起きない(エラーも出ない)
  • スクリーンショットが取れない

原因

Chromeは非表示のタブの動画読み込みを止めます。 省エネのためですね。

厄介なのは、この「非表示」がタブを切り替えたときだけじゃないこと。Chromeのウィンドウが他のウィンドウに完全に隠れただけでも発動します。

つまり、別のアプリを全画面で使いながらGeminiで生成を回していると、それだけで止まる。

対策

Chromeを他のウィンドウと左右に並べて、常に画面に見えている状態にしておく。

これだけです。ウィンドウのリサイズやタブの選択では直りませんでした。物理的に見えている必要があります。

JavaScriptで確認するならこれで一発です。

document.visibilityState  // "hidden" なら止まっている

罠その3:モデルが勝手に格下げされる

これは今回初めて気づきました。

Geminiのモデル選択が、リロードのたび、エラーのたびに Flash-Lite に戻ります。

最初の数カットは 3.7 Flash で作っていたのに、途中から気づかず Lite で生成していました。Lite は速い代わりに描写が変わるので、カット間で絵柄が変わる原因になります。

対策はシンプルで、送信前に毎回モデル名を確認する。左上に出ています。地味ですが、8カット通して同じ絵柄を保ちたいなら必須のチェックです。


罠その4:チャット自体が壊れる

終盤、Cut 07 が5回連続で失敗しました。しかも失敗の仕方が毎回違う。

症状
1〜3 I couldn't do that because I'm getting a lot of requests right now.
4 エラーが発生しました (1099)
5 Enterを押してもそもそも送信されない

混雑エラーだと思って時間を空けても改善しませんでした。

解決策:新しいチャットに逃がす

新規チャットを開いて同じプロンプトを投げたら、一発で通りました。

チャットのセッション自体が壊れていたようです。同じアカウント、同じモデル、同じプロンプトなのに、チャットを変えるだけで通る。

ただしこれには副作用があります。「前のカットの続き」という文脈が失われるので、キャラが別人になるリスクが出ます。

そこで、キャラの外見を文章で明示的に指定しました。

... a cheerful anime boy with brown hair in yellow swim shorts
and a cute green turtle robot mascot ...

結果、新チャットで作った Cut 07・08 も、前の6カットとちゃんと同じキャラで出ました。「the same 〜」の代わりに具体的な外見描写を入れる、というのが逃げ道になります。

新しいチャットで作ったカット。外見を文章で指定しただけで同じキャラが出た

うまくいったこと

罠の話ばかりしましたが、うまくいった手法も書いておきます。

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

これが一番効きました。

各カットのプロンプトの末尾に、そのカットがどう終わってほしいかを書く

..., at the end the water arc reaches the golden buzzer and a huge
fountain erupts from the center of the arena.

これを入れたカットは、狙った終わり方がほぼ一発で出ます。

なぜ効くかというと、ラストフレームが次のカットの起点になるからです。カットを繋いでいく前提の動画では、終わり方をコントロールできるかどうかで手戻りの量が変わります。

同じチャットで続ける

わざわざ「前のカットのラストフレームを画像として次に渡す(Image-to-Video)」をやらなくても、同じチャットの中で続けて投げるだけでキャラは十分保てました。

プロンプトの頭に continuing from previous frame, the same 〜 と書くだけ。the same を明示するのがコツです。

実尺は先に測る

「8秒 × 8カット = 64秒」のつもりで絵コンテを組んでいたら、Geminiが返してきたのは10秒でした。合計80秒。

Geminiは尺を指定できないので、絵コンテを組む前に1本テスト生成して測るのが正解です。


仕上げ:ffmpegで繋ぐ

8本揃ったら1本にします。全部同じ解像度・fps・コーデックなので、再エンコードなしで繋げます(画質劣化ゼロ、処理も一瞬)。

list.txt を用意して、

file 'C:/Users/user/Downloads/cut01.mp4'
file 'C:/Users/user/Downloads/cut02.mp4'

これを実行。

ffmpeg -f concat -safe 0 -i list.txt -c copy -y full.mp4

繋がったか確認する小ワザ

頭から再生して確認するのはダルいので、各カットの中間フレームをタイル状に並べます。

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 = 240フレームなので、各カットの真ん中は 120, 360, 600… という計算です。1枚の画像で全カットの順序と内容が確認できます。

左上から順に Cut 01〜08 の中間フレーム。抜けも順序違いも一目で分かる

ラストフレームの抜き方

各カットが狙い通りに終わっているかのチェック用。

ffmpeg -sseof -0.1 -i input.mp4 -update 1 -q:v 2 -y last.png

-sseof は終端からの相対位置です。ただしフェードアウトで終わるカットは真っ暗な画像が出るので、その場合は少し手前を抜きます。

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

ショート用の縦型化とサムネ

縦型(9:16)は3方式から選ぶ

16:9を9:16にすると、必ず何かを捨てることになります。

方式 内容
ぼかし背景 全体を残す。ただし主役が画面の1/3になる
ハイブリッド 左右を12.5%ずつ切って主役を1.33倍に。おすすめ
全画面クロップ 迫力最大。ただし横幅の31%しか残らない

全画面クロップは、複数キャラが横に並ぶカットで端のキャラが消えます。 ストーリーものだと致命的なので、基本はハイブリッドが無難です。

左=ぼかし背景、中=ハイブリッド、右=全画面クロップ

ハイブリッドのコマンドはこれ。

ffmpeg -i in.mp4 -filter_complex \
"[0:v]split=2[bg][fg];\
[bg]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,gblur=sigma=25[bgb];\
[fg]crop=iw*0.75:ih:iw*0.125:0,scale=1080:-2[fgs];\
[bgb][fgs]overlay=(W-w)/2:(H-h)/2,format=yuv420p[v]" \
-map "[v]" -map 0:a -c:v libx264 -preset medium -crf 20 -c:a copy -y out.mp4

サムネは2MB制限に注意

YouTubeのサムネイル上限は2MB。 1080×1920のPNGは軽く超えて弾かれます。JPGに変換しましょう。

ffmpeg -i frame.png -q:v 2 -y thumbnail.jpg

-q:v 2 は最高品質側ですが、それでも200KB程度に収まります。目視で劣化は分かりません。

サムネの選び方としては、縮小表示で「何の動画か」が一瞬で伝わるかが全てです。今回は「水鉄砲が大きく写っていて、かつ顔も見える」1枚を選びました。かわいい絵でも、商品や題材が写っていないと弱いです。

動画から抜き出したサムネ候補6点
最終的に選んだ1枚。虹色のタンクが画面の左半分を占める

まとめ

やってみて分かったのは、AI動画づくりで時間を食うのはプロンプトじゃないということ。

プロンプト自体は、絵コンテさえ書けていれば英訳するだけでほぼ通ります。今回詰まったのは全部それ以外——弾かれる単語、裏に回るタブ、勝手に落ちるモデル、壊れるチャット。

要点はこの5つです。

  1. 生成が無言で失敗したら、まず単語を疑う(銃・戦闘の語彙は黙って弾かれる)
  2. Chromeのウィンドウは隠さない
  3. 送信前にモデル名を確認する
  4. チャットが壊れたら新規チャットに逃がす(キャラは外見描写で維持)
  5. 締めの構図は at the end ... で明示する

これだけ押さえておけば、8カット程度の連作はかなりスムーズに作れると思います。

同じキャラで話が続く動画、思っているよりちゃんと作れます。夏休みの自由研究にもいいかもしれません。


完成品をもう一度

記事で解説した8カットが、実際にどう繋がっているかはこちらで。

https://www.youtube.com/shorts/6LHg2KPdZMc


あわせて読みたい

同じワークフローで作った別の作品もあります。絵コンテの組み方やカットの繋ぎ方の基本は、こちらのほうが詳しく書いています。

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

ネオン街のクリスタルドラゴンが主役の8カット構成です。今回の記事で触れた「タブが裏に回ると止まる」問題は、そちらで最初に踏んだものでした。

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