Vertex AI で Veo を使用して画像から動画を生成する

Vertex AI で Veo を使用すると、画像とテキストのプロンプトから新しい動画を生成できます。サポートされているインターフェースには、 Google Cloud コンソールと Vertex AI API があります。

動画生成用の効果的なテキスト プロンプトの作成方法については、Veo プロンプト ガイドをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Enable the Vertex AI API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. 環境の認証を設定します。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

    画像から動画を生成する

    入力例 出力例
    1. 入力画像1
      かぎ針編みの象の PNG ファイルを入力する
    2. テキスト プロンプト: 象が自然に動き回っている

    かぎ針編みの象の出力動画

    1 Vertex AI の Imagen を使用して、プロンプト「サバンナを歩く、複雑な模様のかぎ針編みの象」から生成された画像

    画像のみを入力として使用するか、画像と記述テキストを入力として使用して、新しい動画を生成できます。次のサンプルは、画像とテキストから動画を生成する基本的な手順を示しています。

    コンソール

    1. Google Cloud コンソールで、[Vertex AI Studio] > [Media Studio] ページに移動します。

      Media Studio

    2. [動画] をクリックします。

    3. 省略可: [設定] ペインで、次の設定を構成します。

      • モデル: 使用可能なオプションからモデルを選択します。
      • アスペクト比: 16:9 または 9:16 を選択します。
      • 検索結果の表示件数: スライダーを調整するか、14 の値を入力します。
      • 動画の長さ: 5 秒8 秒の長さを選択します。
      • 出力ディレクトリ: [参照] をクリックして、出力ファイルを保存する Cloud Storage バケットを作成または選択します。
    4. 省略可: [安全性] セクションで、次のいずれかの人物生成の設定を選択します。

      • Allow (Adults only): デフォルト値。成人の人物または顔のみを生成します。若者や子供の人物や顔を生成しません。

      • Don't allow: 人物や顔を生成しません。

    5. 省略可: [詳細オプション] セクションで、動画生成をランダム化するためのシード値を入力します。

    6. [プロンプトを入力します] ボックスで、 [アップロード] をクリックします。

    7. アップロードするローカル画像を選択し、[選択] をクリックします。

    8. [プロンプトを記述] ボックスに、生成する動画の説明となるテキスト プロンプトを入力します。

    9. [生成] をクリックします。

    REST

    環境をセットアップしたら、REST を使用してテキスト プロンプトをテストできます。次のサンプルは、パブリッシャー モデルのエンドポイントにリクエストを送信します。

    Veo API の詳細については、Vertex AI の Veo API をご覧ください。

    1. 動画生成リクエストを送信するには、次のコマンドを使用します。このリクエストにより長時間実行オペレーションが開始され、指定した Cloud Storage バケットに出力が保存されます。

      リクエストのデータを使用する前に、次のように置き換えます。

      • PROJECT_ID: Google Cloud プロジェクト ID を表す文字列。
      • MODEL_ID: 使用するモデル ID を表す文字列。指定できる値は次のとおりです。
        • veo-2.0-generate-001(一般提供)
        • veo-3.0-generate-preview(プレビュー)
      • TEXT_PROMPT: 動画の生成をガイドするために使用されるテキスト プロンプト。
      • INPUT_IMAGE: 入力画像を表す Base64 エンコード文字列。最適な品質を得るには、入力画像の解像度が 720p(1280 x 720 ピクセル)以上で、アスペクト比が 16:9 または 9:16 であることをおすすめします。他のアスペクト比やサイズの画像は、アップロード時にサイズ変更されるか中央で切り抜かれることがあります。
      • MIME_TYPE: 入力画像の MIME タイプを表す文字列。次の MIME タイプの画像のみがサポートされています。
        • "image/jpeg"
        • "image/png"
      • OUTPUT_STORAGE_URI: 省略可。出力動画を保存する Cloud Storage バケットを表す文字列。指定しない場合、動画のバイト数がレスポンスで返されます。たとえば "gs://video-bucket/output/"
      • RESPONSE_COUNT: 生成する動画ファイルの数。指定できる値の範囲は 14 です。
      • DURATION: 生成された動画ファイルの長さを表す整数。各モデルで使用できる値は次のとおりです。
        • Veo 2 モデル: 58
        • Veo 3 モデル: 8
      • その他のオプション パラメータ

        ユースケースに応じて、次のオプションの変数を使用します。"parameters": {} オブジェクトに次のパラメータの一部またはすべてを追加します。

        "parameters": {
          "aspectRatio": "ASPECT_RATIO",
          "negativePrompt": "NEGATIVE_PROMPT",
          "personGeneration": "PERSON_SAFETY_SETTING",
          // "resolution": RESOLUTION, // Veo 3 models only
          "sampleCount": RESPONSE_COUNT,
          "seed": SEED_NUMBER
        }
        • ASPECT_RATIO: 省略可。生成された動画のアスペクト比を説明する文字列値。次の値を使用できます。
          • 横向きの "16:9"
          • "9:16"(縦向き)

          デフォルト値は "16:9" です。

        • NEGATIVE_PROMPT: 省略可。モデルが生成しないようにするコンテンツを記述した文字列値。
        • PERSON_SAFETY_SETTING: 省略可。人物や顔の生成の安全性設定を制御する文字列値。次の値を使用できます。
          • "allow_adult": 成人の人物とその顔のみが生成されるようにします。
          • "disallow": 人物や顔を生成しません。

          デフォルト値は "allow_adult" です。

        • RESOLUTION: 省略可: 生成された動画の解像度を制御する文字列値。Veo 3 モデルのみでサポートされています。次の値を使用できます。
          • "720p"
          • "1080p"

          デフォルト値は "720p" です。

        • RESPONSE_COUNT: 省略可。生成する動画の数を表す整数値。指定できる値の範囲は 14 です。
        • SEED_NUMBER: 省略可。モデルが確定的な動画を生成するために使用する uint32 値。他のパラメータを変更せずにリクエストにシード番号を指定すると、モデルは同じ動画を生成するように導かれます。指定できる値の範囲は 04294967295 です。

      HTTP メソッドと URL:

      POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:predictLongRunning

      リクエストの本文(JSON):

      {
        "instances": [
          {
            "prompt": "TEXT_PROMPT",
            "image": {
              "bytesBase64Encoded": "INPUT_IMAGE",
              "mimeType": "MIME_TYPE"
            }
          }
        ],
        "parameters": {
          "storageUri": "OUTPUT_STORAGE_URI",
          "sampleCount": RESPONSE_COUNT
        }
      }
      

      リクエストを送信するには、次のいずれかのオプションを選択します。

      curl

      リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:predictLongRunning"

      PowerShell

      リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:predictLongRunning" | Select-Object -Expand Content
      このリクエストは、一意のオペレーション ID を含む完全なオペレーション名を返します。この完全なオペレーション名を使用して、動画生成リクエストのステータスをポーリングします。
      {
        "name": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/a1b07c8e-7b5a-4aba-bb34-3e1ccb8afcc8"
      }
      

    2. 省略可: 動画生成の長時間実行オペレーションのステータスを確認します。

      リクエストのデータを使用する前に、次のように置き換えます。

      • PROJECT_ID: 実際の Google Cloud プロジェクト ID
      • MODEL_ID: 使用するモデル ID。
      • OPERATION_ID: 元の動画生成リクエストで返された一意のオペレーション ID。

      HTTP メソッドと URL:

      POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:fetchPredictOperation

      リクエストの本文(JSON):

      {
        "operationName": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID/operations/OPERATION_ID"
      }
      

      リクエストを送信するには、次のいずれかのオプションを選択します。

      curl

      リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:fetchPredictOperation"

      PowerShell

      リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

      $cred = gcloud auth print-access-token
      $headers = @{ "Authorization" = "Bearer $cred" }

      Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MODEL_ID:fetchPredictOperation" | Select-Object -Expand Content
      このリクエストは、オペレーションがまだ実行中か完了しているかなど、オペレーションに関する情報を返します。

    Python

    インストール

    pip install --upgrade google-genai

    詳しくは、SDK リファレンス ドキュメントをご覧ください。

    Vertex AI で Gen AI SDK を使用するための環境変数を設定します。

    # Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
    # with appropriate values for your project.
    export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
    export GOOGLE_CLOUD_LOCATION=global
    export GOOGLE_GENAI_USE_VERTEXAI=True

    import time
    from google import genai
    from google.genai.types import GenerateVideosConfig, Image
    
    client = genai.Client()
    
    # TODO(developer): Update and un-comment below line
    # output_gcs_uri = "gs://your-bucket/your-prefix"
    
    operation = client.models.generate_videos(
        model="veo-3.0-generate-preview",
        prompt="Extreme close-up of a cluster of vibrant wildflowers swaying gently in a sun-drenched meadow.",
        image=Image(
            gcs_uri="gs://cloud-samples-data/generative-ai/image/flowers.png",
            mime_type="image/png",
        ),
        config=GenerateVideosConfig(
            aspect_ratio="16:9",
            output_gcs_uri=output_gcs_uri,
        ),
    )
    
    while not operation.done:
        time.sleep(15)
        operation = client.operations.get(operation)
        print(operation)
    
    if operation.response:
        print(operation.result.generated_videos[0].video.uri)
    
    # Example response:
    # gs://your-bucket/your-prefix

    次のステップ