Veo 3.1の「Extend」を極める——実装手順・設計パターン・API対応の最新ガイド
先に要点
- Extendの正体:Veo 3.1は既存のVeo生成動画を“7秒ずつ”最大20回まで継ぎ足し、単一の連続クリップとして書き出せます(出力は最大約148秒)。Gemini APIから正式に利用可能で、FlowやVertex AIのUI/SDKでも運用できます。
- 対応チャネル:Gemini API(Veo 3.1/3.1 Fast)、Google Cloud Vertex AIのドキュメントにExtend手順が公開されています。Flowでも「Scene Extension」など拡張系機能が追加され、音声も扱えます。
- 要件と上限:拡張対象はVeo生成動画に限り、9:16または16:9/720pなどの入力条件が設けられています。
- 誰に効くか:広告・SNS運用チーム/ニュース編集部/UGCプラットフォーム/教育・社内研修。短尺→長尺へテンポよく尺を伸ばすワークフローをAPIで自動化できます。
- この記事の狙い:今日から動く最短ルート(環境準備→基本生成→Extend→品質管理→運用テンプレ)をUI/API両面で、コピー&ペースト可能なサンプルとともに解説します。
誰に一番役立つか(利用者像を具体化)
- 広告・SNS運用チーム:8秒の良ショットを7秒刻みで“呼吸を継ぐ”ように延長し、30〜60秒へ自然に拡張してCTRや視聴維持率のA/Bを回したい方。
- ニュース・メディア編集部:速報の短いリード映像を、続報やテロップ情報を繋ぎ足して1本の尺に仕上げたい方。
- UGC/アプリ開発:ユーザーのVeo生成クリップを自動連結してテンプレート化し、一貫したトーンで出力したい方。
- 教育・社内研修:イントロ→手順→まとめを段階Extendで作成し、校正・差し替えを容易にしたい方。
本稿は正確性最優先で、不確実情報は採用しません。仕様・上限・対応チャネルは公開ドキュメントで裏取りしています。
1. まず押さえるVeo 3.1「Extend」の事実(2025年10月時点)
- Extendの粒度:1回あたり7秒。最大20回の拡張が可能。結果、単一の連結動画として約148秒まで出力されます。
- 入力の前提:Veoが生成した動画のみ拡張対象。アスペクト比は9:16 or 16:9、解像度は720p、141秒以下の入力に制限。Gemini API経由のExtendはVeo生成物が必須です。
- 対応面:Gemini API(Veo 3.1 / 3.1 Fast)で利用可能。Vertex AIでもコンソール/APIの両方で拡張手順が案内されています。Flowは「Scene Extension」等を備え、音も拡張可能に。
- 関連強化点:Veo 3.1は参照画像最大3点、ファースト/ラストフレーム補間など継続性の制御が改善。Extendと組み合わせるとシーンの統一感を保ちながら長尺化できます。
ひとことで言えば、**「短尺で当てた美味しいショットを、破綻なく順次のばせる」**のがVeo 3.1 Extendの強みです。
2. ワークフローの全体設計(UI→APIの両建て)
2-1. 基本フロー(全体像)
- コンセプト決定:映像の被写体・レンズ感・色温度など継続の骨格を決める。
- 短尺の“芯”を生成:8秒前後で最も象徴的なショットを作る(参照画像やラストフレームを活用)。
- Extendで7秒ずつ継ぎ足し:文脈プロンプトと制約プロンプトを分けてブレを抑制。
- 品質確認:動きの継ぎ目/音の連続性をチェック、必要なら再Extend。
- 書き出し/公開:字幕・ロゴ・比率を目的媒体に合わせて最終調整。
2-2. どのチャネルを使う?
- 素早い試作:Flow(Scene Extension)→Gemini API プレビューで微調整。
- 本番実装:Gemini APIまたはVertex AIのSDK/RESTを採用。Cloud運用(権限管理・監査)を重視するならVertex AIを軸に。
3. サンプル:UIでExtendを理解する(Flow/Vertex AI)
3-1. Flow(Scene Extension)の基本手順
- Veo 3.1でベースを生成(参照画像やファースト/ラストフレームで統一感を確保)。
- Extend/Scene Extensionを選択し、7秒の追加プロンプトを入力。環境音/BGMも同一世界観で明示。
- 連続して最大20回まで繰り返し、1本の連結クリップで出力。
3-2. Vertex AI コンソールでのExtend
- Media Studio → VideoでVeoを選択し、生成済みクリップに対してAI actions → Extend videoを実行。プロンプトを追加して生成。APIでも同様に実行可能です。
4. Gemini APIでExtendを実装する(コード付き)
ここからはGemini API(Veo 3.1)を使い、8秒の芯→7秒Extend×Nという王道パターンを示します。上限・前提はドキュメント準拠です。
4-1. 前提
- モデル:
veo-3.1-generate-previewまたはveo-3.1-fast-generate-preview - 拡張対象:Veo生成動画(9:16/16:9, 720p, 長さ141秒以下)
- Extend単位:7秒、最大20回(出力は単一の連結動画、最大約148秒)
4-2. ベース動画の生成(Python)
# pip install google-genai
import time
from google import genai
from google.genai import types
client = genai.Client()
prompt = (
"A cinematic medium shot of a female reporter in a modern newsroom. "
"Cool daylight tone, 35mm look, shallow depth of field. "
"She turns to camera and starts walking forward. Include natural ambience."
)
op = client.models.generate_videos(
model="veo-3.1-generate-preview",
prompt=prompt,
# 参考: 参照画像や first/last frame も利用可
# config=types.GenerateVideosConfig(reference_images=[...], last_frame=...),
)
while not op.done:
time.sleep(10)
op = client.operations.get(op)
video_asset = op.response.generated_videos[0].video
client.files.download(file=video_asset)
video_asset.save("base_8s.mp4")
ポイント:参照画像(最大3点)やファースト/ラストフレームを使うと、Extend時の連続性が明確に。
4-3. 7秒Extendを1回実行(Python)
import time
from google import genai
from google.genai import types
client = genai.Client()
extend_prompt = (
"Continue the scene: she stops near the anchor desk, points to the right screen. "
"Keep the same outfit, lighting, and ambience. Camera slowly pushes in."
)
op = client.models.generate_videos(
model="veo-3.1-generate-preview",
video=video_asset, # 直前のVeo生成物を指定
prompt=extend_prompt,
config=types.GenerateVideosConfig(
number_of_videos=1,
resolution="720p", # Extendは720p前提(仕様に従う)
),
)
while not op.done:
time.sleep(10)
op = client.operations.get(op)
extended = op.response.generated_videos[0].video
client.files.download(file=extended)
extended.save("extended_15s.mp4")
仕様の要点:7秒刻みで最大20回。入力はVeo生成物に限定、解像度720p/9:16 or 16:9など条件あり。
4-4. 連続Extendの実務テンプレ(Python)
def extend_chain(base_video, prompts, max_hops=5):
"""
base_video: client.files.get(...)等で取得したVeo生成動画ハンドル
prompts: 7秒ごとの継続プロンプト配列
max_hops: 上限 20 まで (仕様)
"""
assert len(prompts) <= max_hops <= 20
current = base_video
results = []
for i, p in enumerate(prompts, 1):
op = client.models.generate_videos(
model="veo-3.1-generate-preview",
video=current,
prompt=p,
config=types.GenerateVideosConfig(
number_of_videos=1,
resolution="720p",
),
)
while not op.done:
time.sleep(10)
op = client.operations.get(op)
current = op.response.generated_videos[0].video
results.append(current)
return current, results # currentが連続クリップ
4-5. JavaScript(Node.js)版の骨格
import { GoogleAI } from "@google/generative-ai"; // gemini-js SDK相当
const ai = new GoogleAI();
const base = await ai.models.generateVideos({
model: "veo-3.1-generate-preview",
prompt: "A cinematic shot in a modern newsroom. Cool daylight, 35mm.",
});
let video = base.response.generatedVideos[0].video;
const prompts = [
"Continue: she approaches the desk; maintain lighting, ambience.",
"Continue: over-shoulder view of the wall monitor; match color tone.",
// ...
];
for (const p of prompts) {
const op = await ai.models.generateVideos({
model: "veo-3.1-generate-preview",
video,
prompt: p,
config: { numberOfVideos: 1, resolution: "720p" }
});
video = op.response.generatedVideos[0].video;
}
// download video.bytes → save
モデルID/パラメータは公式ドキュメントの表に準拠してください(
veo-3.1(-fast)-generate-preview、number_of_videos、resolutionなど)。
5. Vertex AIでExtendを実装する(SDK/REST)
Cloudの権限管理・監査・コスト監視を重視する場合はVertex AIが安定。コンソールとAPIの両方でExtend可能です。
5-1. Python(GenAI SDK on Vertex AI)
pip install --upgrade google-genai
export GOOGLE_CLOUD_PROJECT=your_project
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True
import time
from google import genai
from google.genai.types import GenerateVideosConfig, Video
client = genai.Client()
# 例: まずは短尺を生成(省略)。以降は既存のVeo動画を7秒Extend
op = client.models.generate_videos(
model="veo-3.1-generate-preview", # VertexでもVeo 3.1利用可(ロールアウト範囲は最新Doc確認)
prompt="Continue: camera push-in; keep ambience and outfit.",
video=Video(uri="gs://your-bucket/base_8s.mp4", mime_type="video/mp4"),
config=GenerateVideosConfig(
aspect_ratio="16:9",
# Vertexでは出力先をGCSに指定する設計が実務的
output_gcs_uri="gs://your-bucket/output/",
# resolution パラメータなど、モデル世代ごとの対応はDocに従う
),
)
while not op.done:
time.sleep(15)
op = client.operations.get(op)
print(op.result.generated_videos[0].video.uri)
VertexのガイドにはExtendのUI/REST/SDK手順がまとまっています。認証/役割(IAM)やGCS出力の流れも合わせて確認しましょう。
6. プロンプト設計:連続性を“壊さない”書き方
推奨の分割
- Context:世界観・レンズ・色温度・音の雰囲気。
- Directive:被写体の動き/カメラワークの具体指示。
- Constraints:衣装・小物・光源の固定、NG(手指破綻、文字の滲み 等)。
Extend用サンプル(7秒ごと)
[Context]
modern newsroom, cool daylight, 35mm look, shallow depth of field; natural ambience.
[Directive]
continue from previous shot; reporter slows down and glances at the wall monitor; camera pushes in slightly.
[Constraints]
keep same outfit and mic color; keep shadow direction consistent; avoid exaggerated hand deformation.
参照画像の活用:人物・衣装・小物の3点リファレンスを与えると、同一性の維持に効きます。ファースト/ラストフレーム(補間)と併用すれば、動きの接続がなめらかに。
7. 品質管理:失敗を早く見つけて安く直す
- 境界フレームの監査:Extend直後のつなぎ目で、被写体の姿勢・向き・影の整合を確認。
- 音の連続性:環境音やBGMキーをContextに固定。フェードは編集側で吸収。
- NG検出の自動化:CLIP類似度やSSIMで前後カットの一致率を定量化。閾値を割ったら同一プロンプトで再Extendし、シード固定で揺れを抑える。
- 制作ループ:「短尺→Extend→点検→必要な箇所だけ再Extend」を7秒ユニットで回すと、コスト/時間/破綻率が下がります。
Veo 3.1は音声統合が強化され、Flowの編集機能も向上。照明や影のリアリズムが上がったぶん、「少しの違和感」が出た時はプロンプトの制約語彙を明確化すると収まりやすいです。
8. よくある疑問と答え(API&運用)
Q1. APIでExtendできますか?
→ はい。Gemini APIでVeo 3.1/3.1 Fastが提供され、**Extendの仕様(7秒×最大20回)**が公式に公開されています。Vertex AIのガイドにもExtend手順があります。
Q2. どのくらいの長さまで?
→ 入力141秒以下のVeo動画に7秒刻みで継ぎ足し、最大約148秒の単一動画として出力可能です。
Q3. 9:16で作った縦動画もExtendできますか?
→ できます。9:16または16:9がサポート対象です(Extend時の解像度は720p)。
Q4. まずはUIから試すなら?
→ FlowのScene Extensionが手軽です。音付きで延長でき、編集系の新機能も追加されています。
Q5. 価格や出力品質は?
→ モデルや解像度、長さで変動します。Veo 3.1は1080p(8s)や720p長尺などの選択肢があり、Fast版も提供。最新の料金・上限はモデルバージョンの節や最新発表を参照してください。
9. プロダクション向け設計パターン(Gemini/Vertex両対応)
9-1. ドライバ差し替え(抽象→実装)
class ExtendDriver(Protocol):
def generate(self, prompt: str, **cfg) -> "Video": ...
def extend(self, video: "Video", prompt: str, **cfg) -> "Video": ...
class GeminiVeoDriver(ExtendDriver):
...
class VertexVeoDriver(ExtendDriver):
...
def extend_to_target(video, prompts, driver: ExtendDriver, limit=20):
assert len(prompts) <= limit
current = video
for p in prompts:
current = driver.extend(current, p, resolution="720p")
return current
- 抽象I/Fを固定しておけば、Gemini ↔ Vertexの切り替えや将来のモデル更新に強いです。
- キュー管理(RDB/Redis/SQS)と監査ログを外付けし、7秒ユニットの再試行を容易に。
9-2. テンプレプロンプトと“継続語彙”の辞書
- Context語彙(照明・レンズ・色温度・音)を辞書化。
- 制約(衣装・小物・ロゴ露出・Negative)をチーム共通フォーマットで共有。
- トランジション(マッチカット/軽いディゾルブ)の使い分け指針をルール化。
10. サンプル案件:ニュースOPを60秒へ自然にExtend
前提:8秒でキャスター登場→歩き出しのショットを作成。Cool daylight/35mmで統一。
Extend 7秒×7回(合計約57秒)プロンプト例
- #1(0–7s):「キャスターがデスクへ近づく。カメラはゆるくドリーイン。環境音はニュースルームのざわめき。」
- #2(7–14s):「モニターに当日のトピックが薄く映り込む。衣装・髪型・影の向きは維持。」
- #3(14–21s):「机上のペンを手に取り、右を指す所作。ライティングは変えない。」
- #4(21–28s):「背後の透明パネル越しにスタッフの影が横切る演出。音量は一定。」
- #5(28–35s):「テロップ位置を意識し、画面左に空間をつくる。マッチカット想定。」
- #6(35–42s):「キャスターの小さな頷きと視線移動。顔の形状・口元の質感は維持。」
- #7(42–49s):「机に並ぶ資料へ視線を落とし、音のボリュームを微弱にスッと下げる。」
NG指定(常時):「手指の過度な変形なし/過度なボケ・白飛び回避/ロゴ露出は2秒未満/髪の長さと色を保持」
仕上げ:字幕とBGMフェードは編集側で調整し、**SNS版(9:16)とYouTube版(16:9)**へクロップ/再レイアウト。
11. トラブルと回避策
- つなぎ目で被写体が“別人化”
→ 参照画像(最大3点)でアイデンティティを固定。髪型・衣装・小物をConstraintsに明記。 - 露出・色温度の揺れ
→ Contextに色温度・光源方向を固定語彙で入れる。Flowで照明・影の調整も検討。 - 音の違和感
→ 環境音/BGMキーをプロンプトで固定。音量変化は短くスムーズに。 - 長さ上限に到達
→ 最終尺の逆算でExtend回数を設計。必要に応じて2本構成(第1部・第2部)に分割し、編集で連結。
12. まとめ——“7秒ユニット”で物語をつなぐ
- Veo 3.1のExtendは、7秒×最大20回の連続拡張をGemini API/Flow/Vertex AIから安全に実現します。**入力条件(720p/9:16 or 16:9/Veo生成物)と出力上限(約148秒)**を押さえるのが第一歩。
- 制作のコツは、“芯の8秒”を先に決め、Context/Directive/Constraintsで継続語彙を固めること。参照画像/ファースト/ラストフレームを上手に使えば、破綻の少ない長尺が作れます。
- 運用の正解は、UIで発想→APIで自動化。キュー管理・監査ログ・再試行をセットにし、7秒ユニットで早く・安く・確実に伸ばしていきましょう。
わたしは、Extendを**「呼吸のバトン渡し」だと考えています。良いショットの息を切らさず、次の7秒へ丁寧につなぐ。その積み重ねが、視聴維持率と世界観の没入を生みます。Veo 3.1のExtendなら、その作法をコードと設計**で再現できます。
参考資料(確認日:2025-10-29)
- Generate videos with Veo 3.1 in Gemini API(Extend=7秒×最大20回、入力条件・モデルID・参照画像・ファースト/ラストフレーム)
- Extend Veo on Vertex AI-generated videos(コンソール/API/SDKの手順、認証とGCS出力の流れ)
- Introducing Veo 3.1(Gemini API/Vertex AI/Flowでの提供、創造機能の拡充)
- Veo updates in Flow(Extend含む編集機能に音を導入)
- The Verge:Flow×Veo 3.1の編集・音・Scene Extensionの報道
