2026年9月25日 【応用編】Veoを使った長尺動画作成方法 Google Cloud Vertex AI 生成AI(Generative AI) 検索する Popular tags 事例紹介 GEN-STEP 生成AI(Generative AI) Vertex AI Search Looker Studio BigQuery AlloyDB Google Workspace Cloud SQL Category Google Cloud Author Tera SHARE Content 目次 ↓0. まえがき:8秒しか作れない、という壁 ↓1. Veo だけで長尺動画は作れない、という前提 ↓2. 使用する4つのツール ― それぞれの役割 ↓3. 複数モデルを併用する3つの恩恵 ↓4. 実践 ― 1分44秒の「三匹の子豚」を作る ↓5. まとめ 0. まえがき:8秒しか作れない、という壁 まず、この記事を書いたきっかけからお話しします。前回、Google Cloud(Agent Platform)上での Veo の使い方を網羅的に紹介する記事を書きました。タスクの使い分け、パラメータの意味、API 利用時の注意点 ― ひととおり整理したことで、Veo で何ができるのかは自分なりに掴めたつもりでいました。 そこから実際に手を動かして「じゃあ何が作れるだろう」と色々試していました。ところが、すぐに壁にぶつかります。 1回の生成で作れるのは、たった8秒。 ただし、8秒というのは映像としてはほんの一瞬です。何かが映って、少し動いて、終わり。これだけです。そのため、物語を1本、商品紹介を1本、社内向けの説明動画を1本 ― そういう 「分単位」の動画 を作ろうとした瞬間に、手が止まります。 前回の記事で書き残したこと 実は前回の記事でも「1回8秒の壁」には触れていました。ただし、そこでは 「カットを分割して生成し、最後に結合するという工程設計が前提になります」 と書いただけで、具体的な方法までは踏み込んでいません。というのも、実際に自分でやってみて、これは1章分では収まらないと分かったからです。 そして調べていくうちに気づいたのは、同じところで止まっている人が、たぶん少なくない ということでした。動画生成AIの需要は「8秒のかっこいい映像」ではなく、多くの場合 「伝えたい内容が最後まで入っている、数十秒〜数分の動画」 のはずです。にもかかわらず、Veo の解説記事は「プロンプトを工夫して良い8秒を作る」ところで終わっているものがほとんどでした。 そこで本記事では、Veo 単体の限界をどう超えるか を、実際に作った 1分44秒の「三匹の子豚」 を題材に、手順ごと公開します。位置づけとしては、前回記事の 「活用術・応用編」 にあたります。 まず、言葉で説明するより見ていただくほうが早いので、先に完成品を置いておきます。 https://sight-r.sts-inc.co.jp/wp/wp-content/uploads/2026/09/three_little_pigs_full.mp4本記事の手順で作った「三匹の子豚」。8秒 × 13カット = 1分44秒。 絵は Nano Banana、語りは Gemini TTS、動きは Veo、結合は ffmpeg が担当しています。 つまり、8秒のカットを13本作って、つなぎ合わせただけ です。特別なことは何もしていません。以下、これをどうやって作ったかを、最初から最後まで書きます。 この記事の想定読者 なお、読者としては次の3タイプを想定しています。 読者 この記事の読み方 Veo を触ってみて「8秒じゃ足りない」と感じた人 全章。1章で全体像、4章で具体手順を追ってください 生成AIで動画制作を業務化したい人 特に 2〜3章。なぜ「1モデルで全部やらない」のかが本題です エンジニア 4章の JSON 構造化と 4-8 の ffmpeg 部分。パイプライン化の設計に直結します 💡 なぜ題材に「三匹の子豚」を選んだのか 理由は3つあります。 まず 誰もが筋を知っている ので、映像がうまくいっているかどうかを読者が判断しやすいこと。 次に パブリックドメインの民話 なので、権利を気にせず題材にできること。自分の手元で試すときも安心です。 そして最大の理由が、同じキャラクターが最初から最後まで登場し続ける ことです。これは長尺動画で必ずぶつかる「キャラクターの一貫性」という課題を、逃げずに扱えるということでもあります。商品CMのように「商品だけが映っていればいい」題材より、はるかに難易度が高く、そのぶん実践的です。 注意(執筆時点の情報について) なお、本記事は 2026年9月時点 の情報をもとにしています。モデル名・仕様・料金は頻繁に変わるため、最新値は必ず公式ドキュメントでご確認ください。 1. Veo だけで長尺動画は作れない、という前提 1-1. まず、限界を正確に把握する まず、Veo の生成上限を整理しておきます。 項目 上限 補足 1回の生成 (Text-to-video / Image-to-video) 最大8秒 durationSeconds は 4 / 6 / 8 から選択。8秒が天井です Video extension (動画の延長) +8秒程度 既存動画の末尾から継ぎ足す。実用上は 16秒前後が現実的なライン つまり、通常運用で作れるのは長くても十数秒 ということです。今回作りたい1分44秒には、まったく届きません。 1-2. 延長機能では物語は作れない さらに、延長タスクにも弱点があります。継ぎ足しを重ねるほど、次のような問題が出てきます。 まず 画質が徐々に劣化する(前の生成結果を入力として再生成するため) さらに 被写体や色味が少しずつドリフトしていく そして カット割りができない(あくまで「同じショットの続き」であって、シーンチェンジではない) とくに三つ目が致命的です。物語のように 「旅立ち → 家を建てる → オオカミ登場 → 対決 → 結末」 と場面が次々に切り替わる構成では、そもそも延長タスクは設計思想が合いません。実際、三匹の子豚を延長機能だけで作ろうとすると、「ずっと同じ場所を映し続ける16秒」にしかならないのです。 ⚠️ ここを誤解すると企画が崩れます つまり、「Veo で物語動画を1本作りましょう」という提案は、そのままでは実現できません。 正しくは「Veo で 物語を構成するカットを1本ずつ作り、それを編集して1本にまとめましょう」です。 したがって、社内やクライアントへの説明時には、ここの期待値調整を最初にやっておくことを強くお勧めします。 1-3. 発想を変える ― 「1本を作る」から「カットを作って繋ぐ」へ そこで、発想を切り替えます。 そもそも、実際の映像制作も「1本撮り」ではありません。 アニメも映画も数秒のカットの集合体で、それを編集でつないで1本にしています。つまり、8秒しか作れないのは制約ですが、カットの単位としては、むしろちょうどいい長さ なのです。 つまり、この発想に立つとやるべきことははっきりします。 【これまでの発想】 Veo に「三匹の子豚の物語を作って」と頼む → 作れない 【これからの発想】 1分44秒の物語 = 8秒 × 13カット 13カットをそれぞれ Veo で作り、最後に編集ツールで繋ぐ したがって、この考え方であれば 短編動画を用意すればするほど、理論上は無限に長尺化できます。 8秒×13カットで1分44秒、8秒×23カットで約3分。上限はありません。 1-4. 全体像 ― 複数モデルで役割分担する ただし、「Veo で13カット作る」だけでは足りません。カットを繋いで1本の作品にするには、シナリオ・絵コンテ・ナレーション・結合 という工程が必要になります。そして そのすべてを Veo にやらせる必要はありません。 そこで本記事では、次の6ステップに分けるワークフローを紹介します。 Step1 シナリオ生成 Gemini(Flash) 「三匹の子豚を13カットの動画にする構成を考えて」 Step2 カット割り生成(JSON化) Gemini(Flash) 13カットに分解し、各カットの素材指示を構造化 Step3 絵コンテ画像生成 Nano Banana 各カットの「始点となる1枚」を作る Step4 ナレーション生成 Gemini TTS 各カットの音声を日本語で作る Step5 各カットの動画化 Veo(Image-to-video) 絵コンテ画像+モーション指示で 8秒 × 13本 Step6 結合・仕上げ ffmpeg 音声・BGM を合成し、13カットを1本に連結 ↓ 1分44秒の完成動画 ここでのポイントは、Veo の担当は Step5 だけ ということです。つまり、Veo は「絵を動かす」ことに専念させ、それ以外は得意なモデルに任せます。これが長尺化の基本設計になります。 2. 使用する4つのツール ― それぞれの役割 では、なぜこの組み合わせなのか。役割ごとに説明します。 2-1. Gemini(Flash)― 設計図を作る 役割:シナリオと、カット割りの設計(Step1・Step2) まず前提として、いきなり Veo にプロンプトを打ち込むのは、設計図なしで家を建てるようなもの です。カットごとに思いつきで作ると、つないだときにトンマナがバラバラになり、話も繋がりません。しかも、カット数が13にもなればなおさらです。 そこで最初に、テキストモデルである Gemini に 物語全体の構成 を作らせます。つまり、設計図から先に引くわけです。 なお、Flash 系を推す理由はシンプルで、この工程は何度もやり直すから です。構成は一発では決まりません。「もっと子ども向けに」「オオカミの描写を控えめに」と条件を変えて何度も回すことになります。したがって、速くて安いモデルが向いています。 さらに重要なのが Step2 の 「カット割りを JSON で出力させる」 という使い方です。後続の Nano Banana / Gemini TTS / Veo に渡すプロンプトを、構造化データとして一度に生成させてしまうのです。 そもそも13カット分の素材指示を手書きするのは現実的ではありません。つまり、ここが効率の要になります(詳細は4章)。 2-2. Nano Banana ― 絵を固定する 役割:各カットの絵コンテ画像を生成(Step3) 実は、ここが 長尺動画作成における最大のキモ です。 たしかに Veo は Text-to-video でも動画を作れます。しかし、テキストだけの指定は 「どんな絵が出てくるか分からない」ギャンブル になります。カット1とカット2で子豚の顔が違う、絵柄が違う、色味が違う ― そんな素材をつないでも、1本の作品にはなりません。13カットもあれば、どこかで必ず破綻します。 先に絵を作ると、何が変わるか そこで、先に画像生成AI(Nano Banana)で「この絵で行く」という1枚を作り込み、それを Veo に渡します。 Veo 側には「その絵をどう動かすか」だけを指示します。この役割分担により、次の3つの効果が得られます。 効果 内容 精度が上がる プロンプトだけよりも、イメージ画像がある方が圧倒的に狙いどおりになる やり直しが安い 画像生成は動画生成よりはるかに安く速い。絵の段階で納得いくまで詰められる トンマナを揃えられる 全カットの画像を並べて「絵柄とキャラが合っているか」を確認してから動画化できる 💡 始点と終点を固定できる、という強み ちなみに、Veo には 開始フレームと終了フレームの両方を指定できる 使い方があります。始点画像と終点画像を渡すと、Veo は その間の動きだけ を生成します。 これは長尺化において非常に強力です。つまり、あるカットの「終点画像」を、次のカットの「始点画像」にすれば、カットの繋ぎ目が自然につながります。 単純に切り貼りしただけの「ブツ切り感」を、素材レベルで解消できるわけです。 2-3. Gemini TTS ― 日本語のナレーションを作る 役割:各カットのナレーション音声を生成(Step4) Veo は音声も同時生成できるのが売りです。ただし、日本語のセリフ・ナレーションは、現状あまり安定しません。 発音が崩れる、イントネーションが不自然、そもそも意図した文言を喋ってくれない、といったことが起こります。 そして何より、Veo の音声は「作り直し=動画ごと作り直し」 です。「ナレーションの言い回しだけ変えたい」ときに、数十秒かけて動画を再生成し、しかも映像まで変わってしまいます。これは実務的にかなり厳しいと言わざるを得ません。 とくに物語動画では、これが決定的になります。というのも、語りは作品の骨格 だからです。テンポも言い回しも何度も調整することになるのに、そのたびに映像が変わってしまってはどうにもなりません。 そこで ナレーションは Gemini TTS で別途生成し、後から合成します。 これで語りだけを何度でも調整できます。 メリット 内容 音声だけ差し替えられる 映像はそのままに、ナレーションだけ何度でも録り直せる 声のトーンを全カットで統一できる 同じ音声設定を13カットに使えば、語り手の声がブレません 読み上げ速度を制御できる 「8秒に収める」という尺の制約に合わせやすい したがって、Veo 側は generateAudio を OFF にする のが基本になります。なお、音声生成を切ればコストも下がるので一石二鳥です。 2-4. ffmpeg ― 組み立てる 役割:音声・BGM の合成とカット結合(Step6) そして最後に、生成した素材を1本にまとめます。ここは生成AIの仕事ではなく、動画編集ツールの仕事 です。 もちろん Premiere Pro や DaVinci Resolve のような GUI ツールでも構いません。ただし本記事では ffmpeg を使います。理由は3つです。 まず 無料で、コマンド一発で終わる 次に 手順がテキストとして残るので、再現・共有できる 最後に 自動化できる ― カット数が増えても、ループで回すだけ とくに3番目が重要です。今回は13カット、つまり映像13本と音声13本、合計26ファイルを扱います。 これを GUI で1つずつ読み込んで並べるのは、正直かなりの手間です。カット数が20、30と増えればなおさらでしょう。したがって、生成AIによる動画制作を業務フローに乗せるなら、結合工程はスクリプト化しておくべきです。 2-5. 役割分担まとめ 工程 使用ツール 担当領域 なぜ Veo ではないのか Step1 シナリオ Gemini(Flash) 物語構成・語り Veo は文章を考えられない Step2 カット割り Gemini(Flash) 構造化・素材指示の生成 同上。JSON 出力が後工程に効く Step3 絵コンテ Nano Banana 静止画の作り込み 画像の方が安く速く、精度が高い Step4 音声 Gemini TTS 日本語ナレーション Veo の日本語音声は不安定・差し替え不可 Step5 動画化 Veo 絵を動かす ここが Veo の本領 Step6 結合 ffmpeg 編集・書き出し 生成AIの領分ではない 3. 複数モデルを併用する3つの恩恵 ここまで読んで「工程が増えて面倒では?」と思われるかもしれません。しかし、分担することで得られるメリットは、手間を大きく上回ります。 3-1. 尺の上限が実質なくなる まず、これが最大の恩恵です。8秒×4カット=32秒、8秒×13カット=1分44秒、8秒×23カット=約3分。カットを増やすだけで、いくらでも長くできます。 つまり Veo の「8秒の壁」は、1本の動画の上限ではなく、1カットの上限 に読み替えられるということです。つまり、この読み替えができた時点で制約は制約でなくなります。 そのうえで今回あえて「13カット・1分44秒」という、そこそこの長さを題材にしたのは、ここを実感してほしいからです。4カットでも13カットでも、作業の性質は何も変わりません。 実際、ループが回る回数が3倍になるだけです。 3-2. 工程ごとに「やり直し」できる ― これが最大の実利 一方、Veo 単体で全部作ろうとすると、すべてが一発勝負 になります。ナレーションの言い回しを1語変えたいだけでも、映像ごと作り直しです。 一方、分担していれば壊れた工程だけをピンポイントで直せます。 【Veo 単体で全部やった場合】 「カット7のナレーションだけ直したい」 ↓ カット7を丸ごと再生成 → 映像も変わる → オオカミの顔が変わる → 前後のカットと繋がらない 💀 全滅 【分担した場合】 「カット7のナレーションだけ直したい」 ↓ narration7.wav を作り直す(数秒・ほぼ無料)→ ffmpeg で再結合 ✅ 映像は一切変わらない 工程ごとの、やり直しの範囲 同じことが各工程で言えます。 直したいもの 作り直す範囲 コスト 物語の構成・語り口 Step1 のみ(+以降を再実行) ほぼゼロ 絵の構図・キャラの見た目 Step3 の該当画像のみ 安い・速い ナレーション Step4 の該当 wav のみ 安い・速い カメラワーク Step5 の該当カットのみ 他の12カットは無傷 カットの順番・尺・BGM Step6 のコマンドのみ ゼロ 前回記事で「Veo の最大の弱点はマルチターン会話ができないこと」と書きました。しかし、工程を分けること自体が、その弱点への回答になっています。 「全体を対話で直す」のではなく、「直したい部分だけ、その部分の担当モデルで直す」というわけです。 そして カット数が多いほど、この恩恵は大きくなります。 13カットのうち1カットだけ気に入らない、というのは普通に起こります。そのために13カット全部を作り直すのか、1カットだけ差し替えるのか。つまり、差は歴然でしょう。 3-3. 各工程の品質が上がる そもそも全部を1モデルにやらせると、どうしても すべてが「まあまあ」 になります。反対に、専門モデルに分担させれば、それぞれの工程で最高品質を狙えます。 たとえば語りは、テキストモデルが本気で書いたナレーション原稿 また絵は、画像モデルが本気で描いた1枚(しかも何十枚でも試せる) さらに声は、音声モデルが本気で読んだ語り そして動きは、Veo が本気で付けたモーション とくに効くのが 「絵の作り込み」 です。動画生成は1回あたり数十秒〜数分かかりますが、画像生成なら数秒で終わります。つまり 「良い1枚」を探すコストが圧倒的に低いのです。 したがって良い絵さえ用意できれば、Veo はそれを素直に動かしてくれます。 💡 コスト面でも効いてきます たとえば、Veo の標準モデルは 8秒あたり数百円です。13カットを1発で決められることはまずないので、仮に1カット3回試行すれば39本、標準モデルなら1万円を超えます。 一方、絵の段階で試行錯誤を終わらせておけば、Veo の生成回数は激減します。 つまり「動画で試行錯誤しない」ことが、そのままコスト削減になるわけです(具体的な試算は 4-7 に載せました)。 4. 実践 ― 1分44秒の「三匹の子豚」を作る さて、ここからは実際に作った 1分44秒の「三匹の子豚」 を題材に、6ステップを具体的に追っていきます。 4-0. 題材の設定 題材 三匹の子豚(パブリックドメインの民話) 想定用途 子ども向け読み聞かせ動画 / 絵本のデジタル化サンプル 絵柄 温かみのある水彩絵本風 構成 8秒 × 13カット = 1分44秒 尺の内訳 起(1〜5:旅立ちと家づくり)→ 承(6〜8:オオカミ登場と襲撃)→ 転(9〜12:レンガの家での攻防と退散)→ 結(13:締め) 13カットの構成 # 場面 役割 1 旅立ち 導入・世界観の提示 2 長男、わらの家を建てる 3匹の性格を対比させる① 3 次男、木の家を建てる 同② 4 三男、レンガの家をこつこつ建てる 同③(主題の伏線) 5 兄二匹は遊び、三男を笑う 対立構造の明示 6 オオカミ登場 転換点・緊張の導入 7 わらの家が吹き飛ぶ 事件① 8 木の家が吹き飛ぶ 事件②(畳みかけ) 9 レンガの家は びくともしない 山場 10 オオカミ、煙突から侵入を試みる 最後の危機 11 煙突から落ち、暖炉の鍋に落下 クライマックス 12 煙突から飛び出して退散 解決 13 三匹の笑顔・締め 結び・テーマの提示 💡 なぜ「13」なのか ― カット数の決め方 まず、基本は尺から逆算します。目標の尺 ÷ 8秒 = 必要なカット数。1分44秒なら13カットです。 ただし、数合わせで決めてはいけません。物語の「場面の切れ目」の数と、カット数が一致しているのが理想 です。上の13カットは、いずれも「ここで場面が変わる」という自然な区切りになっています。 逆に言うと、8秒に収まらない場面があれば、そこを2カットに割ります。 カット7と8(わらの家と木の家)を分けているのは、1カットに詰め込むと8秒では破綻するからです。 4-1. Step1:シナリオを生成する(Gemini) まず、物語全体の構成とナレーション原稿を Gemini に作らせます。なお、ここでの指示が後工程すべてを左右します。 入力プロンプト あなたは子ども向け映像作品の構成作家です。 民話「三匹の子豚」を、1分44秒のナレーション付き動画にまとめる構成を作ってください。 制約: ・全体を8秒×13カットで構成すること(1カット=1場面、8秒を超える展開を1カットに入れない) ・対象:未就学児〜小学校低学年とその保護者 ・トーン:温かく、やさしい語り口。怖がらせすぎない ・オオカミが食べられる/殺される描写は避け、「逃げ出す」結末にすること ・最後に、物語のテーマを一言でまとめる締めのナレーションを入れること 出力: ・13カットそれぞれの場面説明(1〜2行) ・カットごとのナレーション文(各8秒で読み切れる長さ、日本語で35文字前後) ・作品全体を通して登場するキャラクターの設定(見た目の特徴を、毎回同じ言葉で 描写できるレベルまで具体的に) このプロンプトの設計ポイント ポイント 意図 役割を与える (「子ども向け映像作品の構成作家」) 語彙と語り口が対象年齢に寄る 13カット × 8秒 と明示する ここが最重要。 後工程の制約(Veo は8秒)を、企画段階で先に織り込む 「8秒を超える展開を1カットに入れない」と念押し これを書かないと「家を建てて、完成して、兄が笑う」のような詰め込みカットが出てくる ナレーションの文字数を指定(35文字前後) 尺が合わないと Step4 で全部やり直しになる 表現の禁止事項を先に書く セーフティフィルタでのブロックと、対象年齢に合わない描写を同時に回避できる キャラクター設定まで頼む これが次章の生命線。 後から追加で頼むより、最初から出させたほうが一貫する ⚠️ 「8秒×13」を最初に伝えないと、後で破綻します 実際、ここで尺を指定せずに構成だけ作らせると、「20秒のシーンが5つ」のような、Veo で実現できない構成 が返ってきます。しかも後から無理やり分割すると、シーンの途中で切れて不自然になります。 要するに 後工程の制約を、最初のプロンプトに埋め込むこと。 これが生成AIパイプラインを組むときの鉄則です。 生成されたキャラクター設定 そこで、このプロンプトで出てきた設定を以下のように確定させました。これ以降、全工程でこの文言をそのまま使い回します。 キャラクター 確定させた描写(この文言をコピペで使う) 長男(のんびり屋) 赤いスカーフを首に巻いた、ふっくらした体型のピンクの子豚 次男(おちょうしもの) 黄色い麦わら帽子をかぶった、そばかすのあるピンクの子豚 三男(はたらきもの) 青いオーバーオールを着た、丸い眼鏡をかけたピンクの子豚 オオカミ 二本足で人のように立ち、子豚たちと同じ丸みのある絵本タッチでデフォルメされた、灰色の毛並みに黄色い目、黒いマントを羽織ったオオカミ。体格は子豚より頭ひとつ分だけ背が高い程度で、毎カット同じ中肉中背 共通の絵柄 温かみのある水彩絵本風、やわらかい輪郭線、パステル調の色彩 4-2. Step2:カット割りを JSON で生成する(Gemini) 次に、構成が固まったら、それを 後工程がそのまま使える形 に分解します。ここが本ワークフローの心臓部です。 入力プロンプト 上記の構成を、以下のJSON形式で13カットに分解してください。 各カットには、 ・絵コンテ用の視覚描写 ・画像生成用プロンプト(Nano Banana向け:被写体・背景・カメラアングル・ 光の質感を含む。登場するキャラクターは、必ず前述のキャラクター設定の 文言をそのまま使って描写すること) ・ナレーション文(Gemini TTS向け:8秒で読み切れる35文字前後) ・動画化用のモーション指示(Veo向け:カメラワークや動きの説明。 被写体や背景の描写は含めず、「どう動くか」だけを書くこと) を含めてください。 { "style": "全カット共通の絵柄指定", "characters": { "elder": "...", "middle": "...", "youngest": "...", "wolf": "..." }, "cuts": [ { "cut_no": 1, "scene": "...", "image_prompt": "...", "narration": "...", "motion_prompt": "...", "duration_sec": 8 }, ... (cut_no 2 〜 13) ], "closing_message": "..." } なぜ JSON にするのか そこで、JSON にする理由を3つ挙げます。 まず 後工程にそのまま渡せる ― image_prompt を Nano Banana に、narration を TTS に、motion_prompt を Veo に。コピペ先が明確です 次に 抜け漏れがなくなる ― 13カットもあると「カット9のナレーションを作り忘れた」が普通に起きます。 スキーマが埋まっているかを見るだけで確認できるのは、想像以上に効きます そして 自動化できる ― エンジニアであれば、この JSON をそのままパイプラインの入力にできます。1つの JSON から画像13枚・音声13本・動画13本が生成されるスクリプトが組めます 絵柄とキャラ設定は、カットの外に置く 💡 style と characters をカットの外に出しているのがポイント 具体的には、絵柄とキャラ設定を 各カットの中ではなく、JSON のトップレベルに置いています。 こうしておくと、「絵柄を油彩風に変えたい」というときに、style の1行を書き換えて13カット分のプロンプトを再組み立てするだけ で済みます。 逆に、カットごとにベタ書きしていると13箇所を手で直すことになり、必ずどこかを直し忘れます。 💡 エンジニア向け:ここがパイプライン化の分岐点 つまり、この JSON があれば、あとは各 API を順番に叩くだけです。 for cut in cuts: prompt = f"{style} {characters に該当する説明} {cut.image_prompt}" image = nanobanana.generate(prompt) → cut{n}.png audio = gemini_tts.synthesize(cut.narration) → narration{n}.wav video = veo.image_to_video(image, cut.motion_prompt) → cut{n}.mp4 ffmpeg で結合 ただし Veo の生成は長時間実行オペレーション(非同期)です。13カットを直列で回すと、単純に13倍待つことになります。 したがって必ず 並列でリクエストして一括ポーリング する設計にしてください。ここを並列化するだけで、待ち時間が実質1カット分まで圧縮できます(クォータ上限には注意)。 4-3.【最重要】キャラクターの一貫性をどう守るか ここで、Step3 に入る前に 長尺の物語動画で必ずぶつかる問題 を先に扱います。商品CMなら「商品が同じに見えればいい」で済みますが、物語はそうはいきません。 もしカット1の子豚と、カット13の子豚が別人に見えたら、作品として成立しません。 というのも、13カットそれぞれを独立に生成すれば、まず間違いなく顔も体型も服も変わります。 そこで対策を3層で講じます。 対策① キャラクター描写を「固定文」にして機械的に貼り付ける まず、いちばん効くのに、いちばん見落とされる基本からです。 ❌ 悪い例(カットごとに言葉が揺れる) カット プロンプト内の書き方 2 「赤いスカーフの子豚が…」 7 「一番目の子豚が…」 13 「ピンクの豚が三匹…」 生成AIから見れば、これは全部「別の指示」です ✅ 良い例(毎回まったく同じ文字列) カット プロンプト内の書き方 2 「赤いスカーフを首に巻いた、ふっくらした体型のピンクの子豚が…」 7 「赤いスカーフを首に巻いた、ふっくらした体型のピンクの子豚が…」 13 「赤いスカーフを首に巻いた、ふっくらした体型のピンクの子豚が…」 一字一句そろえることに意味があります 実は、4-1 でキャラクター設定を確定させ、4-2 の JSON で characters をトップレベルに置いたのは、この「固定文の貼り付け」を機械的にやるため です。というのも、人間が毎回書き直すと必ず言葉が揺れるからです。 対策② 画像プロンプトを「共通ブロック+可変ブロック」で組み立てる そこで、13カット分の画像プロンプトを次の構造で組み立てます。 【共通ブロック】13カットすべてで完全に同一 絵柄:温かみのある水彩絵本風、やわらかい輪郭線、パステル調の色彩 登場キャラの固定描写(そのカットに出る分だけ) 【可変ブロック】カットごとに変える 場所/時間帯 キャラの動作・表情 カメラアングル 光の当たり方 このようにしておくと、変わるのは「変えたいところ」だけ になります。つまり、絵柄とキャラは1文字も動きません。 対策③ 参照画像で固定する(ツール側の機能を使う) 対策①②はテキスト側の工夫ですが、それでもブレる場合は、ツール側の機能を使って 参照画像でキャラクターを固定 します。 手段 内容 使いどころ Nano Banana の参照画像 先に作った「キャラクター立ち絵」を参照として渡し、同じキャラで別シーンを描かせる Step3 の画像生成段階で固定したいとき Veo の Reference-to-video (Subject) 被写体の参照画像を読み込ませ、そのアイデンティティを維持した動画を生成する Step5 で、どうしても動画化の時点で崩れるとき まず「キャラクター表」を1枚作る 💡 実務的にお勧めしたい手順 まず 「キャラクター表」を1枚作ってしまう のが、いちばん確実です。3匹の子豚とオオカミを横並びにした1枚をまず生成し、これを全カットの参照画像として使い回します。アニメ制作の「設定資料」とまったく同じ考え方です。 なお、この1枚に納得いくまで時間をかける価値があります。ここが決まれば、残り12カットは驚くほど安定します。 ⚠️ 完璧は諦める、という判断も必要です ただし正直に言うと、現時点の生成AIで「13カット完全に同一のキャラクター」を実現するのは、かなり難しい です。どれだけ対策しても、微妙な差は残ります。 そこで実務的には、「同じキャラだと視聴者が認識できるレベル」を合格ラインに置く ことをお勧めします。今回であれば、赤いスカーフ/黄色い帽子/青いオーバーオール という「一目で区別できる記号」を与えているのが効いています。細部の作画が多少ブレても、記号さえ守られていれば、視聴者は同一人物として認識してくれます。 このように、キャラクター設定の段階で「分かりやすい記号」を与えておく ― これは生成AI活用における、かなり実践的なコツだと感じています。 4-4. Step3:絵コンテ画像を生成する(Nano Banana) さて、準備が整ったので13枚を生成します。ここでは代表的な3カットの プロンプト全文 を載せます。 カット1:旅立ち 画像生成プロンプト(Nano Banana) 【共通】温かみのある水彩絵本風、やわらかい輪郭線、パステル調の色彩。 【共通】赤いスカーフを首に巻いた、ふっくらした体型のピンクの子豚、 黄色い麦わら帽子をかぶった、そばかすのあるピンクの子豚、 青いオーバーオールを着た、丸い眼鏡をかけたピンクの子豚。 【可変】緑の丘に建つ小さな家の前で、母豚に見送られながら、 三匹がそれぞれ荷物を持って並んで立っている。朝のやわらかな光。 なだらかな緑の丘と朝の空が画面いっぱいに広がる、少し引いた構図。 カット6:オオカミ登場 画像生成プロンプト(Nano Banana) 【共通】温かみのある水彩絵本風、やわらかい輪郭線、パステル調の色彩。 【共通】二本足で人のように立ち、子豚たちと同じ丸みのある絵本タッチでデフォルメされた、 灰色の毛並みに黄色い目、黒いマントを羽織ったオオカミ。体格は子豚より 頭ひとつ分だけ背が高い程度で、毎カット同じ中肉中背。 【可変】暗い森の木立の間から、こちらをじっと見つめている。 夕暮れの青みがかった影、木々のシルエット。 低い位置からの、少し見上げるアングル。 カット13:締め 画像生成プロンプト(Nano Banana) 【共通】温かみのある水彩絵本風、やわらかい輪郭線、パステル調の色彩。 【共通】赤いスカーフを首に巻いた、ふっくらした体型のピンクの子豚、 黄色い麦わら帽子をかぶった、そばかすのあるピンクの子豚、 青いオーバーオールを着た、丸い眼鏡をかけたピンクの子豚。 【可変】朝の光の中、レンガの家の前で三匹が肩を組んで笑っている。 晴れた空、足元に小さな花。画面下部にテキストを載せる余白を 残した、引きの構図。 残り10カットの「可変ブロック」 ここでは、共通ブロックは上記とまったく同じものを使い、可変部分だけを差し替えます。 # 可変ブロック 2 小川のほとりの草地で、金色のわらを無造作に積み上げている。昼下がりの明るい日差し、散らばったわらの束 3 森のはずれで、木の板をトンカチで打ちつけて小屋を組み立てている。木漏れ日、足元に木材と道具 4 夕暮れの穏やかな光の中、レンガを積んで自分の家を建てている。建てかけの小さな一軒家で、戸口と窓枠の開口がすでに形になっている。横へ長く伸びる塀や城壁にはしない 5 わらの家の前で二匹が笛を吹いて踊り、その奥でもう一匹が黙々とレンガを積んでいる。楽しげな昼下がり 7 夜、大きく息を吸い込んだオオカミの前で、わらの家が渦を巻いて吹き飛んでいる。舞い上がるわら 8 夜、木の板がバラバラに弾け飛ぶ小屋から、二匹が転がるように逃げ出している。背後で息を吹きつけるオオカミ 9 月明かりの下、頑丈なレンガの家の窓から三匹が外をのぞいている。外では息を吹きかけるオオカミ、家はびくともしない 10 夜空に月。レンガの家の屋根によじ登り、煙突をのぞき込んでいる。下の窓から暖かな光が漏れる 11 煙突と暖炉の内部が見える断面図。オオカミが煙突の筒を滑り落ち、真下の焚き口では火にかけた大きな鍋が湯気を立てている 12 夜、屋根の煙突からオオカミが真上へ打ち上がり、おしりから湯気が噴き出している。下から三匹が見上げる 画像プロンプトで押さえるべき4要素 要素 カット9での該当箇所 被写体 三匹の子豚(固定描写)、オオカミ(固定描写) 背景 レンガの家、月明かり カメラアングル 窓から外をのぞく/家の外のオオカミが見える構図 光・質感 月明かり、水彩絵本風のやわらかい色彩 ⚠️ 13枚を並べて確認してから、動画化に進む そこで動画化する前に、必ず13枚を一覧で並べて見てください。 絵柄が浮いているカット、キャラが別人になっているカット、時間帯がおかしいカット(夜のはずが昼になっている等)は、この時点でほぼ確実に見つかります。 というのも、動画にしてから気づくと、やり直しのコストが桁違いになる からです。画像の作り直しは数秒・ほぼ無料ですが、動画の作り直しは数分・数百円かかります。この確認作業が、本ワークフローで最も費用対効果の高い5分 だと思ってください。 💡 カット13の「余白を残した構図」に注目 なお、締めのメッセージやタイトルを後から載せる前提で、あらかじめ画面下部を空けた構図 を指示しています。前回記事でも触れたとおり、映像内の日本語テロップは崩れやすい ので、テロップは編集で載せるのが確実です。そのための「置き場所」を、絵コンテの段階で確保しておくわけです。 4-5. Step4:ナレーションを生成する(Gemini TTS) 次に、Step2 の narration を、カットごとに音声化します。13カット分のナレーションは次のとおりです。 # ナレーション文 文字数 1 むかしむかし、三匹の子豚が、母さんのもとを離れて旅に出ることになりました。 35 2 一番目の子豚は、早く遊びたくて、あっという間にわらの家を建てました。 32 3 二番目の子豚は、木の枝を集めて、少しだけ丈夫な家を建てました。 30 4 三番目の子豚だけは、何日もかけて、レンガの家をこつこつと積み上げます。 33 5 「そんなに急がなくても」。兄さん豚たちは、笑いながら遊んでいます。 31 6 けれど森の奥では、おなかをすかせたオオカミが、じっと様子をうかがっていました。 37 7 「フーッ!」ひと吹きで、わらの家は跡形もなく吹き飛んでしまいました。 32 8 二番目の木の家も、オオカミの息の前では、ひとたまりもありません。 31 9 三匹が逃げ込んだのは、レンガの家。どれだけ吹いても、びくともしません。 33 10 あきらめきれないオオカミは、屋根の煙突から忍び込もうとしました。 31 11 煙突をするりと降りたその先は、ぐつぐつ煮える大きなお鍋の中でした。 33 12 「あつっ!」おしりを焼かれたオオカミは、煙突から飛び出して逃げていきました。 38 13 こつこつ積み上げたものは、きっとあなたを守ってくれる。おしまい。 31 設定のポイント 項目 設定 理由 声質 落ち着いた、やさしい語りの声 読み聞かせのトーンに合わせる 全カットで同じ声を指定 必須 13カットの途中で語り手が変わったら台無しです スタイル指示 「絵本を読み聞かせるように、やさしくゆっくり読んでください」 物語らしい間と抑揚が出る カット6・7だけトーンを変える 「少し声を落として、緊張感を持たせて」 山場で語り口が変わると、一気に作品らしくなります ファイル名 narration1.wav 〜 narration13.wav Step6 の ffmpeg 処理をループで回すため 尺に収まっているかを確認する ⚠️ 「8秒で読み切れるか」を必ず確認する まず、生成した wav の再生時間をチェックしてください。8秒を超えていると、映像より音声が長くなり、結合時に語尾が切れます。逆に 短すぎる場合も問題 で、そのままだと映像のほうが削られます(対策は 4-8 の -af apad)。 そして、超えていた場合の対処は2つです。① ナレーション文を短くする(推奨)、② 読み上げ速度を上げる(不自然になりやすいので最後の手段)です。 なお上の13本は 30〜37文字 に収めています。日本語ナレーションは「1秒あたり4〜5文字」が目安 です。読み聞かせ調はゆっくりなので、8秒なら35文字前後が上限 と考えておくと、尺の設計がしやすくなります。 💡 13本まとめて長さを確認するコマンド for i in $(seq 1 13); do printf "narration%s.wav : " "$i" ffprobe -v error -show_entries format=duration -of csv=p=0 "narration${i}.wav" done このように、8秒を超えているものが一目で分かります。13本を1本ずつ再生して確認するのは時間の無駄です。 💡 ファイル名の規則を最初に決めておく なお、地味ですが、これが効きます。cut1.mp4 / narration1.wav のように 番号で対応づく命名 にしておけば、Step6 が for i in $(seq 1 13) のループ1行で済みます。今回のように13カットあると、この差は決定的です。 4-6. Step5:各カットを動画化する(Veo) さて、いよいよ Veo の出番です。Step3 の絵コンテ画像を入力、Step2 の motion_prompt を指示 として、Image-to-video で 8秒クリップを13本生成します。 13カットのモーション指示 # モーション指示(Veo) 1 並んで立つ三匹を正面から捉え、カメラがゆっくりと後ろに引いていき、丘の風景全体を見せる 2 わらを積む手元のクローズアップから、カメラがゆっくりティルトアップして、完成した家の全体を映す 3 板を打ちつける様子を横から捉え、カメラが右にゆっくりパンして、出来上がった小屋を見せる 4 レンガを積む手元に寄ったところから、カメラがゆっくり引いて、半分完成した壁と夕暮れの空を映す 5 踊る二匹をゆるやかな横移動で追い、最後に奥で作業する一匹へピントが移る 6 暗い木立をゆっくりドリーインし、光る目に寄っていく、静かで不穏な動き 7 息を吸う横顔から、渦を巻いて舞い上がる家へとカメラが素早くパンする、勢いのある動き 8 板が弾け飛ぶ瞬間をスローモーションで捉え、逃げる二匹の背中をカメラが追いかける 9 家の外でもがく姿から、カメラがゆっくり上に移動して、窓の中をのぞき込む 10 屋根を登る姿を下から見上げるアングルで捉え、煙突をのぞき込む瞬間までゆっくりティルトアップする 11 煙突の中を滑り落ちてくる動きをそのまま捉え、鍋に落ちる瞬間までカメラは固定 12 煙突から真上へ打ち上がったオオカミが、そのまま弧を描いて夜空の遠くへ飛び去っていく。カメラは固定 13 笑い合う三匹を正面から捉え、カメラがゆっくり引いて、家と空を含めたロングショットに落ち着く 原則① 「何が映るか」ではなく「どう動くか」だけを書く ここで、上の表をよく見てください。キャラクターの見た目を一切書いていません。 「赤いスカーフの子豚が」ではなく「踊る二匹を」としか書いていないのです。 というのも、被写体・背景・色味は すでに入力画像が持っている からです。ここで改めて「水彩絵本風の」などと書くと、Veo が画像を無視して描き直そうとすることがあります。したがって Veo への指示は動きに限定します。 これが Image-to-video の鉄則であり、キャラクターの一貫性を守るうえでも重要 です。 原則② カメラワークを映像用語で指定する 用語 意味 今回の使用カット ドリーイン / ドリーアウト カメラ自体が前後に動く 6(オオカミに寄る) ズームイン / ズームアウト レンズの画角が変わる 1、12(引いて全体を見せる) パン / ティルト カメラが左右/上下に振れる 2、3、7、10 スローモーション 時間を引き伸ばす 8(板が弾け飛ぶ瞬間) このように、カメラワークを明示すると再現性が大きく上がります。 「かっこよく動かして」では毎回違う結果になりますが、「ゆっくりドリーインし」と書けば、ほぼ狙いどおりに動きます。 原則③ 1カット=1アクション 逆に、8秒へ複数の動きを詰め込むと破綻します。実際、上の13カットは、いずれも 動きが1つだけ です。 たとえば「寄って、回り込んで、最後に引く」のような欲張った指示は、8秒では必ず崩れます。 したがって動きを増やしたければ、カットを増やしてください。 むしろ、それが本記事の趣旨でもあります。 💡 カメラワークで物語のリズムを作る ためしに、13カットの表を動きの速さで見返してみてください。カット1〜5(平和なパート)はすべて「ゆっくり」、カット7〜8(襲撃パート)だけ「素早く」「勢いのある」、カット9以降は再び「ゆっくり」 に戻しています。 これは意図的です。カメラの速度そのものが、物語の緊張感を作ります。 全カットを同じテンポで動かすと、1分44秒はかなり退屈になります。長尺になるほど、この「緩急」の設計が効いてきます。 Veo 側の設定 パラメータ 設定値 理由 タスク Image-to-video 絵コンテ画像を起点にする 長さ 8秒 上限いっぱい アスペクト比 16:9 全カットで統一必須。 混在すると結合時に再エンコードが必要になります 解像度 1080p 全カットで統一必須。 同上 音声生成 OFF ナレーションは Step4 で別途作成済み。OFF にすればコストも下がる 出力ファイル名 cut1.mp4 〜 cut13.mp4 Step6 のループ処理のため ⚠️ アスペクト比・解像度・フレームレートは、全カットで必ず揃える なぜなら、ここが揃っていないと Step6 の高速な結合方法(-c copy)が使えず、13カット全部を再エンコードする羽目になります。 時間もかかり、画質も落ちます。 そのため 最初のカットを生成する前に設定を確定させ、13カットすべて同じ設定で回してください。 カット数が多いほど、この確認を怠ったときの被害が大きくなります。 4-7. コスト感 ― 13カットでいくらかかるか ところで、長尺化で必ず聞かれるのが「で、いくら?」です。コストはカット数に比例するので、ここは先に見積もっておくべきポイントになります。 そこで、前回記事に載せた目安(Veo 3.1 標準:8秒あたり約 $3.2 / Fast:約 $0.8〜1.2 / Lite:約 $0.24〜0.4)をもとに試算します。 進め方 Veo の生成本数 概算 ❌ いきなり標準モデルで、13カット×5回試行 65本 約 $208(3万2千円前後) ✅ 絵を詰めてから、Lite で構図確認 → 標準で仕上げ Lite 26本 + 標準 13本 約 $52(8千円前後) ⚠️ 上記はあくまで目安です。料金は改定されるため、必ず 公式の料金ページ で最新値をご確認ください。 差を生むのは、モデルの値段ではなく試行回数 ここで差を生んでいるのは、モデルの値段ではなく「試行回数」 です。具体的には、次の3点を守るだけで大きく変わります。 まず 絵の段階で構図を確定させる(Step3 の画像生成は動画より桁違いに安い) 次に モーション指示の当たりを Lite で取る(動きが意図どおりか確認するだけなら Lite で十分) そして 納品品質は最後に1回だけ標準モデルで出す つまり、前回記事で書いた 「試行錯誤は Lite、仕上げは標準」 という原則が、カット数が増えるほど効いてくるということです。13カットなら数万円の差ですが、3分(23カット)なら差はさらに倍になります。 💡 音声生成 OFF も地味に効きます 実は今回、全カットで generateAudio を OFF にしています。ナレーションは TTS で作るので必要ないわけですが、OFF にすることで生成コスト自体も下がります。 13カット×複数回の試行を考えると、無視できない差になります。 4-8. Step6:ffmpeg で結合する さて、素材が揃いました。あとは組み立てるだけです。 cut1.mp4 〜 cut13.mp4 ← Veo で生成(映像のみ、各8秒) narration1.wav 〜 narration13.wav ← Gemini TTS で生成 bgm.mp3 ← 任意。BGM(後述) なお ここからは、カット数が13でも130でも、コマンドは1文字も変わりません。 つまり、ループの範囲を変えるだけです。 (a) 各カットに音声を合成する for i in $(seq 1 13); do ffmpeg -i cut$i.mp4 -i narration$i.wav \ -c:v copy -c:a aac -ar 48000 -af apad -shortest cut${i}_with_audio.mp4 done オプション 意味 -c:v copy 映像は再エンコードしない。 画質が落ちず、処理も一瞬で終わります -c:a aac -ar 48000 音声を AAC / 48kHz に変換(mp4 の標準的な音声仕様) -af apad ナレーションが8秒に満たない分を、無音で埋める。 これが最重要です(下記参照) -shortest 映像と音声のうち短い方で終了。apad で音声を実質無限長にしてあるため、結果として映像の8秒で終わります ⚠️ -shortest だけを使うと、映像が削られます ここは実際にハマったところです。-shortest は「短い方に合わせる」オプションなので、ナレーションが8秒より短いと、映像のほうが音声の長さまで切り詰められます。 実際に3カットで試したところ、ナレーションが 7.44秒 / 7.29秒 / 6.04秒 だったため、8秒×3=24秒のはずが 20.89秒 になり、カメラの動きが終わる前に次のカットへ飛んでしまいました。特に締めのカットは、引き切る前に切れてしまいます。 そこで対策が -af apad です。音声の後ろに無音を足して映像より長くしておけば、-shortest は映像の8秒で止まります。 ナレーションが8秒ぴったりになることはないので、このオプションは実質必須 だと考えてください。 (b) 結合リストを作る 13行を手で書くのは面倒なので、これもループで生成します。 for i in $(seq 1 13); do echo "file 'cut${i}_with_audio.mp4'" done > list.txt なお、この list.txt の順番が、そのままカットの並び順になります。 したがって構成を入れ替えたくなったら、ここの行を並べ替えるだけで済みます。 生成し直しは一切不要です。3-2 で書いた「Step6 のコマンドのみ・コスト ゼロ」とは、このことです。 (c) 13カットを1本に結合する ffmpeg -f concat -safe 0 -i list.txt -c copy pigs_full.mp4 -c copy は 再エンコードなしで連結 する指定です。一瞬で終わり、画質劣化もありません。ただし、これが使えるのは全カットのコーデック・解像度・フレームレートが完全に一致している場合だけ です(だから 4-6 で設定を揃えました)。 そして、この時点で 1分44秒の動画が出来上がります。 (d) 音量を統一する ffmpeg -i pigs_full.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 \ pigs_normalized.mp4 ところが、カットごとに生成した音声は 微妙に音量がバラつきます。 4カットなら我慢できても、13カットもあると「カットが変わるたびに音量が上下する」のはかなり耳障り です。そこで loudnorm フィルタで全体のラウドネスを揃えておくと、一気に「作品っぽく」なります。 なお I=-16 は配信プラットフォームでよく使われるターゲット値です。ただし納品先に規定がある場合は、その値に合わせて調整してください。 (e) BGM を重ねる 加えて、1分44秒を無音のナレーションだけで通すと、かなり寂しく感じます。 30秒程度なら成立しますが、長尺では BGM の有無が体感品質を大きく左右します。 ffmpeg -i pigs_normalized.mp4 -stream_loop -1 -i bgm.mp3 \ -filter_complex "[1:a]volume=0.12[bg];[0:a][bg]amix=inputs=2:duration=first[a]" \ -map 0:v -map "[a]" -c:v copy -c:a aac three_little_pigs_final.mp4 オプション 意味 -stream_loop -1 BGM が動画より短い場合、自動でループ再生 させる volume=0.12 BGM を十分に小さくする。 ナレーションを邪魔しないことが最優先です amix=…:duration=first 1つ目の入力(=動画の音声)の長さで終了。BGM が余っても切られます ⚠️ BGM の権利には注意してください なお、物語の題材(三匹の子豚)はパブリックドメインですが、BGM は別問題 です。フリー音源を使う場合もライセンス条件(クレジット表記の要否、商用利用の可否)を必ず確認してください。 エラーになったときの対処 症状 原因 対処 結合後、途中から映像が乱れる/音がずれる カットごとにコーデック・解像度・fps が違う -c copy をやめ、filter_complex で再エンコードして結合する Unsafe file name エラー パスの扱い -safe 0 が付いているか確認(上記コマンドには入っています) 音声が途中で切れる ナレーションが映像より長い ナレーション文を短くする 映像が8秒より短くなる/動きが途中で切れる ナレーションが映像より短く、-shortest が映像を削っている -af apad を付ける(上記コマンドには入っています) BGM が途中で消える BGM が動画より短い -stream_loop -1 が付いているか確認 発展:カットの切り替わりを滑らかにする なお、「ブツ切り感」が気になる場合は、クロスフェード を入れられます。 # 映像のクロスフェード(xfade)/音声のクロスフェード(acrossfade) # 例:cut1 と cut2 を、7秒地点から1秒かけてクロスフェード ffmpeg -i cut1_with_audio.mp4 -i cut2_with_audio.mp4 \ -filter_complex \ "[0:v][1:v]xfade=transition=fade:duration=1:offset=7[v]; \ [0:a][1:a]acrossfade=d=1[a]" \ -map "[v]" -map "[a]" cut1_2_xfade.mp4 ただし、xfade は 再エンコードが発生する ため処理時間がかかります。13カット全部に入れると、それなりの時間を覚悟することになります。 また、全部に入れる必要もありません。むしろ 物語の切れ目(今回ならカット5→6、カット11→12)だけにフェードを入れ、他はカットで切る ほうが、メリハリが出て見やすくなります。したがって、まずは -c copy で素直につないでみて、それから判断することをお勧めします。 💡 本当に繋ぎ目を自然にしたいなら、素材側で解決する ここで、2-2 で触れた 「前カットの終点画像=次カットの始点画像」 というテクニックが、ここで効いてきます。編集でごまかすのではなく、絵の段階で連続させておくのです。 クロスフェードよりも自然で、しかも -c copy の速さを維持できます。 たとえば今回でいえば、カット7(わらの家が吹き飛ぶ)とカット8(木の家が吹き飛ぶ)のような 連続する場面 で特に有効です。 4-9. 完成 ― そして、この手順の本当の価値 こうして、1分44秒の「三匹の子豚」が完成しました。冒頭でお見せしたものです。 https://sight-r.sts-inc.co.jp/wp/wp-content/uploads/2026/09/three_little_pigs_full.mp4本記事の手順で作った「三匹の子豚」。8秒 × 13カット = 1分44秒。 絵は Nano Banana、語りは Gemini TTS、動きは Veo、結合は ffmpeg が担当しています。 全体を振り返ると、次のような流れになります。 Gemini 物語構成・ナレーション原稿・キャラクター設定 → カット割り(JSON) ↓ Nano Banana cut1〜13.png Gemini TTS narration1〜13.wav JSON motion_prompt ×13 ↓ Veo(Image-to-video) cut1〜13.mp4 ↓ ffmpeg 音声合成 → 結合 → 音量統一 → BGM ↓ 1分44秒の完成動画 尺は「変数」になる そして重要なのは、この手順が「1分44秒」で止まらないこと です。 さらに、カットを23本に増やせば約3分、45本に増やせば6分になります。やることは Step2 の JSON で cuts の数を増やすだけ です。しかも Step3〜5 はループが回る回数が増えるだけで、作業内容は1ミリも変わりません。Step6 に至っては seq 1 13 を seq 1 23 に書き換えるだけです。 つまり 一度この工程を組んでしまえば、尺は変数になります。 そして、これが Veo の「8秒の壁」に対する本質的な回答です。 あとからカットを足せる、ということ 💡 実際に、あとから1カット足してみました この動画、最初は12カット・1分36秒で完成させていました。ところが見返してみると、「オオカミが煙突から侵入して火傷する」という山場が丸ごと抜けている ことに気づきます。物語としては致命的な欠落でした。 ところが、やったことは3つだけです。① Step2 の JSON にカットを1つ足し、隣のカットの指示を1本だけ書き直す ② その2カットの画像・音声・動画を生成し直す ③ list.txt を更新して結合し直す。 しかも所要時間はおよそ15分、追加費用は100円ほどでした。残り11カットには一切触れていません。 尺は1分36秒から1分44秒になりました。 つまり本文で「尺は変数になる」と書きましたが、書いた本人が後から実際に助けられた格好です。Veo 単体で作っていたら、こうはいきませんでした。 カット数が増えて本当にしんどくなるのは、どこか 💡 カット数が増えたときに、本当にしんどくなるのはどこか 実際に13カットを作ってみて分かったのは、しんどいのは Veo の生成ではなく、キャラクターの一貫性の維持 だということでした。 生成の回数が増えるのは、ループが回るだけなので大した問題ではありません。一方、カットが増えるほど「どこかで顔が変わる」確率は上がります。 3分(23カット)を作るなら、4-3 で書いた対策 ―― 特に 「キャラクター表を1枚先に作る」 ―― は、もはや必須になると感じています。 したがって長尺化を計画するなら、尺の見積もりより先に、キャラクター設計に時間をかけてください。 5. まとめ 最後に、長くなったので要点を整理します。 Veo 単体の限界 まず 1回の生成は最大8秒。 Video extension で延長しても実用上は16秒程度が限界 さらに延長は 画質劣化・被写体のドリフト が起きるうえ、カット割り(シーンチェンジ)ができない したがって 「Veo だけで物語動画を1本作る」は実現できません。 最初に期待値を調整すること 長尺化の基本設計 「1分44秒の動画を作る」のではなく、「8秒のカットを13本作って繋ぐ」 また8秒は 1本の上限ではなく、1カットの上限。この読み替えで制約は消える カット数 = 目標の尺 ÷ 8秒。 ただし数合わせではなく、物語の場面の切れ目と一致させる つまり カットを増やせば、尺は理論上無限に伸ばせる 役割分担 工程 ツール 担当 構成・カット割り Gemini(Flash) 設計図を作る。JSON 化が後工程の効率を決める 絵コンテ画像 Nano Banana 絵を固定する。安く速く試行錯誤できるのが最大の利点 ナレーション Gemini TTS 日本語音声。Veo の音声生成は OFF にする 動画化 Veo 絵を動かす。指示は「動き」だけに限定する 結合 ffmpeg 組み立てる。設定を揃えておけば -c copy で一瞬 併用の3つの恩恵 まず 尺の上限が実質なくなる ― カット数 = 尺 次に 工程ごとにやり直せる ― ナレーションだけ、絵だけ、1カットだけを差し替えられます。Veo がマルチターン非対応であることへの、実務的な回答。カット数が多いほど効く そして 各工程の品質が上がる ― 専門モデルに任せるほうが、1モデルで全部やるより良い結果になります。しかも安い 実践の要点(ハマりどころ) 後工程の制約を、最初のプロンプトに埋め込む ― Step1 で「13カット × 8秒」を指定しないと、後で必ず破綻します また カット割りは JSON で出力させる ― 抜け漏れ防止と、自動化への入口。style と characters はカットの外に置く さらに キャラクター描写は「固定文」を機械的に貼り付ける ― 言葉が揺れた時点で、生成AIには別の指示に見えます キャラクターに「一目で分かる記号」を与える ― 赤いスカーフ/黄色い帽子/青いオーバーオール。細部がブレても、記号さえ守られれば同一人物として認識されます 13枚の絵コンテを並べて確認してから動画化する ― 本ワークフローで最も費用対効果の高い5分 なお アスペクト比・解像度・fps を全カットで揃える ― 揃っていないと -c copy が使えず再エンコードになる ファイル名を番号で対応づける ― cut1.mp4 / narration1.wav。ループ処理が1行で済みます 音声合成には -af apad を必ず付ける ― これが無いと、ナレーションが8秒に満たないカットで 映像のほうが削られます。実測で24秒が20.89秒になりました 音量は loudnorm で統一し、BGM を薄く重ねる ― 長尺ほど、音の仕上げが体感品質を左右します 最後に 試行錯誤は Lite、仕上げは標準 ― カット数が増えるほど、この差が金額に効いてきます 最後に 最後に。前回の記事を書き終えた時点では、正直「Veo は8秒しか作れないから、用途は限られるな」と思っていました。 ところが実際に手を動かしてみて、考えが変わりました。8秒という制約は、Veo に全部やらせようとするから壁に見えるだけ でした。映像制作がもともとカットの集合体である以上、8秒のカットを高品質に作れることは、むしろ実際の制作工程に素直に合っている とすら言えます。 さらに、工程を分けたことで得られたものは「長尺化」だけではありませんでした。直したいところだけを直せる という、Veo 単体では絶対に手に入らない自由度がついてきました。これが一番大きかったと感じています。 つまり、生成AIを業務で使うとき、「1つの万能モデルに全部やらせる」のではなく、「得意なモデルに分担させて、パイプラインとして組む」 ―― この考え方は、動画に限らず応用が効くはずです。 そのため、この記事が「8秒じゃ足りない」で止まっている方の突破口になれば幸いです。 関連コンテンツ 📖 あわせて読みたい 【商品動画生成】Veo3が切り拓くアパレルECの商品動画の新時代 はじめての動画生成AIモデル Veo ~「画像から動画を作る」プロンプトの基本~ はじめての動画生成AIモデル Veo ~運用面でより使いやすい商品動画の作り方~ EC商品の魅力を最大化する ― Gemini 2.5 Flash Image(Nano Banana) が切り拓くアパレルビジュアルの新時代 データサイエンスエージェントにポッドキャスト作成機能を持たせてみた!(Gemini の音声生成を活用) 参考リンク Veo 3.1 モデルドキュメント(Google Cloud) Veo on Vertex AI で生成した動画を拡張する(日本語ドキュメント) Ultimate Prompting Guide for Veo 3.1(Google Cloud Blog) Vertex AI Media Studio(コンソール) 生成AI の料金(Google Cloud) ffmpeg 公式ドキュメント(Concatenate) ffmpeg 公式ドキュメント(loudnorm フィルタ) 頂きましたご意見につきましては、今後のより良い商品開発・サービス改善に活かしていきたいと考えております。 面白かった 面白くなかった 興味深かった 興味深くなかった 使ってみたい Author Tera 2024年4月に新卒入社、理系出身でAIエージェントやデータ分析の業務を行っています。趣味はテニスでスクールにも通っています。 Google Cloud Vertex AI 生成AI(Generative AI) 2026年9月25日 【応用編】Veoを使った長尺動画作成方法 Category Google Cloud 前の記事を読む 【2026年9月版】Antigravity活用術~Hook完全攻略!ライフサイクルイベントによる自動ガードレールと品質統制~ 次の記事を読む GA4×BigQuery活用で苦労したポイント Recommendation オススメ記事 2023年9月5日 Google Cloud 【Google Cloud】Looker Studio × Looker Studio Pro × Looker を徹底比較!機能・選び方を解説 2023年8月24日 Google Cloud 【Google Cloud】Migrate for Anthos and GKEでVMを移行してみた(1:概要編) 2022年10月10日 Google Cloud 【Google Cloud】AlloyDB と Cloud SQL を徹底比較してみた!!(第1回:AlloyDB の概要、性能検証編) GEN-STEP Gemini Enterprise 導入パッケージ 生成AI導入支援サービス Google Cloud 資料ダウンロード 新着記事 2026年9月25日 Google Cloud GA4×BigQuery活用で苦労したポイント 2026年9月25日 Google Cloud 【応用編】Veoを使った長尺動画作成方法 2026年9月24日 Google Cloud 【2026年9月版】Antigravity活用術~Hook完全攻略!ライフサイクルイベントによる自動ガードレールと品質統制~ HOME Google Cloud 【応用編】Veoを使った長尺動画作成方法