Claude Opus 5 is now live on CometAPI →
G

Veo 3.1

毎秒:$0.32
リリース日:May 31, 2026

Veo 3.1 は、高品質でシネマティックな出力とネイティブなオーディオ同期を特徴とするフラッグシップのAI動画生成モデルです。プロフェッショナルな映像制作に向けて、リアルなモーション、高い視覚的忠実度、そして音声と映像を厳密に同期させた生成を提供します。

新着
人気
商用利用

Veo 3.1のPlayground

Veo 3.1のPlaygroundを探索 — モデルをテストし、リアルタイムでクエリを実行するインタラクティブな環境。プロンプトを試し、パラメータを調整し、即座に反復して開発を加速し、ユースケースを検証します。

Veo 3.1 の技術仕様

項目Veo 3.1(公開仕様)
公式モデル IDveo-3.1-generate-001
プロバイダGoogle DeepMind / Google Cloud
モデルタイプテキストから動画、画像から動画の生成
入力タイプテキストプロンプト、画像入力、先頭フレーム + 最終フレームのガイダンス
出力タイプAI 生成動画
対応解像度720p と 1080p、4K
対応アスペクト比16:9 および 9:16
対応フレームレート24 FPS
動画の長さ4 秒、6 秒、または 8 秒のクリップ(モード依存)
プロンプト言語英語
リクエストあたりの動画数最大 4 本
API レート制限プロジェクトあたり毎分最大 50 リクエスト
対応デプロイVertex AI、Gemini エコシステム統合、Flow
非対応機能(公式ドキュメント)動的な共有クォータ、一部の参照画像ワークフロー、標準 API フローでのネイティブなビデオ拡張

Veo 3.1 とは?

Veo 3.1 は、シネマティック品質の動画合成、プロンプト遵守性の強化、シーン一貫性、そしてマルチモーダルな動画制作ワークフローに焦点を当てた Google のフラッグシップ生成動画モデルファミリーです。テキストから動画の生成にとどまらず、画像ガイド生成やフレーム制御型のストーリーテリング ワークフローをサポートします。公式には、テキストから動画、画像から動画、プロンプト書き換え、First/Last Frame 生成ワークフローがサポートされています。

コア機能

Veo 3.1 は実用的なコンテンツ制作機能に注力しています:

  • 出力に統合されたネイティブ音声生成(セリフ、環境音、効果音)。Veo 3.1 は、セリフ + アンビエンス + SFX のネイティブ音声を映像タイムラインに合わせて生成し、セリフのリップシンクと音声・映像の整合を維持することを目指します。
  • より長い出力(Veo 3 の非常に短いクリップ(8 秒)に対して、1080p で最大約 60 秒に対応)と、物語の連続性のための複数プロンプトによるマルチショットシーケンス。
  • キーフレーム間のフッテージを拡張または補間する Scene ExtensionFirst/Last Frame モード。
  • Flow 内でのオブジェクト挿入と(今後対応予定の)オブジェクト削除、および編集用プリミティブ。

上記の各機能は手動の VFX 作業を減らすために設計されています。音声シーンの連続性が、付加要素ではなく第一級の出力になりました。

技術的詳細(モデル動作と入力)

モデルファミリーとバリアント: Veo は Google の Veo-3 ファミリーに属します。プレビューのモデル ID は一般に veo3.1-pro; veo3.1(CometAPI ドキュメント)。入力としては、テキストプロンプト画像参照(単一フレームまたはシーケンス)、およびマルチショット生成のための構造化されたマルチプロンプトレイアウトを受け付けます。

解像度と長さ: プレビュードキュメントでは、720p/1080p の出力、特定のプレビュー設定で最大約 60 秒までの長尺、そして以前の Veo バリアントより高い忠実度が記載されています。

アスペクト比: 16:9(対応)および 9:16(一部の参照画像フローを除き対応)。

プロンプト言語: 英語(プレビュー)。

API 制限: 典型的なプレビュー制限として、プロジェクトあたり毎分最大 10 API リクエストリクエストあたり最大 4 本の動画、および動画の長さは 4/6/8 秒から選択(参照画像フローは 8 秒に対応)などが含まれます。

ベンチマーク性能

Google の内部評価および公開概要では、テキスト整合性映像品質音声・映像の一貫性(テキスト→動画および画像→動画タスク)などの指標において、人間評価者の比較で Veo 3.1 の出力が強く支持されると報告されています。

Veo 3.1 は、MovieGenBench や VBench といったベンチマークデータセット上で、総合的嗜好、プロンプト整合(テキスト→動画および画像→動画)、映像品質、音声・映像の整合、そして「視覚的に現実的な物理」といった複数の客観軸において、内部の人間評価比較で最先端の結果を達成しました。

制約と安全性に関する考慮事項

制約:

  • アーティファクトと不整合: 改善があるものの、特定のライティング、微細な物理、複雑な遮蔽では依然としてアーティファクトが発生する可能性があります。画像→動画の一貫性(特に長尺)も改善していますが完璧ではありません。
  • ミスインフォメーション/ディープフェイクのリスク: より豊かな音声とオブジェクト挿入/削除により、悪用のリスク(現実的な偽音声や延長クリップ)が高まります。Google は(ポリシーやセーフガードなどの)緩和策に言及しており、以前の Veo ではプロビナンス支援のためのウォーターマーク/SynthID が参照されましたが、技術的セーフガードだけで悪用リスクを完全には排除できません。
  • コストとスループット制約: 高解像度・長尺動画は計算コストが高く、現在は有料プレビューで制限されています。画像モデルと比べてレイテンシとコストが高くなることが予想されます。コミュニティ投稿や Google フォーラムでは、提供時間帯やフォールバック戦略について議論されています。

安全管理: Veo 3.1 には統合されたコンテンツポリシー、以前の Veo リリースでのウォーターマーク/SynthID シグナリング、プレビューアクセス制御が含まれます。ユーザーには、プラットフォームポリシーの遵守と高リスク出力に対する人的レビューの実施が推奨されます。

実用的なユースケース

  • クリエイターの迅速なプロトタイピング: 絵コンテ → マルチショットのクリップやアニマティクスにネイティブなセリフを付与し、早期クリエイティブレビューを可能に。
  • マーケティング/短尺コンテンツ: 15~60 秒のプロダクトスポット、ソーシャルクリップ、コンセプトティーザーなど、完全なフォトリアリズムよりスピードを重視する用途。
  • 画像→動画の適用: First/Last FrameScene Extension により、イラストやキャラクター、2 枚のフレームを滑らかなトランジションやアニメーションシーンへ。
  • ツール補強: Flow に統合され、反復編集(オブジェクト挿入/削除、ライティングプリセット)により手動の VFX 工程を削減。

他の主要モデルとの比較

Veo 3.1 と Veo 3(前モデル)の比較: Veo 3.1 は、プロンプト遵守性の改善音声品質マルチショット一貫性に注力しています。アーティファクト低減と編集容易性の向上を狙った、漸進的ながら実用的な更新です。

Veo 3.1 と OpenAI Sora 2 の比較: メディア報道でのトレードオフとして、Veo 3.1 は長尺の物語制御、統合音声、Flow での編集統合を強調しています。Sora 2(報道比較時)は異なる強み(スピード、異なる編集パイプライン)に注力。TechRadar などでは、長尺動画とナラティブ対応における Google の Sora 2 対抗モデルとして Veo 3.1 を位置付けています。独立した並行比較テストはまだ限定的です。

機能Veo 3.1Sora 2Runway Gen-4 / Gen-4.5
ネイティブな縦向き出力はい限定的なワークフロー対応はい
画像から動画はいはいはい
音声統合の重視強い中程度中程度
フレーム条件付けはいはい部分的
ソーシャル動画最適化強い中程度強い
API エコシステム統合Google エコシステムOpenAI エコシステムクリエイターツール エコシステム

CometAPI で Veo 3.1 API を使うには?

  1. CometAPI の API キーを作成する
  2. モデルエンドポイントとして veo-3.1-generate-001 を選択する
  3. 動画生成 API を通じてプロンプトまたは画像入力を送信する
  4. 結果をポーリングし、生成された動画を取得する
  5. カメラワーク、シーンの連続性、一貫性の改善のためにプロンプトを反復調整する

よくある質問

Veo 3.1の料金

Veo 3.1の競争力のある価格設定をご確認ください。さまざまな予算や利用ニーズに対応できるよう設計されています。柔軟なプランにより、使用した分だけお支払いいただけるため、要件の拡大に合わせて簡単にスケールアップできます。Veo 3.1がコストを管理しながら、お客様のプロジェクトをどのように強化できるかをご覧ください。

Veo Video Generation Pricing

Pricing (Per Second)

Model720p1080p4K
veo3$0.32$0.32$0.48
veo3-fast$0.08$0.096$0.24
veo3.1$0.32$0.32$0.48
veo3.1-fast$0.08$0.096$0.24

💡 Billed per second. Total cost = price per second × video duration (seconds).

Veo 3.1のサンプルコードとAPI

Veo 3.1の包括的なサンプルコードとAPIリソースにアクセスして、統合プロセスを効率化しましょう。詳細なドキュメントでは段階的なガイダンスを提供し、プロジェクトでVeo 3.1の潜在能力を最大限に活用できるよう支援します。

#!/bin/bash
# Get your CometAPI key from https://api.cometapi.com/console/token
# Export it as: export COMETAPI_KEY="your-key-here"

BASE_URL="https://api.cometapi.com/v1"
IMAGE_PATH="/tmp/veo3.1_reference.jpg"

# ============================================================
# Step 1: Download Reference Image
# ============================================================
echo "Step 1: Downloading reference image..."

curl -s -o "$IMAGE_PATH" "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1280"
echo "Reference image saved to: $IMAGE_PATH"

# ============================================================
# Step 2: Create Video Generation Task (form-data with image upload)
# ============================================================
echo ""
echo "Step 2: Creating video generation task..."

RESPONSE=$(curl -s -X POST "${BASE_URL}/videos" \
  -H "Authorization: $COMETAPI_KEY" \
  -F 'prompt=A breathtaking mountain landscape with clouds flowing through valleys, cinematic aerial shot' \
  -F 'model=veo3.1' \
  -F 'size=16x9' \
  -F "input_reference=@${IMAGE_PATH}")

echo "Create response:"
echo "$RESPONSE" | jq .

TASK_ID=$(echo "$RESPONSE" | jq -r '.id')

if [ "$TASK_ID" = "null" ] || [ -z "$TASK_ID" ]; then
  echo "Error: Failed to get task_id from response"
  exit 1
fi

echo "Task ID: $TASK_ID"

# ============================================================
# Step 3: Query Task Status
# ============================================================
echo ""
echo "Step 3: Querying task status..."

QUERY_RESPONSE=$(curl -s -X GET "${BASE_URL}/videos/${TASK_ID}" \
  -H "Authorization: $COMETAPI_KEY")

echo "Query response:"
echo "$QUERY_RESPONSE" | jq .

TASK_STATUS=$(echo "$QUERY_RESPONSE" | jq -r '.data.status')
echo "Task status: $TASK_STATUS"

cURL Code Example

#!/bin/bash
# Get your CometAPI key from https://api.cometapi.com/console/token
# Export it as: export COMETAPI_KEY="your-key-here"

BASE_URL="https://api.cometapi.com/v1"
IMAGE_PATH="/tmp/veo3.1_reference.jpg"

# ============================================================
# Step 1: Download Reference Image
# ============================================================
echo "Step 1: Downloading reference image..."

curl -s -o "$IMAGE_PATH" "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1280"
echo "Reference image saved to: $IMAGE_PATH"

# ============================================================
# Step 2: Create Video Generation Task (form-data with image upload)
# ============================================================
echo ""
echo "Step 2: Creating video generation task..."

RESPONSE=$(curl -s -X POST "${BASE_URL}/videos" \
  -H "Authorization: $COMETAPI_KEY" \
  -F 'prompt=A breathtaking mountain landscape with clouds flowing through valleys, cinematic aerial shot' \
  -F 'model=veo3.1' \
  -F 'size=16x9' \
  -F "input_reference=@${IMAGE_PATH}")

echo "Create response:"
echo "$RESPONSE" | jq .

TASK_ID=$(echo "$RESPONSE" | jq -r '.id')

if [ "$TASK_ID" = "null" ] || [ -z "$TASK_ID" ]; then
  echo "Error: Failed to get task_id from response"
  exit 1
fi

echo "Task ID: $TASK_ID"

# ============================================================
# Step 3: Query Task Status
# ============================================================
echo ""
echo "Step 3: Querying task status..."

QUERY_RESPONSE=$(curl -s -X GET "${BASE_URL}/videos/${TASK_ID}" \
  -H "Authorization: $COMETAPI_KEY")

echo "Query response:"
echo "$QUERY_RESPONSE" | jq .

TASK_STATUS=$(echo "$QUERY_RESPONSE" | jq -r '.data.status')
echo "Task status: $TASK_STATUS"

Python Code Example

import os
import requests
import json

# Get your CometAPI key from https://api.cometapi.com/console/token, and paste it here
COMETAPI_KEY = os.environ.get("COMETAPI_KEY") or "<YOUR_COMETAPI_KEY>"
BASE_URL = "https://api.cometapi.com/v1"

headers = {
    "Authorization": COMETAPI_KEY,
}

# ============================================================
# Step 1: Download Reference Image
# ============================================================
print("Step 1: Downloading reference image...")

image_url = "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1280"
image_response = requests.get(image_url)
image_path = "/tmp/veo3.1_reference.jpg"
with open(image_path, "wb") as f:
    f.write(image_response.content)
print(f"Reference image saved to: {image_path}")

# ============================================================
# Step 2: Create Video Generation Task (form-data with image upload)
# ============================================================
print("\nStep 2: Creating video generation task...")

with open(image_path, "rb") as image_file:
    files = {
        "input_reference": ("reference.jpg", image_file, "image/jpeg"),
    }
    data = {
        "prompt": "A breathtaking mountain landscape with clouds flowing through valleys, cinematic aerial shot",
        "model": "veo3.1",
        "size": "16x9",
    }
    create_response = requests.post(
        f"{BASE_URL}/videos", headers=headers, data=data, files=files
    )

create_result = create_response.json()
print("Create response:", json.dumps(create_result, indent=2))

task_id = create_result.get("id")
if not task_id:
    print("Error: Failed to get task_id from response")
    exit(1)
print(f"Task ID: {task_id}")

# ============================================================
# Step 3: Query Task Status
# ============================================================
print("\nStep 3: Querying task status...")

query_response = requests.get(f"{BASE_URL}/videos/{task_id}", headers=headers)
query_result = query_response.json()
print("Query response:", json.dumps(query_result, indent=2))

task_status = query_result.get("data", {}).get("status")
print(f"Task status: {task_status}")

JavaScript Code Example

import fs from "fs";
import path from "path";
import os from "os";

// Get your CometAPI key from https://api.cometapi.com/console/token, and paste it here
const api_key = process.env.COMETAPI_KEY || "<YOUR_COMETAPI_KEY>";
const base_url = "https://api.cometapi.com/v1";

// ============================================================
// Step 1: Download Reference Image
// ============================================================
console.log("Step 1: Downloading reference image...");

const imageUrl = "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=1280";
const imageResponse = await fetch(imageUrl);
const imageBuffer = Buffer.from(await imageResponse.arrayBuffer());
const imagePath = path.join(os.tmpdir(), "veo3.1_reference.jpg");
fs.writeFileSync(imagePath, imageBuffer);
console.log(`Reference image saved to: ${imagePath}`);

// ============================================================
// Step 2: Create Video Generation Task (form-data with image upload)
// ============================================================
console.log("\nStep 2: Creating video generation task...");

const formData = new FormData();
formData.append("prompt", "A breathtaking mountain landscape with clouds flowing through valleys, cinematic aerial shot");
formData.append("model", "veo3.1");
formData.append("size", "16x9");
formData.append("input_reference", new Blob([fs.readFileSync(imagePath)], { type: "image/jpeg" }), "reference.jpg");

const createResponse = await fetch(`${base_url}/videos`, {
  method: "POST",
  headers: {
    "Authorization": api_key,
  },
  body: formData,
});

const createResult = await createResponse.json();
console.log("Create response:", JSON.stringify(createResult, null, 2));

const taskId = createResult?.id;
if (!taskId) {
  console.log("Error: Failed to get task_id from response");
  process.exit(1);
}
console.log(`Task ID: ${taskId}`);

// ============================================================
// Step 3: Query Task Status
// ============================================================
console.log("\nStep 3: Querying task status...");

const queryResponse = await fetch(`${base_url}/videos/${taskId}`, {
  method: "GET",
  headers: {
    "Authorization": api_key,
  },
});

const queryResult = await queryResponse.json();
console.log("Query response:", JSON.stringify(queryResult, null, 2));

const taskStatus = queryResult?.data?.status;
console.log(`Task status: ${taskStatus}`);

Veo 3.1のバージョン

Veo 3.1に複数のスナップショットが存在する理由としては、アップデート後の出力変動により旧版スナップショットの一貫性維持が必要な場合、開発者に適応・移行期間を提供するため、グローバル/リージョナルエンドポイントに対応する異なるスナップショットによるユーザー体験最適化などが考えられます。各バージョンの詳細な差異については、公式ドキュメントをご参照ください。

モデルID説明提供状況リクエスト
veo3.1-all使用技術は非公式で、生成は不安定などチャット 形式
veo3.1推奨、最新モデルを指す非同期生成