画像から動画を生成する

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.

    Go to project selector

  3. Enable the Vertex AI API.

    Enable the API

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

    Go to project selector

  5. Enable the Vertex AI API.

    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 に指定した認証情報を使用します。

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

    画像から動画を生成する

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

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

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

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

    コンソール

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

      メディア スタジオ

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

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

      • モデル: 使用可能なオプションからモデルを選択します。
      • アスペクト比: 16:9 または 9:16 を選択します。

      • 検索結果の数: スライダーを調整するか、14 の範囲の値を入力します。

      • 動画の長さ: 5 秒8 秒の長さを選択します。

      • 出力ディレクトリ: [参照] をクリックして、出力ファイルを保存する Cloud Storage バケットを作成または選択します。

    4. 省略可: [安全性] セクションで、次のいずれかの [人物の生成] 設定を選択します。

      • 許可(成人向けのみ): デフォルト値。成人の人物または顔のみを生成します。若者や子供の人物や顔を生成しないでください。

      • 許可しない: 人物や顔を生成しません。

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

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

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

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

    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(GA)
        • 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: 生成する動画ファイルの数。指定できるのは整数値(1 ~ 4)です。
      • DURATION: 生成する動画ファイルの長さ。指定できる整数値は 5 ~ 8 です。
      • その他のオプション パラメータ

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

        "parameters": {
          "aspectRatio": "ASPECT_RATIO",
          "negativePrompt": "NEGATIVE_PROMPT",
          "personGeneration": "PERSON_SAFETY_SETTING",
          "sampleCount": RESPONSE_COUNT,
          "seed": SEED_NUMBER
        }
        • ASPECT_RATIO: 文字列。省略可。生成される動画のアスペクト比を定義します。値: 16:9(デフォルト、横向き)または 9:16(縦向き)。
        • NEGATIVE_PROMPT: 文字列。省略可。モデルが生成しないようにする内容を記述したテキスト文字列。
        • PERSON_SAFETY_SETTING: 文字列。省略可。人物や顔の生成を許可するかどうかを制御する安全性設定。値:
          • allow_adult(デフォルト値): 成人のみの生成を許可します。
          • disallow: 画像に人物や顔が含まれないようにします。
        • 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。使用可能な値:
        • veo-2.0-generate-001(GA)
        • veo-3.0-generate-preview(プレビュー)
      • 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",
        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

    次のステップ