Veo 3.1 Extendの使い方:Gemini API実装、制約、品質管理【2026年9月版】

person holding camera with red lights on lens
Photo by Lisa Fotios on Pexels.com

Veo 3.1のExtendは、Veoで作った動画の末尾を参照し、その続きを7秒ずつ生成する機能です。

Gemini APIでは最大20回まで連続して延長でき、8秒の元動画なら最長148秒の一つの動画にできます。

ただし、Gemini API、Google Cloudの現行プラットフォーム、Flowでは、入力できる動画や上限が同じではありません。

この記事では2026年9月9日に確認した公式情報を基に、Gemini APIでの実装、連続性を保つ指示の組み立て方、本番運用の確認項目を整理します。

Veo 3.1 Extendでできること

Extendは、別々に作った短い動画を編集ソフトで連結する処理とは異なります。

直前の動画の最後の1秒(24フレーム)を基に次の動きを生成し、入力動画と追加部分を結合した一つの動画を返します。

たとえば、人物が廊下を歩く8秒の動画に「ドアの前で立ち止まり、振り返る」と指定すれば、その流れを受けた7秒を追加できます。

Extendが向くのは、同じショットを長く見せたい場面、動きを少しずつ展開したい場面、短い試作から尺を伸ばしたい場面です。

場面、衣装、カメラ位置が大きく変わる構成では、Extendだけに任せず、カットを分けて編集する方が管理しやすくなります。

利用経路ごとに異なる仕様

「Veo 3.1で延長できる」という説明だけでは、実装条件を判断できません。

利用する経路を決めてから、その経路の入力条件とモデルIDを確認します。

2026年9月9日に確認した動画延長の主な違い
利用経路 主な入力条件 延長結果 向いている用途
Gemini API 直前のVeo生成結果、720p、16:9または9:16、141秒以下 1回で7秒追加。最大20回、合計148秒まで コードからの試作、連続生成
Google Cloudの現行プラットフォーム MP4、1秒から30秒、24fps、16:9または9:16。対応解像度は720p、1080p、4K 1回で7秒追加。Veoでは合計37秒まで Cloud Storage、IAM、監査を含む運用
Flow Flow上のクリップと画面操作 元の動作を継ぐ長いショットを作成。音声にも対応 映像を見ながらの試作と編集

Gemini APIの上限と入力条件は、Google AI for DevelopersのVeo 3.1ガイドに明記されています。

同ガイドでは、ExtendはVeo 3.1とVeo 3.1 Fastに対応し、Veo 3.1 Liteには対応しないと案内されています。

Google Cloud側は、旧Vertex AIの延長ガイドURLが現在、Gemini Enterprise Agent Platformの動画延長ガイドへ案内されます。

Google Cloud側のモデル一覧には veo-3.1-generate-001veo-3.1-fast-generate-001 が掲載され、コンソールの操作場所は「Agent Platform > Media Studio」です。

したがって、Gemini APIの「最大20回」という条件をGoogle Cloudの画面操作やAPIへそのまま当てはめることはできません。

実装前に確認する5項目

  1. 利用経路:Gemini API、Google Cloud、Flowのどれを使うかを先に決めます。
  2. 入力動画の由来:Gemini APIでは、過去にVeoで生成した動画オブジェクトが必要です。
  3. 保存期限:Gemini API上の生成動画は2日間保存されます。延長に参照すると保存期間は再び2日間になりますが、必要な成果物は期限内にダウンロードします。
  4. 画面比率と解像度:Gemini APIのExtendは16:9または9:16の720pに限られます。
  5. モデルの状態:Veo 3.1とVeo 3.1 FastはGemini APIの公式仕様表でPreviewとされているため、モデルIDと制限を実行前に再確認します。

GoogleはGemini APIの動画生成全般ではGemini Omni Flashを既定の選択肢として案内し、Scene extensionや最終フレーム制御が必要な場合にVeo 3.1を使い分ける構成を示しています。

既存システムに組み込む場合は、モデル名をソースコードへ散在させず、設定値として一か所で管理すると更新に対応しやすくなります。

Gemini APIで1回延長するPython実装

次の例は、720pの元動画を作り、その生成結果を1回だけExtendしてローカルへ保存します。

SDKは google-genai を使い、認証情報はSDKが参照できる実行環境に設定しておきます。

pip install --upgrade google-genai
import time

from google import genai
from google.genai import types

MODEL = "veo-3.1-generate-preview"
client = genai.Client()


def wait_for_video(operation):
    while not operation.done:
        time.sleep(10)
        operation = client.operations.get(operation)

    if not operation.response:
        raise RuntimeError("動画生成が完了しませんでした")

    return operation.response.generated_videos[0].video


base_operation = client.models.generate_videos(
    model=MODEL,
    prompt=(
        "A wide shot of a reporter walking through a quiet newsroom. "
        "Cool daylight, slow camera movement, natural room ambience."
    ),
    config=types.GenerateVideosConfig(
        number_of_videos=1,
        aspect_ratio="16:9",
        resolution="720p",
    ),
)
base_video = wait_for_video(base_operation)

extend_operation = client.models.generate_videos(
    model=MODEL,
    video=base_video,
    prompt=(
        "Continue the same shot. The reporter stops beside the desk "
        "and looks toward the wall monitor. Keep the outfit, lighting, "
        "camera direction, and room ambience consistent."
    ),
    config=types.GenerateVideosConfig(
        number_of_videos=1,
        resolution="720p",
    ),
)
extended_video = wait_for_video(extend_operation)

client.files.download(
    file=extended_video,
    destination="veo3.1-extension.mp4",
)

video=base_video に渡すのは、ローカルの任意のMP4パスではなく、Veoの直前の生成結果です。

この違いを見落とすと、Gemini APIの入力条件を満たせません。

ダウンロード処理は現行SDKの destination 引数を使い、保存期限に備えて成果物を手元に残します。

7秒ずつ連続して延長する

複数回のExtendでは、一つ前の出力を次の入力へ渡します。

各回の指示を配列に分けると、どの7秒で何を変えたかを追跡できます。

def extend_chain(base_video, instructions):
    if len(instructions) > 20:
        raise ValueError("Gemini APIのExtendは最大20回です")

    current_video = base_video

    for instruction in instructions:
        operation = client.models.generate_videos(
            model=MODEL,
            video=current_video,
            prompt=instruction,
            config=types.GenerateVideosConfig(
                number_of_videos=1,
                resolution="720p",
            ),
        )
        current_video = wait_for_video(operation)

    return current_video


instructions = [
    (
        "Continue the same shot. The reporter approaches the desk. "
        "Keep the lighting, outfit, and walking speed consistent."
    ),
    (
        "Continue the same shot. She stops and looks at the wall monitor. "
        "Keep the camera height, shadow direction, and room tone consistent."
    ),
]

final_video = extend_chain(base_video, instructions)
client.files.download(
    file=final_video,
    destination="veo3.1-extension-chain.mp4",
)

本番処理では、配列の順番だけでなく、実行番号、入力動画の識別子、指示、処理状態、出力先、失敗理由を記録します。

途中で失敗したときに最後の成功地点から再開できれば、完了済みの延長を最初からやり直さずに済みます。

連続性を保つ指示の組み立て方

Extend用の指示には、次の7秒で変える要素と、変えない要素の両方を書きます。

  • 場面:場所、時間帯、背景の状態を示します。
  • 動作:人物や物体が次に何をするかを一つの流れで示します。
  • 撮影:カメラの向き、高さ、距離、移動を示します。
  • 固定要素:衣装、髪型、小物、光源、影の方向を示します。
  • :環境音、話者、声量、音の変化を示します。

一度の7秒に多くの展開を詰め込むと、どの指示が映像へ反映されなかったのかを判断しにくくなります。

人物が歩き、座り、資料を取り、話し始める場面なら、「机まで歩く」「座って資料を取る」「話し始める」のように複数回へ分けます。

[Scene]
quiet modern newsroom, cool daylight, natural room ambience

[Next action]
continue the same shot; the reporter slows down and stops beside the desk

[Keep]
same person, outfit, microphone, camera height, lens look, and shadow direction

[Avoid]
unreadable text, sudden camera jump, extra objects, abrupt audio change

音声をつなぐ場合は、入力動画の最後の1秒に声がなければ、音声を効果的に延長できないと公式ガイドが注意しています。

台詞をまたいで伸ばすより、文や発話の区切りを7秒単位の境界に合わせる方が確認しやすくなります。

品質確認は境界を中心に行う

完成動画を最初から最後まで見るだけでは、Extend固有の不具合を切り分けにくくなります。

各回の境界について、直前の1秒、追加された7秒、次の境界を順に確認します。

Extend後の確認表
確認対象 見るポイント 問題がある場合の対応
人物や物体 姿勢、向き、大きさ、衣装、小物が急に変わっていないか 固定する要素を減らさず、次の動作を一つに絞る
カメラ 画角、高さ、移動方向が不自然に跳んでいないか カメラ動作を短い一文で指定する
光と色 光源、影、露出、色温度が境界で変わっていないか 光源の位置と維持したい色調を書く
環境音、声、音量が突然切り替わっていないか 最後の1秒に必要な音を残し、仕上げのフェードは編集工程で調整する
文字やロゴ 読めない文字や意図しない形状が現れていないか 確定した字幕やロゴは後工程で重ねる

seed は結果の近さを改善するために使えますが、公式仕様は決定的な再現を保証していません。

同じseedなら必ず同じ映像になるという前提で、再試行や監査の仕組みを設計しないようにします。

約60秒のニュース映像へ伸ばす例

8秒の元動画を7回延長すると、合計は約57秒になります。

この尺を一つの長いショットとして成立させるには、各回に一つの目的を割り当てます。

  1. 元動画:キャスターが画面内へ入り、デスクへ歩き始める。
  2. 1回目:デスクへ近づき、歩く速度を落とす。
  3. 2回目:デスクの横で止まり、モニターへ視線を移す。
  4. 3回目:モニターを示し、カメラが少し寄る。
  5. 4回目:手を下ろし、正面へ視線を戻す。
  6. 5回目:画面の片側に字幕用の余白を作る。
  7. 6回目:短い発話へつなぎ、環境音を保つ。
  8. 7回目:動きを収め、編集しやすい静かな終端を作る。

この例では、字幕の文字そのものを生成映像へ描かせず、公開用の正確な字幕を編集工程で追加します。

縦長版と横長版の両方が必要なら、完成後の単純な切り抜きだけで判断せず、構図の余白と主要被写体の位置を元動画の段階で確認します。

Gemini API、Google Cloud、Flowの選び方

  • Gemini API:Veoで作った短い動画をコードから連続して延長し、処理手順を自社アプリへ組み込みたい場合に向きます。
  • Google Cloud:Cloud Storage、権限管理、監査、既存のクラウド運用と一体で扱いたい場合に検討します。
  • Flow:コードを書く前に画面上で構成を試し、映像と音を見ながら調整したい場合に向きます。

Flowの基本機能と制作の流れは、Google FlowとVeo 3.1の解説でも確認できます。

制作工程全体でのツール選定、権利、品質確認は、映像とデザイン制作に生成AIを活用する実務ガイドが補足になります。

本番運用でコード例に足すもの

短いサンプルコードはExtendの呼び出し方を示すものであり、そのまま本番運用の要件を満たすわけではありません。

  • ジョブIDを使った二重実行の防止
  • 入力、指示、モデルID、出力先、実行時刻の記録
  • タイムアウトと再試行回数の上限
  • 途中結果を失わないチェックポイント
  • 2日間の保存期限より前に行う永続保存
  • 人が境界、音声、権利、公開可否を確認する工程
  • モデルやSDKの変更を検知する定期的な動作確認

特に、失敗時に自動で同じ処理を繰り返すだけでは、二重生成や不要な費用を防げません。

「同じジョブは一度だけ完了扱いにする」という条件と、「どの出力から再開するか」という条件を分けて実装します。

よくある質問

手元にあるMP4をGemini APIでExtendできますか

Gemini APIでは、Veoの以前の生成結果として得た動画が必要で、任意のMP4をそのまま入力する用途ではありません。

Google Cloudの現行ガイドはMP4入力を扱いますが、長さ、フレームレート、解像度、合計尺の条件がGemini APIとは異なります。

縦長動画にも使えますか

Gemini APIのExtendは9:16と16:9に対応しますが、解像度は720pです。

元動画と公開先の比率を最初に決め、連続する生成の途中で変えないようにします。

20回実行すれば必ず自然な148秒になりますか

20回は実行回数の上限であり、映像の一貫性を保証する数値ではありません。

長くするほど確認する境界が増えるため、各回の出力を点検し、必要なら構成を短いカットへ分けます。

Flowでも同じ7秒と20回の制限ですか

Gemini APIの制限をFlowへそのまま適用することはできません。

Flowについては、公式のVeo 3.1更新案内と利用画面に表示される条件を確認します。

Veo 3.1 Extendを実装する際の結論

Gemini APIでExtendを使うときは、Veoの直前の生成結果を入力し、720pのまま7秒ずつ延長します。

上限は20回でも、制作上の適切な回数は、境界の品質、必要な物語、確認工数によって決まります。

まず1回の延長を保存まで通し、次に指示を配列化し、最後にジョブ管理と人の確認工程を加える順番なら、問題の原因を切り分けやすくなります。

参考資料

この記事に関連する株式会社greedenの取り組み

Veoの試作を業務で使える仕組みに変えるには、API連携だけでなく、権限、再試行、保存、品質確認まで一体で設計する必要があります。株式会社greedenは、要件定義から実装、テスト、保守までWebシステム開発を一貫して支援します。

投稿者 greeden

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)