結論から言うと: Gemini Omni 1.2 Flashで動画を拡張するには、クリップと短い続きのプロンプトをInteractions APIに送信します。各ターンで3〜10秒が追加され、より長いクリップが返されます。Gemini APIでは合計30秒までです。Google CloudのAgent Platformでは40秒まで可能ですが、冒頭が切り詰められないよう各ステップを計画することが条件です。
プロンプトの書き方については、Omni 1.1シーン拡張ガイドをご覧ください。本ガイドでは、新たに追加されたリクエスト方法、チェーンの計算、40秒クリップのコストについて解説します。
Gemini Omni 1.2 Flashの動画拡張の仕組み
動画拡張は、クリップの末尾に続きを生成します。モデルは入力の末尾最大10秒をコンテキストとして読み取り、3〜10秒の新しい映像を生成してクリップに連結します。追加できるのは末尾のみで、冒頭への挿入や中間部分の拡張はできません。
Googleでは、モデルの呼び出し先によって異なる制限がドキュメント化されています:
| Gemini API | Agent Platform (Google Cloud) | |
|---|---|---|
| 認証 | APIキー | プロジェクトとアクセストークン |
| 合計長 | 30秒 | 40秒 |
| 入力の長さ | 別途の上限の記載なし | 任意の長さ |
| 参照画像 | Omniで最大6枚 | 拡張1回につき最大2枚 |
| 拡張モード | プロンプトが基本、taskはフォールバック |
全サンプルでtask: "extend" |
| シードとラベル | Omniのドキュメントには記載なし | generation_config.seed, labels |
| 結果の保存 | 有料ティアで55日間 | 最大7日間 |
出典:Gemini API OmniドキュメントとAgent Platform拡張ドキュメント。
Agent Platformでは、モデルは末尾最大10秒を読み取り、新しいセグメントを入力の末尾最大30秒に連結します。Googleの例では60秒の入力を10秒延長して40秒を返すため、最初の30秒は失われます。

出力には既存の映像が含まれるため、自分でつなぎ合わせる必要はありません。ただし、Googleはトランジションを滑らかにするため、入力の末尾近くの一部フレームを編集します。
1.2での拡張に関する変更点
- 15秒の開始クリップ。 1.1では10秒まででした。拡張の各ターンは引き続き10秒が上限です。
- Agent Platformの拡張リクエストにおける参照画像、シード、ラベル。
- 新しいプロンプト構文。 Googleは古いガイドで使われていた
<IMAGE_REF_0>などのタグを非推奨にしました。各画像は平易な言葉で記述してください。 - 新しい入力タイプ。 現在のサンプルでは、1.1の例で使われていた
documentタイプではなく"type": "video"を送信します。
Gemini APIで動画をステップごとに拡張する
- クリップを生成するか、Files API経由でアップロードします。アップロードされたファイルは48時間後に削除されます。
- 次に何が起きるかだけを記述します。
durationを"3s"〜"10s"の範囲で設定します(デフォルトは10)。- 次のターンに備えてインタラクションIDを保存します。
from google import genai
client = genai.Client()
first = client.interactions.create(
model="gemini-omni-1.2-flash",
input="A courier in a yellow jacket cycles through a rainy night market.",
response_format={"type": "video", "duration": "15s"},
)
second = client.interactions.create(
model="gemini-omni-1.2-flash",
previous_interaction_id=first.id,
input="The courier brakes at a red door. Keep the same yellow jacket.",
response_format={"type": "video", "duration": "10s", "delivery": "uri"},
)
自分で撮影した映像を拡張するには、previous_interaction_idを、{"type": "video", "uri": video_file.uri}とテキスト項目を含む入力配列に置き換えます。
- 最初は
taskを指定しない。 Googleによれば厳格な制約が追加されるため、video_configに"task": "extend"を設定するのはフォールバックとしてのみにします。 - 4MBを超える場合は
delivery: "uri"を使用。 作成レスポンスのURIを保存してください。後からGETを実行すると、URIリクエストの場合でもインラインbase64が返されます。 storeは有効のままに。store: falseにすると、そのインタラクションIDからは継続できません。
アップロードにはさらに2つの制限があります:人物が話している箇所へのセリフ追加が不可であること、およびEEA、スイス、英国からは拡張できないことです。生成動画のマルチターン拡張では、どちらの制限も回避できます。
Agent Platformでのリクエストの手順
40秒にする場合やジョブキューが必要な場合は、こちらのルートを使います。生成には1分以上かかることがあるため、backgroundを有効にして、次のボディをhttps://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/interactionsにPOSTしてください:
{
"model": "gemini-omni-1.2-flash",
"background": true,
"input": [
{ "type": "text", "text": "The courier opens the red door and steps inside." },
{ "type": "video", "uri": "gs://my-bucket/hop-1.mp4", "mime_type": "video/mp4" }
],
"response_format": [
{
"type": "video",
"delivery": "uri",
"gcs_uri": "gs://my-bucket/out/",
"aspect_ratio": "16:9",
"duration": "5s"
}
],
"generation_config": {
"seed": 4242,
"video_config": { "task": "extend" }
},
"labels": { "campaign": "courier", "hop": "2" }
}
この呼び出しは、ステータスin_progressのインタラクションIDを返します。GET .../locations/global/interactions/INTERACTION_IDでポーリングしてください。完了したら、steps内のmodel_outputステップからgs:// URIを読み取ります。そのURIが次のホップの入力になります。
ステートレス(store: false)、ステートフル(store: true)、ストリーミングの各モードも用意されています。保存された結果と非同期の結果は最大7日間しか保持されないため、必要なものはコピーしてください。
[要確認] 未実行:利用できるGoogle Cloudプロジェクトがありませんでした。Googleのサンプルボディにはseedもlabelsも含まれていないため、配置場所を確認してください。
40秒の上限までチェーンする方法
ホップですべての映像を保持するには、その入力が30秒以下である必要があります。何も失わずに40秒に到達するには、まず正確に30秒まで伸ばします。
| ホップ | 計画したduration |
計画した出力 | 単純なduration |
単純な出力 |
|---|---|---|---|---|
| 開始 | 15秒 | 15秒 | 15秒 | 15秒 |
| 1 | 10秒 | 25秒 | 10秒 | 25秒 |
| 2 | 5秒 | 30秒 | 10秒 | 35秒 |
| 3 | 10秒 | 40秒 | 10秒 | 40秒(冒頭5秒が切り捨て) |

単純なチェーンでは5秒余分に伸ばせますが、その代わりに冒頭を失います。クリップの長さからは警告されません。どちらのチェーンも40秒を返すからです。
40秒を作る場合、15秒で開始してもAPI呼び出しは節約できません:10秒で開始しても拡張は3回必要です。それ以外の長さでは役立ちます。25秒なら拡張が2回ではなく1回で済み、35秒なら3回ではなく2回で済みます。
Gemini APIでは、ホップ2で止めてください。30秒を超えるリクエストがどうなるか、Googleは説明していません。
参照画像とシードでキャラクターを安定させる
最後の10秒より前に画面から出たキャラクターは、そのフレームがクリップに残っていても、モデルには見えません。Googleの解決策は、もう一度言及するか、同じinput配列で参照画像を渡すことです:
{ "type": "image", "uri": "gs://my-bucket/courier.png", "mime_type": "image/png" },
{ "type": "text", "text": "The courier from the reference image walks back into frame." }
- そのキャラクターが必要なホップごとに、同じ画像を再利用します。
- Agent Platformでは慎重に選ぶ。 拡張1回につき2枚という制限では、最も崩れやすい要素しかカバーできません。
- 参照動画は送らない。 Googleは参照動画を新規生成のみでサポートしており、拡張ではサポートしていません。
- タイミングは新しいセグメント基準で指定する。 プロンプトでの0秒は拡張部分の開始を意味し、クリップの開始ではありません。
再現可能な結果を得るにはgeneration_config.seedを設定します。最も役立つのはデバッグ時です:同じシードでホップを再実行すれば、変化がプロンプトによるものかどうかを確認できます。Googleは、異なるプロンプト間でシードがキャラクターを一定に保つことを保証していないため、その目的には参照画像に頼ってください。ホップごとの課金の追跡にはlabelsを使います。
40秒クリップはいくらかかるか
Googleの料金ページでは、Omni 1.2の動画出力は100万トークンあたり12.00ドルで課金されます。拡張で課金されるのが新しい秒数のみか、返されるすべての秒数かは明記されていません。計画的なチェーンでは40秒を生成しますが、15、25、30、40秒が返されるため、合計は110秒になります。
| 解像度 | 1秒あたり | 新しい秒数のみ課金の場合 | 返された全秒数が課金の場合 |
|---|---|---|---|
| 360p | $0.023 | $0.93 | $2.55 |
| 720p | 約$0.07 | $2.78 | $7.65 |
| 1080p(アップサンプリング) | $0.104 | $4.17 | $11.47 |
| 4K(アップサンプリング) | $0.209 | $8.34 | $22.94 |
これらはGemini APIの料金で、Googleが公表している秒あたりトークン数から計算したものです。入力トークン(100万トークンあたり$1.50)と思考トークン(100万トークンあたり$9.00)がさらに加算されます。
実際に確認できるまでは、右側の列の金額で予算を組んでください。料金を抑えるには:
- 360pでドラフトを作成し、720pの支払い前にチェーン全体を検証する。
- チェーンを組む前に解像度を選ぶ。 Agent Platformのモデルページでは、アップスケーリングの入力は15秒までに制限されているため、完成した40秒のクリップは1回では処理できません。
- 難しいシーンでは再生成分の予算を見込む。 Googleの発表では、高速なスポーツ動作、急激な台詞の変化、複雑な物理演算がまだ改善中の領域として挙げられています。
gemini-omni-1.1-flashへのリクエストは2026年12月3日から1.2にルーティングされ、1.2の料金で課金されます。
Apidog CLIでコーディングエージェントに非同期フローをテストさせる
非同期チェーンは静かに壊れます:終わらないポーリング、failedで終わる実行、変わってしまうレスポンス形式。コーディングエージェントにApidog CLIでそのテストを作成させ、実行させましょう。
npm install -g apidog-cli@latest
apidog auth login --with-token <YOUR_TOKEN>
apidog skill install
その後、Claude Code、Codex、Cursorのいずれかに次のプロンプトを1つ渡します:
In Apidog project <id>, create endpoints for POST and GET on the Omni
interactions URL. Build a test scenario named omni-extend-async: start a
3-second 360p extension with background set to true, save the interaction
ID, then loop with a 10-second delay on GET until status leaves in_progress.
Assert status is completed and a model_output step holds a video/mp4 item
with a uri or data. Run it and summarize any failures.
エージェントはペイロードを検証したうえで、シナリオを作成・実行します:
apidog cli-schema get test-scenario-update
apidog test-scenario create --project <id> --name "omni-extend-async" --folder-id <folderId> --priority 1
apidog test-scenario import-steps <scenarioId> --project <id> --source endpoint --ids <postId>,<getId>
apidog cli-schema validate test-scenario-update --file scenario.json
apidog test-scenario update <scenarioId> --project <id> --file scenario.json
apidog run -t <scenarioId> --project <id> -e <envId> --timeout-request 300000 -r cli,junit --out-dir ./reports
実行のたびに実際のクリップが課金されるため、コミットごとではなく夜間に実行してください。新しい秒数のみ課金される場合、3秒の360pホップのコストは約$0.07です。同じコマンド列はパイプラインにそのまま組み込めます。詳細はApidog CLIのCI/CDガイドを、エージェント側の設定はClaude Codeセットアップガイドをご覧ください。Apidog Freeは最大4ユーザーまで利用できます。
FAQ
Gemini Omni 1.2 Flashの動画はどれくらい長くできますか? 1回の生成は3〜15秒です。拡張を使う場合、Gemini APIのドキュメントでは合計30秒、Agent Platformのドキュメントでは40秒とされています。
拡張した動画の冒頭が消えたのはなぜですか? Agent Platformでは、入力の末尾30秒分のみが保持されます。30秒を超える入力は冒頭が失われます。最後のホップがちょうど30秒から始まるように、ホップを計画してください。
自分で撮影した動画を拡張できますか? EEA、スイス、英国以外であれば可能です。Files API経由でアップロードするか、Agent PlatformではCloud Storageを参照してください。人物が話しているアップロード済みクリップにセリフを追加することはできません。
クリップを無料で拡張できますか? API経由ではできません。GoogleはOmni 1.2と1.1の無料ティアを「利用不可」としているため、テスト1回でも課金されます。実行できる中で最も安いのは3秒の360p拡張です。
