Videos mit Veo 3.1 in der Gemini API erstellen

Informationen zum Videoverständnis finden Sie im Leitfaden Videoverständnis.

Veo 3.1 ist ein Modell zum Erstellen von 8‑sekündigen Videos (720p, 1080p oder 4K) mit nativ generiertem Audio. Sie können über die Gemini API programmatisch auf dieses Modell zugreifen. Weitere Informationen zu den verfügbaren Veo-Modellvarianten finden Sie im Abschnitt Modellversionen.

Veo 3.1 eignet sich für eine Vielzahl von visuellen und filmischen Stilen und bietet mehrere neue Funktionen:

  • Videos im Hochformat: Wählen Sie zwischen Videos im Querformat (16:9) und im Hochformat (9:16) aus.
  • Videoerweiterung: Sie können Videos verlängern, die zuvor mit Veo generiert wurden.
  • Frame-spezifische Generierung: Generieren Sie ein Video, indem Sie den ersten und letzten Frame angeben.
  • Bildbasierte Vorgaben: Verwenden Sie bis zu drei Referenzbilder, um den Inhalt des generierten Videos zu steuern.

Weitere Informationen zum Schreiben effektiver Text-Prompts für die Videogenerierung finden Sie im Leitfaden zu Veo-Prompts.

Text-zu-Videogenerierung

In den folgenden Beispielen wird gezeigt, wie Sie ein Video mit Dialogen, filmreifem Realismus oder kreativen Animationen erstellen können:

Dialoge und Soundeffekte

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

prompt = """A close up of two people staring at a cryptic drawing on a wall, torchlight flickering.
A man murmurs, 'This must be it. That's the secret code.' The woman looks at him and whispering excitedly, 'What did you find?'"""

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the generated video.
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video, destination="dialogue_example.mp4")
print("Generated video saved to dialogue_example.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = `A close up of two people staring at a cryptic drawing on a wall, torchlight flickering.
A man murmurs, 'This must be it. That's the secret code.' The woman looks at him and whispering excitedly, 'What did you find?'`;

let operation = await ai.models.generateVideos({
    model: "veo-3.1-generate-preview",
    prompt: prompt,
});

// Poll the operation status until the video is ready.
while (!operation.done) {
    console.log("Waiting for video generation to complete...")
    await new Promise((resolve) => setTimeout(resolve, 10000));
    operation = await ai.operations.getVideosOperation({
        operation: operation,
    });
}

// Download the generated video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "dialogue_example.mp4",
});
console.log(`Generated video saved to dialogue_example.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    prompt := `A close up of two people staring at a cryptic drawing on a wall, torchlight flickering.
    A man murmurs, 'This must be it. That's the secret code.' The woman looks at him and whispering excitedly, 'What did you find?'`

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
        nil,
        nil,
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
    log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the generated video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "dialogue_example.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

Java

import com.google.genai.Client;
import com.google.genai.types.GenerateVideosOperation;
import com.google.genai.types.GeneratedVideo;

Client client = new Client();

String prompt =
    "A close up of two people staring at a cryptic drawing on a wall, torchlight flickering.\n"
        + "A man murmurs, 'This must be it. That's the secret code.' The woman looks at him and whispering excitedly, 'What did you find?'";

GenerateVideosOperation operation =
    client.models.generateVideos("veo-3.1-generate-preview", prompt, null, null);

// Poll the operation status until the video is ready.
while (!operation.done().orElse(false)) {
  System.out.println("Waiting for video generation to complete...");
  Thread.sleep(10000);
  operation = client.operations.getVideosOperation(operation, null);
}

// Download the generated video.
GeneratedVideo generatedVideo = operation.response().get().generatedVideos().get().get(0);
client.files.download(generatedVideo, "dialogue_example.mp4", null);
System.out.println("Generated video saved to dialogue_example.mp4");

REST

# Note: This script uses jq to parse the JSON response.
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
        "prompt": "A close up of two people staring at a cryptic drawing on a wall, torchlight flickering. A man murmurs, \"This must be it. That'\''s the secret code.\" The woman looks at him and whispering excitedly, \"What did you find?\""
      }
    ]
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o dialogue_example.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 5 seconds before checking again.
  sleep 10
done

Filmischer Realismus

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

prompt = """Drone shot following a classic red convertible driven by a man along a winding coastal road at sunset, waves crashing against the rocks below.
The convertible accelerates fast and the engine roars loudly."""

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the generated video.
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video, destination="realism_example.mp4")
print("Generated video saved to realism_example.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = `Drone shot following a classic red convertible driven by a man along a winding coastal road at sunset, waves crashing against the rocks below.
The convertible accelerates fast and the engine roars loudly.`;

let operation = await ai.models.generateVideos({
    model: "veo-3.1-generate-preview",
    prompt: prompt,
});

// Poll the operation status until the video is ready.
while (!operation.done) {
    console.log("Waiting for video generation to complete...")
    await new Promise((resolve) => setTimeout(resolve, 10000));
    operation = await ai.operations.getVideosOperation({
        operation: operation,
    });
}

// Download the generated video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "realism_example.mp4",
});
console.log(`Generated video saved to realism_example.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    prompt := `Drone shot following a classic red convertible driven by a man along a winding coastal road at sunset, waves crashing against the rocks below.
  The convertible accelerates fast and the engine roars loudly.`

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
        nil,
        nil,
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
    log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the generated video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "realism_example.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

Java

import com.google.genai.Client;
import com.google.genai.types.GenerateVideosOperation;
import com.google.genai.types.GeneratedVideo;

Client client = new Client();

String prompt =
    "Drone shot following a classic red convertible driven by a man along a winding coastal road at sunset, waves crashing against the rocks below.\n"
        + "The convertible accelerates fast and the engine roars loudly.";

GenerateVideosOperation operation =
    client.models.generateVideos("veo-3.1-generate-preview", prompt, null, null);

// Poll the operation status until the video is ready.
while (!operation.done().orElse(false)) {
  System.out.println("Waiting for video generation to complete...");
  Thread.sleep(10000);
  operation = client.operations.getVideosOperation(operation, null);
}

// Download the generated video.
GeneratedVideo generatedVideo = operation.response().get().generatedVideos().get().get(0);
client.files.download(generatedVideo, "realism_example.mp4", null);
System.out.println("Generated video saved to realism_example.mp4");

REST

# Note: This script uses jq to parse the JSON response.
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
        "prompt": "Drone shot following a classic red convertible driven by a man along a winding coastal road at sunset, waves crashing against the rocks below. The convertible accelerates fast and the engine roars loudly."
      }
    ]
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o realism_example.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 5 seconds before checking again.
  sleep 10
done

Kreative Animation

Python

import time
from google import genai

client = genai.Client()
prompt = "A whimsical stop-motion animation of a tiny robot tending to a garden of glowing mushrooms on a miniature planet."

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the generated video.
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video, destination="style_example.mp4")
print("Generated video saved to style_example.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = "A whimsical stop-motion animation of a tiny robot tending to a garden of glowing mushrooms on a miniature planet.";

let operation = await ai.models.generateVideos({
    model: "veo-3.1-generate-preview",
    prompt: prompt,
});

// Poll the operation status until the video is ready.
while (!operation.done) {
    console.log("Waiting for video generation to complete...")
    await new Promise((resolve) => setTimeout(resolve, 10000));
    operation = await ai.operations.getVideosOperation({
        operation: operation,
    });
}

// Download the generated video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "style_example.mp4",
});
console.log(`Generated video saved to style_example.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    prompt := `A whimsical stop-motion animation of a tiny robot tending to a garden of glowing mushrooms on a miniature planet.`

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
        nil,
        nil,
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
    log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the generated video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "style_example.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

Java

import com.google.genai.Client;
import com.google.genai.types.GenerateVideosOperation;
import com.google.genai.types.GeneratedVideo;

Client client = new Client();

String prompt =
    "A whimsical stop-motion animation of a tiny robot tending to a garden of glowing mushrooms on a miniature planet.";

GenerateVideosOperation operation =
    client.models.generateVideos("veo-3.1-generate-preview", prompt, null, null);

// Poll the operation status until the video is ready.
while (!operation.done().orElse(false)) {
  System.out.println("Waiting for video generation to complete...");
  Thread.sleep(10000);
  operation = client.operations.getVideosOperation(operation, null);
}

// Download the generated video.
GeneratedVideo generatedVideo = operation.response().get().generatedVideos().get().get(0);
client.files.download(generatedVideo, "style_example.mp4", null);
System.out.println("Generated video saved to style_example.mp4");

REST

# Note: This script uses jq to parse the JSON response.
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
        "prompt": "A whimsical stop-motion animation of a tiny robot tending to a garden of glowing mushrooms on a miniature planet."
      }
    ]
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o style_example.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 5 seconds before checking again.
  sleep 10
done

Seitenverhältnis steuern

Mit Veo 3.1 können Sie Videos im Querformat (16:9, Standardeinstellung) oder im Hochformat (9:16) erstellen. Mit dem Parameter aspect_ratio können Sie dem Modell mitteilen, welches Sie verwenden möchten:

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

prompt = """A montage of pizza making: a chef tossing and flattening the floury dough, ladling rich red tomato sauce in a spiral, sprinkling mozzarella cheese and pepperoni, and a final shot of the bubbling golden-brown pizza, upbeat electronic music with a rhythmical beat is playing, high energy professional video."""

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
    config=types.GenerateVideosConfig(
      aspect_ratio="9:16",
    ),
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the generated video.
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video, destination="pizza_making.mp4")
print("Generated video saved to pizza_making.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = `A montage of pizza making: a chef tossing and flattening the floury dough, ladling rich red tomato sauce in a spiral, sprinkling mozzarella cheese and pepperoni, and a final shot of the bubbling golden-brown pizza, upbeat electronic music with a rhythmical beat is playing, high energy professional video.`;

let operation = await ai.models.generateVideos({
    model: "veo-3.1-generate-preview",
    prompt: prompt,
    config: {
      aspectRatio: "9:16",
    },
});

// Poll the operation status until the video is ready.
while (!operation.done) {
    console.log("Waiting for video generation to complete...")
    await new Promise((resolve) => setTimeout(resolve, 10000));
    operation = await ai.operations.getVideosOperation({
        operation: operation,
    });
}

// Download the generated video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "pizza_making.mp4",
});
console.log(`Generated video saved to pizza_making.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    prompt := `A montage of pizza making: a chef tossing and flattening the floury dough, ladling rich red tomato sauce in a spiral, sprinkling mozzarella cheese and pepperoni, and a final shot of the bubbling golden-brown pizza, upbeat electronic music with a rhythmical beat is playing, high energy professional video.`

  videoConfig := &genai.GenerateVideosConfig{
      AspectRatio: "9:16",
  }

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
        nil,
        videoConfig,
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
    log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the generated video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "pizza_making.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

REST

# Note: This script uses jq to parse the JSON response.
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
        "prompt": "A montage of pizza making: a chef tossing and flattening the floury dough, ladling rich red tomato sauce in a spiral, sprinkling mozzarella cheese and pepperoni, and a final shot of the bubbling golden-brown pizza, upbeat electronic music with a rhythmical beat is playing, high energy professional video."
      }
    ],
    "parameters": {
      "aspectRatio": "9:16"
    }
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o pizza_making.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 5 seconds before checking again.
  sleep 10
done

Auflösung steuern

Veo 3.1 kann auch direkt 720p-, 1080p- oder 4K-Videos generieren (4K ist für Veo 3.1 Lite nicht verfügbar).

Je höher die Auflösung, desto höher ist die Latenz. 4K-Videos sind auch teurer (siehe Preise).

Die Video-Erweiterung ist ebenfalls auf 720p-Videos beschränkt.

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

prompt = """A stunning drone view of the Grand Canyon during a flamboyant sunset that highlights the canyon's colors. The drone slowly flies towards the sun then accelerates, dives and flies inside the canyon."""

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
    config=types.GenerateVideosConfig(
      resolution="4k",
    ),
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the generated video.
generated_video = operation.response.generated_videos[0]
client.files.download(file=generated_video.video, destination="4k_grand_canyon.mp4")
print("Generated video saved to 4k_grand_canyon.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = `A stunning drone view of the Grand Canyon during a flamboyant sunset that highlights the canyon's colors. The drone slowly flies towards the sun then accelerates, dives and flies inside the canyon.`;

let operation = await ai.models.generateVideos({
    model: "veo-3.1-generate-preview",
    prompt: prompt,
    config: {
      resolution: "4k",
    },
});

// Poll the operation status until the video is ready.
while (!operation.done) {
    console.log("Waiting for video generation to complete...")
    await new Promise((resolve) => setTimeout(resolve, 10000));
    operation = await ai.operations.getVideosOperation({
        operation: operation,
    });
}

// Download the generated video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "4k_grand_canyon.mp4",
});
console.log(`Generated video saved to 4k_grand_canyon.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    prompt := `A stunning drone view of the Grand Canyon during a flamboyant sunset that highlights the canyon's colors. The drone slowly flies towards the sun then accelerates, dives and flies inside the canyon.`

  videoConfig := &genai.GenerateVideosConfig{
      Resolution: "4k",
  }

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
        nil,
        videoConfig,
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
    log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the generated video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "4k_grand_canyon.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

REST

# Note: This script uses jq to parse the JSON response.
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
        "prompt": "A stunning drone view of the Grand Canyon during a flamboyant sunset that highlights the canyon'\''s colors. The drone slowly flies towards the sun then accelerates, dives and flies inside the canyon."
      }
    ],
    "parameters": {
      "resolution": "4k"
    }
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o 4k_grand_canyon.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 5 seconds before checking again.
  sleep 10
done

Bild-zu-Video-Generierung

Der folgende Code zeigt, wie Sie mit Gemini 3.1 Flash Image (auch bekannt als Nano Banana 2) ein Bild generieren und dieses Bild dann als Startframe für die Generierung eines Videos mit Veo 3.1 verwenden.

Python

import time
from google import genai

client = genai.Client()

prompt = "Panning wide shot of a calico kitten sleeping in the sunshine"

# Step 1: Generate an image with Nano Banana 2.
image = client.models.generate_content(
    model="gemini-3.1-flash-image-preview",
    contents=prompt,
    config={"response_modalities":['IMAGE']}
)

# Step 2: Generate video with Veo 3.1 using the image.
operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
    image=image.parts[0].as_image(),
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the video.
video = operation.response.generated_videos[0]
client.files.download(file=video.video, destination="veo3_with_image_input.mp4")
print("Generated video saved to veo3_with_image_input.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = "Panning wide shot of a calico kitten sleeping in the sunshine";

// Step 1: Generate an image with Nano Banana 2.
const imageResponse = await ai.models.generateContent({
  model: "gemini-3.1-flash-image-preview",
  prompt: prompt,
});

// Step 2: Generate video with Veo 3.1 using the image.
let operation = await ai.models.generateVideos({
  model: "veo-3.1-generate-preview",
  prompt: prompt,
  image: {
    imageBytes: imageResponse.generatedImages[0].image.imageBytes,
    mimeType: "image/png",
  },
});

// Poll the operation status until the video is ready.
while (!operation.done) {
  console.log("Waiting for video generation to complete...")
  await new Promise((resolve) => setTimeout(resolve, 10000));
  operation = await ai.operations.getVideosOperation({
    operation: operation,
  });
}

// Download the video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "veo3_with_image_input.mp4",
});
console.log(`Generated video saved to veo3_with_image_input.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    prompt := "Panning wide shot of a calico kitten sleeping in the sunshine"

    // Step 1: Generate an image with Nano Banana 2.
    imageResponse, err := client.Models.GenerateContent(
        ctx,
        "gemini-3.1-flash-image-preview",
        prompt,
        nil, // GenerateImagesConfig
    )
    if err != nil {
        log.Fatal(err)
    }

    // Step 2: Generate video with Veo 3.1 using the image.
    operation, err := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
        imageResponse.GeneratedImages[0].Image,
        nil, // GenerateVideosConfig
    )
    if err != nil {
        log.Fatal(err)
    }

    // Poll the operation status until the video is ready.
    for !operation.Done {
        log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "veo3_with_image_input.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

Java

import com.google.genai.Client;
import com.google.genai.types.Blob;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.GenerateVideosOperation;
import com.google.genai.types.GeneratedVideo;
import com.google.genai.types.Image;

Client client = new Client();

String prompt = "Panning wide shot of a calico kitten sleeping in the sunshine";

// Step 1: Generate an image with Nano Banana 2.
GenerateContentResponse imageResponse =
    client.models.generateContent(
        "gemini-3.1-flash-image-preview",
        prompt,
        GenerateContentConfig.builder().responseModalities("IMAGE").build());

Blob inlineData = imageResponse.parts().get(0).inlineData().get();
Image image =
    Image.builder()
        .imageBytes(inlineData.data().get())
        .mimeType(inlineData.mimeType().orElse("image/png"))
        .build();

// Step 2: Generate video with Veo 3.1 using the image.
GenerateVideosOperation operation =
    client.models.generateVideos("veo-3.1-generate-preview", prompt, image, null);

// Poll the operation status until the video is ready.
while (!operation.done().orElse(false)) {
  System.out.println("Waiting for video generation to complete...");
  Thread.sleep(10000);
  operation = client.operations.getVideosOperation(operation, null);
}

// Download the video.
GeneratedVideo video = operation.response().get().generatedVideos().get().get(0);
client.files.download(video, "veo3_with_image_input.mp4", null);
System.out.println("Generated video saved to veo3_with_image_input.mp4");

Referenzbilder verwenden

Veo 3.1 akzeptiert jetzt bis zu 3 Referenzbilder, um den Inhalt des generierten Videos zu steuern. Stellen Sie Bilder einer Person, einer Figur oder eines Produkts bereit, um das Erscheinungsbild des Motivs im Ausgabevideo beizubehalten.

Wenn Sie beispielsweise diese drei mit Nano Banana generierten Bilder als Referenzen mit einem gut formulierten Prompt verwenden, wird das folgende Video erstellt:

`dress_image` `woman_image` `glasses_image`
High-Fashion-Flamingokleid mit Schichten aus rosa und fuchsienfarbenen Federn Schöne Frau mit dunklen Haaren und warmen braunen Augen Verspielte pinke, herzförmige Sonnenbrille

Python

import time
from google import genai

client = genai.Client()

prompt = "The video opens with a medium, eye-level shot of a beautiful woman with dark hair and warm brown eyes. She wears a magnificent, high-fashion flamingo dress with layers of pink and fuchsia feathers, complemented by whimsical pink, heart-shaped sunglasses. She walks with serene confidence through the crystal-clear, shallow turquoise water of a sun-drenched lagoon. The camera slowly pulls back to a medium-wide shot, revealing the breathtaking scene as the dress's long train glides and floats gracefully on the water's surface behind her. The cinematic, dreamlike atmosphere is enhanced by the vibrant colors of the dress against the serene, minimalist landscape, capturing a moment of pure elegance and high-fashion fantasy."

dress_reference = types.VideoGenerationReferenceImage(
  image=dress_image, # Generated separately with Nano Banana
  reference_type="asset"
)

sunglasses_reference = types.VideoGenerationReferenceImage(
  image=glasses_image, # Generated separately with Nano Banana
  reference_type="asset"
)

woman_reference = types.VideoGenerationReferenceImage(
  image=woman_image, # Generated separately with Nano Banana
  reference_type="asset"
)

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
    config=types.GenerateVideosConfig(
      reference_images=[dress_reference, glasses_reference, woman_reference],
    ),
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the video.
video = operation.response.generated_videos[0]
client.files.download(file=video.video, destination="veo3.1_with_reference_images.mp4")
print("Generated video saved to veo3.1_with_reference_images.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = "The video opens with a medium, eye-level shot of a beautiful woman with dark hair and warm brown eyes. She wears a magnificent, high-fashion flamingo dress with layers of pink and fuchsia feathers, complemented by whimsical pink, heart-shaped sunglasses. She walks with serene confidence through the crystal-clear, shallow turquoise water of a sun-drenched lagoon. The camera slowly pulls back to a medium-wide shot, revealing the breathtaking scene as the dress's long train glides and floats gracefully on the water's surface behind her. The cinematic, dreamlike atmosphere is enhanced by the vibrant colors of the dress against the serene, minimalist landscape, capturing a moment of pure elegance and high-fashion fantasy.";

// dressImage, glassesImage, womanImage generated separately with Nano Banana
// and available as objects like { imageBytes: "...", mimeType: "image/png" }
const dressReference = {
  image: dressImage,
  referenceType: "asset",
};
const sunglassesReference = {
  image: glassesImage,
  referenceType: "asset",
};
const womanReference = {
  image: womanImage,
  referenceType: "asset",
};

let operation = await ai.models.generateVideos({
  model: "veo-3.1-generate-preview",
  prompt: prompt,
  config: {
    referenceImages: [
      dressReference,
      sunglassesReference,
      womanReference,
    ],
  },
});

// Poll the operation status until the video is ready.
while (!operation.done) {
  console.log("Waiting for video generation to complete...");
  await new Promise((resolve) => setTimeout(resolve, 10000));
  operation = await ai.operations.getVideosOperation({
    operation: operation,
  });
}

// Download the video.
ai.files.download({
  file: operation.response.generatedVideos[0].video,
  downloadPath: "veo3.1_with_reference_images.mp4",
});
console.log(`Generated video saved to veo3.1_with_reference_images.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

  prompt := `The video opens with a medium, eye-level shot of a beautiful woman with dark hair and warm brown eyes. She wears a magnificent, high-fashion flamingo dress with layers of pink and fuchsia feathers, complemented by whimsical pink, heart-shaped sunglasses. She walks with serene confidence through the crystal-clear, shallow turquoise water of a sun-drenched lagoon. The camera slowly pulls back to a medium-wide shot, revealing the breathtaking scene as the dress's long train glides and floats gracefully on the water's surface behind her. The cinematic, dreamlike atmosphere is enhanced by the vibrant colors of the dress against the serene, minimalist landscape, capturing a moment of pure elegance and high-fashion fantasy.`

  // dressImage, glassesImage, womanImage generated separately with Nano Banana
  // and available as *genai.Image objects.
  var dressImage, glassesImage, womanImage *genai.Image

  dressReference := &genai.VideoGenerationReferenceImage{
    Image: dressImage,
    ReferenceType: "asset",
  }
  sunglassesReference := &genai.VideoGenerationReferenceImage{
    Image: glassesImage,
    ReferenceType: "asset",
  }
  womanReference := &genai.VideoGenerationReferenceImage{
    Image: womanImage,
    ReferenceType: "asset",
  }

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
    nil, // image
        &genai.GenerateVideosConfig{
      ReferenceImages: []*genai.VideoGenerationReferenceImage{
        dressReference,
        sunglassesReference,
        womanReference,
      },
    },
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
        log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "veo3.1_with_reference_images.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

REST

# Note: This script uses jq to parse the JSON response.
# It assumes dress_image_base64, glasses_image_base64, and woman_image_base64
# contain base64-encoded image data.

# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
      "prompt": "The video opens with a medium, eye-level shot of a beautiful woman with dark hair and warm brown eyes. She wears a magnificent, high-fashion flamingo dress with layers of pink and fuchsia feathers, complemented by whimsical pink, heart-shaped sunglasses. She walks with serene confidence through the crystal-clear, shallow turquoise water of a sun-drenched lagoon. The camera slowly pulls back to a medium-wide shot, revealing the breathtaking scene as the dress'\''s long train glides and floats gracefully on the water'\''s surface behind her. The cinematic, dreamlike atmosphere is enhanced by the vibrant colors of the dress against the serene, minimalist landscape, capturing a moment of pure elegance and high-fashion fantasy.",
      "referenceImages": [
        {
          "image": {"inlineData": {"mimeType": "image/png", "data": "'"$dress_image_base64"'"}},
          "referenceType": "asset"
        },
        {
          "image": {"inlineData": {"mimeType": "image/png", "data": "'"$glasses_image_base64"'"}},
          "referenceType": "asset"
        },
        {
          "image": {"inlineData": {"mimeType": "image/png", "data": "'"$woman_image_base64"'"}},
          "referenceType": "asset"
        }
      ]
    }],
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o veo3.1_with_reference_images.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 10 seconds before checking again.
  sleep 10
done

Ersten und letzten Frame verwenden

Mit Veo 3.1 können Sie Videos mithilfe von Interpolation erstellen oder den ersten und letzten Frame des Videos angeben. Informationen zum Schreiben effektiver Text-Prompts für die Videogenerierung finden Sie im Leitfaden zu Veo-Prompts.

Python

import time
from google import genai

client = genai.Client()

prompt = "A cinematic, haunting video. A ghostly woman with long white hair and a flowing dress swings gently on a rope swing beneath a massive, gnarled tree in a foggy, moonlit clearing. The fog thickens and swirls around her, and she slowly fades away, vanishing completely. The empty swing is left swaying rhythmically on its own in the eerie silence."

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt=prompt,
    image=first_image, # The starting frame is passed as a primary input
    config=types.GenerateVideosConfig(
      last_frame=last_image # The ending frame is passed as a generation constraint in the config
    ),
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the video.
video = operation.response.generated_videos[0]
client.files.download(file=video.video, destination="veo3.1_with_interpolation.mp4")
print("Generated video saved to veo3.1_with_interpolation.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = "A cinematic, haunting video. A ghostly woman with long white hair and a flowing dress swings gently on a rope swing beneath a massive, gnarled tree in a foggy, moonlit clearing. The fog thickens and swirls around her, and she slowly fades away, vanishing completely. The empty swing is left swaying rhythmically on its own in the eerie silence.";

// firstImage and lastImage generated separately with Nano Banana
// and available as objects like { imageBytes: "...", mimeType: "image/png" }
let operation = await ai.models.generateVideos({
    model: "veo-3.1-generate-preview",
    prompt: prompt,
    image: firstImage, // The starting frame is passed as a primary input
    config: {
      lastFrame: lastImage, // The ending frame is passed as a generation constraint in the config
    },
});

// Poll the operation status until the video is ready.
while (!operation.done) {
    console.log("Waiting for video generation to complete...")
    await new Promise((resolve) => setTimeout(resolve, 10000));
    operation = await ai.operations.getVideosOperation({
        operation: operation,
    });
}

// Download the video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "veo3.1_with_interpolation.mp4",
});
console.log(`Generated video saved to veo3.1_with_interpolation.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

  prompt := `A cinematic, haunting video. A ghostly woman with long white hair and a flowing dress swings gently on a rope swing beneath a massive, gnarled tree in a foggy, moonlit clearing. The fog thickens and swirls around her, and she slowly fades away, vanishing completely. The empty swing is left swaying rhythmically on its own in the eerie silence.`

  // firstImage and lastImage generated separately with Nano Banana
  // and available as *genai.Image objects.
  var firstImage, lastImage *genai.Image

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
    firstImage, // The starting frame is passed as a primary input
        &genai.GenerateVideosConfig{
      LastFrame: lastImage, // The ending frame is passed as a generation constraint in the config
    },
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
        log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "veo3.1_with_interpolation.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

REST

# Note: This script uses jq to parse the JSON response.
# It assumes first_image_base64 and last_image_base64
# contain base64-encoded image data.

# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
# The starting frame is passed as a primary input
# The ending frame is passed as a generation constraint in the config
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
      "prompt": "A cinematic, haunting video. A ghostly woman with long white hair and a flowing dress swings gently on a rope swing beneath a massive, gnarled tree in a foggy, moonlit clearing. The fog thickens and swirls around her, and she slowly fades away, vanishing completely. The empty swing is left swaying rhythmically on its own in the eerie silence.",
      "image": {"inlineData": {"mimeType": "image/png", "data": "'"$first_image_base64"'"}},
      "lastFrame": {"inlineData": {"mimeType": "image/png", "data": "'"$last_image_base64"'"}}
    }],
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o veo3.1_with_interpolation.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 10 seconds before checking again.
  sleep 10
done
`first_image` `last_image` veo3.1_with_interpolation.mp4
Eine geisterhafte Frau mit langen weißen Haaren und einem fließenden Kleid schwingt sanft auf einer Seilschaukel Die geisterhafte Frau verschwindet von der Schaukel. Ein filmisches, unheimliches Video einer Frau, die von einer Schaukel im Nebel verschwindet

Veo-Videos verlängern

Mit Veo 3.1 können Sie Videos, die Sie zuvor mit Veo erstellt haben, um 7 Sekunden und bis zu 20‑mal verlängern.

Einschränkungen für Eingabevideos:

  • Mit Veo generierte Videos dürfen maximal 141 Sekunden lang sein.
  • Die Gemini API unterstützt nur Videoerweiterungen für mit Veo generierte Videos.
  • Das Video sollte aus einer früheren Generation stammen, z. B. operation.response.generated_videos[0].video.
  • Videos werden zwei Tage lang gespeichert. Wenn ein Video jedoch für eine Erweiterung referenziert wird, wird der zweitägige Speichertimer zurückgesetzt. Sie können nur Videos verlängern, die in den letzten zwei Tagen generiert oder referenziert wurden.
  • Eingabevideos müssen eine bestimmte Länge, ein bestimmtes Seitenverhältnis und bestimmte Abmessungen haben:
    • Seitenverhältnis: 9:16 oder 16:9
    • Auflösung: 720p
    • Videolänge: maximal 141 Sekunden

Die Ausgabe der Erweiterung ist ein einzelnes Video, das das vom Nutzer eingegebene Video und das generierte erweiterte Video kombiniert. Das Video kann bis zu 148 Sekunden lang sein.

In diesem Beispiel wird ein von Veo generiertes Video, das hier mit dem ursprünglichen Prompt gezeigt wird, mit dem Parameter video und einem neuen Prompt erweitert:

Prompt Ausgabe: butterfly_video
Ein Origami-Schmetterling schlägt mit den Flügeln und fliegt durch die Glastür in den Garten. Ein Origami-Schmetterling schlägt mit den Flügeln und fliegt durch die Glastür in den Garten.

Python

import time
from google import genai

client = genai.Client()

prompt = "Track the butterfly into the garden as it lands on an orange origami flower. A fluffy white puppy runs up and gently pats the flower."

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    video=operation.response.generated_videos[0].video, # This must be a video from a previous generation
    prompt=prompt,
    config=types.GenerateVideosConfig(
        number_of_videos=1,
        resolution="720p"
    ),
)

# Poll the operation status until the video is ready.
while not operation.done:
    print("Waiting for video generation to complete...")
    time.sleep(10)
    operation = client.operations.get(operation)

# Download the video.
video = operation.response.generated_videos[0]
client.files.download(file=video.video, destination="veo3.1_extension.mp4")
print("Generated video saved to veo3.1_extension.mp4")

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const prompt = "Track the butterfly into the garden as it lands on an orange origami flower. A fluffy white puppy runs up and gently pats the flower.";

// butterflyVideo must be a video from a previous generation
// available as an object like { videoBytes: "...", mimeType: "video/mp4" }
let operation = await ai.models.generateVideos({
    model: "veo-3.1-generate-preview",
    video: butterflyVideo,
    prompt: prompt,
    config: {
        numberOfVideos: 1,
        resolution: "720p",
    },
});

// Poll the operation status until the video is ready.
while (!operation.done) {
    console.log("Waiting for video generation to complete...")
    await new Promise((resolve) => setTimeout(resolve, 10000));
    operation = await ai.operations.getVideosOperation({
        operation: operation,
    });
}

// Download the video.
ai.files.download({
    file: operation.response.generatedVideos[0].video,
    downloadPath: "veo3.1_extension.mp4",
});
console.log(`Generated video saved to veo3.1_extension.mp4`);

Ok

package main

import (
    "context"
    "log"
    "os"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

  prompt := `Track the butterfly into the garden as it lands on an orange origami flower. A fluffy white puppy runs up and gently pats the flower.`

  // butterflyVideo must be a video from a previous generation
  // available as a *genai.Video object.
  var butterflyVideo *genai.Video

    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        prompt,
    nil, // image
    butterflyVideo,
        &genai.GenerateVideosConfig{
      NumberOfVideos: 1,
      Resolution: "720p",
    },
    )

    // Poll the operation status until the video is ready.
    for !operation.Done {
        log.Println("Waiting for video generation to complete...")
        time.Sleep(10 * time.Second)
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Download the video.
    video := operation.Response.GeneratedVideos[0]
    client.Files.Download(ctx, video.Video, nil)
    fname := "veo3.1_extension.mp4"
    _ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
    log.Printf("Generated video saved to %s\n", fname)
}

REST

# Note: This script uses jq to parse the JSON response.
# It assumes butterfly_video_base64 contains base64-encoded
# video data from a previous generation.

# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
      "prompt": "Track the butterfly into the garden as it lands on an orange origami flower. A fluffy white puppy runs up and gently pats the flower.",
      "video": {"inlineData": {"mimeType": "video/mp4", "data": "'"$butterfly_video_base64"'"}}
    }],
    "parameters": {
      "numberOfVideos": 1,
      "resolution": "720p"
    }
  }' | jq -r .name)

# Poll the operation status until the video is ready
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Extract the download URI from the final response.
    video_uri=$(echo "${status_response}" | jq -r '.response.generateVideoResponse.generatedSamples[0].video.uri')
    echo "Downloading video from: ${video_uri}"

    # Download the video using the URI and API key and follow redirects.
    curl -L -o veo3.1_extension.mp4 -H "x-goog-api-key: $GEMINI_API_KEY" "${video_uri}"
    break
  fi
  # Wait for 10 seconds before checking again.
  sleep 10
done

Informationen zum Schreiben effektiver Text-Prompts für die Videogenerierung finden Sie im Leitfaden zu Veo-Prompts.

Umgang mit asynchronen Vorgängen

Die Videogenerierung ist eine rechenintensive Aufgabe. Wenn Sie eine Anfrage an die API senden, wird ein Job mit langer Ausführungszeit gestartet und sofort ein operation-Objekt zurückgegeben. Anschließend müssen Sie den Status abfragen, bis das Video bereit ist. Dies wird durch den Status done angezeigt, der „true“ ist.

Der Kern dieses Prozesses ist eine Abfrageschleife, die regelmäßig den Status des Jobs prüft.

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

# After starting the job, you get an operation object.
operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt="A cinematic shot of a majestic lion in the savannah.",
)

# Alternatively, you can use operation.name to get the operation.
operation = types.GenerateVideosOperation(name=operation.name)

# This loop checks the job status every 10 seconds.
while not operation.done:
    time.sleep(10)
    # Refresh the operation object to get the latest status.
    operation = client.operations.get(operation)

# Once done, the result is in operation.response.
# ... process and download your video ...

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

// After starting the job, you get an operation object.
let operation = await ai.models.generateVideos({
  model: "veo-3.1-generate-preview",
  prompt: "A cinematic shot of a majestic lion in the savannah.",
});

// Alternatively, you can use operation.name to get the operation.
// operation = types.GenerateVideosOperation(name=operation.name)

// This loop checks the job status every 10 seconds.
while (!operation.done) {
    await new Promise((resolve) => setTimeout(resolve, 1000));
    // Refresh the operation object to get the latest status.
    operation = await ai.operations.getVideosOperation({ operation });
}

// Once done, the result is in operation.response.
// ... process and download your video ...

Ok

package main

import (
    "context"
    "log"
    "time"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    // After starting the job, you get an operation object.
    operation, _ := client.Models.GenerateVideos(
        ctx,
        "veo-3.1-generate-preview",
        "A cinematic shot of a majestic lion in the savannah.",
        nil,
        nil,
    )

    // This loop checks the job status every 10 seconds.
    for !operation.Done {
        time.Sleep(10 * time.Second)
        // Refresh the operation object to get the latest status.
        operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
    }

    // Once done, the result is in operation.Response.
    // ... process and download your video ...
}

Java

import com.google.genai.Client;
import com.google.genai.types.GenerateVideosOperation;

Client client = new Client();

// After starting the job, you get an operation object.
GenerateVideosOperation operation =
    client.models.generateVideos(
        "veo-3.1-generate-preview",
        "A cinematic shot of a majestic lion in the savannah.",
        null,
        null);

// Alternatively, you can use operation.name to construct the operation.
operation = GenerateVideosOperation.builder().name(operation.name().get()).build();

// This loop checks the job status every 10 seconds.
while (!operation.done().orElse(false)) {
  Thread.sleep(10000);
  // Refresh the operation object to get the latest status.
  operation = client.operations.getVideosOperation(operation, null);
}

// Once done, the result is in operation.response().
// ... process and download your video ...

REST

# Note: This script uses jq to parse the JSON response.
# GEMINI API Base URL
BASE_URL="https://generativelanguage.googleapis.com/v1beta"

# Send request to generate video and capture the operation name into a variable.
operation_name=$(curl -s "${BASE_URL}/models/veo-3.1-generate-preview:predictLongRunning" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -X "POST" \
  -d '{
    "instances": [{
        "prompt": "A cinematic shot of a majestic lion in the savannah."
      }
    ]
  }' | jq -r .name)

# This loop checks the job status every 10 seconds.
while true; do
  # Get the full JSON status and store it in a variable.
  status_response=$(curl -s -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${operation_name}")

  # Check the "done" field from the JSON stored in the variable.
  is_done=$(echo "${status_response}" | jq .done)

  if [ "${is_done}" = "true" ]; then
    # Once done, the result is in status_response.
    # ... process and download your video ...
    echo "Video generation complete."
    break
  fi
  # Wait for 10 seconds before checking again.
  echo "Waiting for video generation to complete..."
  sleep 10
done

Veo API-Parameter und -Spezifikationen

Mit den folgenden Parametern können Sie den Prozess der Videogenerierung in Ihrer API-Anfrage steuern.

Parameter Veo 3.1 und Veo 3.1 Fast Veo 3.1 Lite Veo 3 und Veo 3 Fast
Instanzen
prompt:
Die Textbeschreibung für das Video. Unterstützt Audiohinweise.
string string string
image:
Ein Ausgangsbild, das animiert werden soll.
Image Objekt Image Objekt Image Objekt
lastFrame:
Das letzte Bild für ein Interpolationsvideo, zu dem übergegangen werden soll. Muss in Kombination mit dem Parameter image verwendet werden.
Image Objekt Image Objekt Image Objekt
referenceImages:
Bis zu drei Bilder, die als Stil- und Inhaltsreferenzen verwendet werden sollen.
VideoGenerationReferenceImage Objekt n/a Objekt –
video:
Video, das für die Videoerweiterung verwendet werden soll.
Video-Objekt aus einer vorherigen Generation – –
Parameter
aspectRatio:
Das Seitenverhältnis des Videos.
"16:9" (Standard),
"9:16"

"16:9" (Standard),
"9:16"
"16:9" (Standard),
"9:16"
durationSeconds:
Länge des generierten Videos.
"4", "6", "8".

Muss „8“ sein, wenn Erweiterungen, Referenzbilder oder die Auflösungen 1080p und 4K verwendet werden
"4", "6", "8".

Muss „8“ sein, wenn Referenzbilder verwendet werden oder bei 1080p
"4", "6", "8".

Muss „8“ sein, wenn Erweiterungen, Referenzbilder oder die Auflösungen 1080p und 4K verwendet werden
personGeneration:
Steuert die Generierung von Personen. (Informationen zu regionalen Einschränkungen finden Sie unter Einschränkungen.)
Text-zu-Video und Erweiterung:
Nur "allow_all"

Bild-zu-Video, Interpolation und Referenzbilder:
Nur "allow_adult"
Text-zu-Video:
Nur "allow_all"

Bild-zu-Video, Interpolation und Referenzbilder:
Nur "allow_adult"
Text-zu-Video:
"allow_all" nur

Bild-zu-Video:
"allow_adult" nur
resolution:
Die Auflösung des Videos.
"720p" (Standard),
"1080p" (nur 8 Sekunden Dauer),
"4k" (nur 8 Sekunden Dauer)

"720p" nur für Erweiterung
"720p" (Standard),
"1080p" (nur 8 Sekunden Dauer unterstützt)
"720p" (Standard),
"1080p" (nur 8 Sekunden Dauer),
"4k" (nur 8 Sekunden Dauer)

"720p" nur für Erweiterung

Der Parameter seed ist auch für Veo 3-Modelle verfügbar. Der Determinismus wird dadurch nicht garantiert, aber leicht verbessert.

Modellfunktionen

Funktion Veo 3.1 und Veo 3.1 Fast Veo 3.1 Lite Veo 3 und Veo 3 Fast
Audio:
Generiert Audio nativ mit Video.
✔️ Immer aktiv ✔️ Immer aktiv ✔️ Immer aktiv
Eingabemodalitäten:
Der für die Generierung verwendete Eingabetyp.
Text-zu-Video, Bild-zu-Video, Video-zu-Video Text-zu-Video, Bild-zu-Video Text-zu-Video, Bild-zu-Video
Auflösung:
Die Ausgabeauflösung des Videos.
720p, 1080p (nur 8 Sekunden lang), 4K (nur 8 Sekunden lang)

720p nur bei Verwendung der Videoerweiterung.
720p, 1080p (nur 8 Sekunden lang)
720p und 1080p (nur 16:9)
Framerate:
Die Ausgabeframerate des Videos.
24 fps 24 fps 24 fps
Videodauer:
Länge des generierten Videos.
8 Sekunden, 6 Sekunden, 4 Sekunden

8 Sekunden nur bei 1080p oder 4K oder bei Verwendung von Referenzbildern
8 Sekunden, 6 Sekunden, 4 Sekunden

8 Sekunden nur bei 1080p oder bei Verwendung von Referenzbildern
8 Sekunden
Videos pro Anfrage:
Anzahl der pro Anfrage generierten Videos.
1 1 1
Status:
Modellverfügbarkeit
Vorschau Vorschau Stable

Beschränkungen

  • Prompts mit mehreren Videos:Das Verweisen auf mehrere Videos oder das Ziehen von Schlussfolgerungen aus mehreren Videos wird derzeit nicht unterstützt. Der Versuch, Prompts mit mehreren Videos zu verwenden, kann zu einer schlechteren Modellleistung oder unerwarteten Ausgaben führen.
  • Sprachunterstützung:Englisch (EN) wird vollständig unterstützt. Andere Sprachen wurden nicht getestet. Sie funktionieren möglicherweise, die Ergebnisse können jedoch variieren.
  • Anfragelatenz: Min.: 11 Sekunden; Max.: 6 Minuten (zu Spitzenzeiten).
  • Regionale Einschränkungen: In der EU, im Vereinigten Königreich, in der Schweiz und in der MENA-Region ist allow_adult der einzige zulässige Wert für personGeneration.
  • Aufbewahrung von Videos: Generierte Videos werden zwei Tage lang auf dem Server gespeichert und dann entfernt. Wenn Sie eine lokale Kopie speichern möchten, müssen Sie das Video innerhalb von 2 Tagen nach der Erstellung herunterladen. Verlängerte Videos werden als neu generierte Videos behandelt.
  • Wasserzeichen:Von Veo erstellte Videos werden mit SynthID, unserem Tool zum Versehen von KI-generierten Inhalten mit Wasserzeichen und zu deren Identifizierung, mit einem Wasserzeichen versehen. Videos können mit der SynthID-Prüfplattform verifiziert werden.
  • Sicherheit: Generierte Videos werden durch Sicherheitsfilter und Prozesse zur Überprüfung auf Memorierung geleitet, um Risiken im Zusammenhang mit Datenschutz, Urheberrecht und Bias zu minimieren.
  • Audiofehler:Veo 3.1 blockiert manchmal die Erstellung eines Videos aufgrund von Sicherheitsfiltern oder anderen Verarbeitungsproblemen mit dem Audio. Wenn die Erstellung Ihres Videos blockiert wird, fallen keine Kosten an.

Leitfaden für Veo-Prompts

In diesem Abschnitt finden Sie Beispiele für Videos, die Sie mit Veo erstellen können, und erfahren, wie Sie Prompts ändern können, um unterschiedliche Ergebnisse zu erzielen.

Sicherheitsfilter

Veo wendet Sicherheitsfilter in Gemini an, um sicherzustellen, dass generierte Videos und hochgeladene Fotos keine anstößigen Inhalte enthalten. Prompts, die gegen unsere Nutzungsbedingungen und Richtlinien verstoßen, werden blockiert.

Grundlagen zum Schreiben von Prompts

Gute Prompts sind beschreibend und klar. Um das Beste aus Veo herauszuholen, sollten Sie zuerst Ihre Kernidee identifizieren, diese dann durch Hinzufügen von Keywords und Modifikatoren verfeinern und videospezifische Begriffe in Ihre Prompts einbauen.

Der Prompt sollte die folgenden Elemente enthalten:

  • Thema: Das Objekt, die Person, das Tier oder die Landschaft, die Sie in Ihrem Video haben möchten, z. B. Stadtbild, Natur, Fahrzeuge oder Welpen.
  • Aktion: Was das Motiv tut (z. B. gehen, laufen oder den Kopf drehen).
  • Stil: Geben Sie die kreative Richtung mit bestimmten Filmstil-Keywords an, z. B. Sci-Fi, Horrorfilm, Film Noir oder Animationsstile wie Cartoon.
  • Kamerapositionierung und -bewegung: [Optional] Steuern Sie die Position und Bewegung der Kamera mit Begriffen wie Vogelperspektive, Augenhöhe, Aufnahme von oben, Dolly-Aufnahme oder Froschperspektive.
  • Komposition: [Optional] Wie die Szene „gefilmt“ sein soll, z. B. Totale, Close-up, Einzelaufnahme oder Zweieraufnahme.
  • Fokus- und Objektiveffekte: [Optional] Verwenden Sie Begriffe wie geringe Tiefenschärfe, große Tiefenschärfe, Weichzeichnung, Makroobjektiv und Weitwinkelobjektiv, um bestimmte visuelle Effekte zu erzielen.
  • Ambiance: [Optional] Wie Farbe und Licht zur Szene beitragen, z. B. Blautöne, Nacht oder warme Töne.

Weitere Tipps zum Verfassen von Prompts

  • Beschreibende Sprache verwenden: Verwenden Sie Adjektive und Adverbien, um Veo ein klares Bild zu vermitteln.
  • Gesichtsdetails optimieren: Geben Sie Gesichtsdetails als Fokus des Fotos an, z. B. mit dem Wort Porträt im Prompt.

Umfassendere Prompt-Strategien finden Sie unter Einführung in das Prompt-Design.

Aufforderung zur Audioeingabe

Sie können Veo Hinweise für Soundeffekte, Umgebungsgeräusche und Dialoge geben. Das Modell erfasst die Nuancen dieser Hinweise, um einen synchronisierten Soundtrack zu generieren.

  • Dialoge: Verwenden Sie Anführungszeichen für bestimmte Aussagen. (Beispiel: „Das muss der Schlüssel sein“, murmelte er.)
  • Soundeffekte (SFX): Beschreiben Sie Geräusche explizit. (Beispiel: Reifen quietschen laut, Motor heult auf.)
  • Umgebungsgeräusche:Beschreiben Sie die Geräuschkulisse der Umgebung. (Beispiel: Ein leises, unheimliches Summen ist im Hintergrund zu hören.)

Diese Videos zeigen, wie Veo 3 mit immer detaillierteren Prompts Audio generiert.

Eingabeaufforderung Generierte Ausgabe
Mehr Details (Dialog und Atmosphäre)
Eine Totale eines nebligen Waldes im pazifischen Nordwesten. Zwei erschöpfte Wanderer, ein Mann und eine Frau, kämpfen sich durch Farne, als der Mann plötzlich stehen bleibt und auf einen Baum starrt. Nahaufnahme: Frische, tiefe Kratzspuren sind in die Baumrinde geritzt. Mann: (Hand am Jagdmesser) „Das ist kein gewöhnlicher Bär.“ Frau: (mit ängstlicher Stimme, während sie den Wald absucht) „Was ist es dann?“ Eine raue Rinde, knackende Zweige, Schritte auf der feuchten Erde. Ein einzelner Vogel zwitschert.
Zwei Personen im Wald stoßen auf Spuren eines Bären.
Weniger Details (Dialog)
Animation mit ausgeschnittenem Papier. Neue Bibliothekarin: „Wo sind die verbotenen Bücher?“ Alter Kurator: „Das tun wir nicht. Sie behalten uns.“
Animierte Bibliothekare, die über verbotene Bücher diskutieren

Probieren Sie diese Prompts selbst aus, um die Audioausgabe zu hören. Veo ausprobieren

Prompts mit Referenzbildern erstellen

Sie können ein oder mehrere Bilder als Eingabe verwenden, um Ihre generierten Videos mit den Bild-zu-Video-Funktionen von Veo zu steuern. Veo verwendet das Eingabebild als ersten Frame. Wählen Sie ein Bild aus, das Ihrer Vorstellung von der ersten Szene Ihres Videos am nächsten kommt, um Alltagsgegenstände zu animieren, Zeichnungen und Gemälde zum Leben zu erwecken und Naturszenen Bewegung und Ton hinzuzufügen.

Eingabeaufforderung Generierte Ausgabe
Eingabebild (von Nano Banana generiert)
Ein hyperrealistisches Makrofoto von winzigen Surfern, die auf Meereswellen in einem rustikalen Waschbecken aus Stein reiten. Ein Vintage-Messingwasserhahn läuft und erzeugt die ewige Brandung. Surreal, skurril, helles natürliches Licht.
Winzige Miniatursurfer, die auf Meereswellen in einem rustikalen Waschbecken aus Stein reiten.
Ausgabevideo (von Veo 3.1 generiert)
Ein surreales, kinoreifes Makrovideo. Winzige Surfer reiten auf ewigen, rollenden Wellen in einem Waschbecken aus Stein. Ein laufender Vintage-Messingwasserhahn erzeugt die endlose Brandung. Die Kamera schwenkt langsam über die skurrile, sonnenbeschienene Szene, während die Miniaturfiguren gekonnt durch das türkisfarbene Wasser gleiten.
Winzige Surfer, die in einem Waschbecken auf den Wellen reiten.

Mit Veo 3.1 können Sie Referenzbilder oder Bildelemente verwenden, um den Inhalt Ihres generierten Videos zu steuern. Stellen Sie bis zu drei Asset-Bilder einer einzelnen Person, einer Figur oder eines Produkts bereit. Veo behält das Erscheinungsbild des Motivs im Ausgabevideo bei.

Eingabeaufforderung Generierte Ausgabe
Referenzbild (von Nano Banana generiert)
Ein Tiefsee-Anglerfisch lauert im tiefen, dunklen Wasser, die Zähne gefletscht und der Köder leuchtet.
Ein dunkler und leuchtender Anglerfisch
Referenzbild (generiert von Nano Banana)
Ein pinkes Prinzessinnenkostüm für Kinder mit Zauberstab und Tiara vor einem einfachen Produkthintergrund.
Ein rosa Prinzessinnenkostüm für Kinder
Ausgabevideo (von Veo 3.1 generiert)
Erstelle eine lustige Cartoon-Version des Fisches im Kostüm, der herumschwimmt und mit dem Zauberstab wedelt.
Ein Anglerfisch in einem Prinzessinnenkostüm

Mit Veo 3.1 können Sie auch Videos generieren, indem Sie den ersten und letzten Frame des Videos angeben.

Eingabeaufforderung Generierte Ausgabe
Erstes Bild (generiert von Nano Banana)
Ein Bild von vorne in hoher Qualität und fotorealistischem Stil, das eine rote Katze zeigt, die in einem roten Cabrio-Rennwagen an der französischen Riviera fährt.
Eine rote Katze, die ein rotes Cabrio-Rennauto fährt
Letztes Bild (von Nano Banana generiert)
Zeige, was passiert, wenn das Auto von einer Klippe abhebt.
Eine rote Katze, die ein rotes Cabrio fährt, stürzt von einer Klippe
Ausgabevideo (von Veo 3.1 generiert)
Optional
Eine Katze fährt von einer Klippe und hebt ab

Mit dieser Funktion kannst du die Komposition deiner Aufnahme genau steuern, indem du den Start- und Endframe festlegst. Laden Sie ein Bild hoch oder verwenden Sie einen Frame aus einem zuvor generierten Video, damit Ihre Szene genau so beginnt und endet, wie Sie es sich vorstellen.

Prompt für die Erweiterung

Wenn Sie Ihr mit Veo generiertes Video mit Veo 3.1 (nicht verfügbar für Veo 3.1 Lite) verlängern möchten, verwenden Sie das Video als Eingabe zusammen mit einem optionalen Text-Prompt. Mit „Verlängern“ wird die letzte Sekunde oder die letzten 24 Frames des Videos abgeschlossen und die Aktion fortgesetzt.

Die Stimme kann nicht effektiv verlängert werden, wenn sie in der letzten Sekunde des Videos nicht vorhanden ist.

Eingabeaufforderung Generierte Ausgabe
Eingabevideo (von Veo 3.1 generiert)
Der Paraglider startet vom Gipfel des Berges und gleitet über die mit Blumen bedeckten Täler hinunter.
Ein Gleitschirmflieger startet von einem Berggipfel
Ausgabevideo (von Veo 3.1 generiert)
Erweitere dieses Video, sodass der Gleitschirmflieger langsam nach unten fliegt.
Ein Gleitschirmflieger startet von einem Berggipfel und gleitet dann langsam nach unten

Beispiel-Prompts und -Ausgaben

In diesem Abschnitt werden mehrere Prompts vorgestellt, die zeigen, wie beschreibende Details das Ergebnis jedes Videos verbessern können.

Eiszapfen

In diesem Video wird gezeigt, wie Sie die Elemente der Grundlagen des Prompt-Schreibens in Ihrem Prompt verwenden können.

Eingabeaufforderung Generierte Ausgabe
Nahaufnahme (Komposition) von schmelzenden Eiszapfen (Motiv) an einer gefrorenen Felswand (Kontext) mit kühlen Blautönen (Atmosphäre), herangezoomt (Kamerabewegung), wobei die Details der Wassertropfen (Aktion) erhalten bleiben. Tropfende Eiszapfen vor blauem Hintergrund

Mann am Telefon

Diese Videos zeigen, wie Sie Ihren Prompt mit immer spezifischeren Details überarbeiten können, damit Veo die Ausgabe nach Ihren Wünschen anpasst.

Eingabeaufforderung Generierte Ausgabe
Weniger Details
Die Kamera fährt heran und zeigt einen verzweifelten Mann in einem grünen Trenchcoat in Nahaufnahme. Er telefoniert mit einem Wählscheibentelefon an der Wand, das von einer grünen Leuchtstoffröhre beleuchtet wird. Es sieht aus wie eine Filmszene.
Mann, der am Telefon spricht.
Mehr Details
Eine filmische Nahaufnahme zeigt einen verzweifelten Mann in einem abgetragenen grünen Trenchcoat, der ein Wählscheibentelefon an einer schmutzigen Ziegelwand bedient, die in das unheimliche Licht einer grünen Leuchtreklame getaucht ist. Die Kamera fährt heran und zeigt die Anspannung in seinem Kiefer und die Verzweiflung in seinem Gesicht, während er versucht, den Anruf zu tätigen. Die geringe Tiefenschärfe lenkt den Fokus auf seine gerunzelte Stirn und das schwarze Wählscheibentelefon. Der Hintergrund verschwimmt in einem Meer aus Neonfarben und undeutlichen Schatten, was ein Gefühl von Dringlichkeit und Isolation vermittelt.
Mann, der telefoniert

Schneeleopard

Eingabeaufforderung Generierte Ausgabe
Einfacher Prompt:
Ein niedliches Wesen mit Fell wie ein Schneeleopard läuft durch einen Winterwald, 3D-Cartoon-Stil.
Der Schneeleopard ist lethargisch.
Detaillierter Prompt:
Erstelle eine kurze 3D-animierte Szene im fröhlichen Cartoon-Stil. Ein niedliches Wesen mit schneeleopardenähnlichem Fell, großen, ausdrucksstarken Augen und einer freundlichen, runden Form, das fröhlich durch einen fantasievollen Winterwald stolziert. Die Szene sollte abgerundete, schneebedeckte Bäume, sanft fallende Schneeflocken und warmes Sonnenlicht, das durch die Äste fällt, zeigen. Die hüpfenden Bewegungen und das breite Lächeln des Wesens sollen pure Freude vermitteln. Der Ton sollte optimistisch und herzerwärmend sein, mit hellen, fröhlichen Farben und verspielten Animationen.
Der Schneeleopard läuft schneller.

Beispiele nach Schreibelementen

Anhand dieser Beispiele sehen Sie, wie Sie Ihre Prompts für jedes grundlegende Element optimieren können.

Betreff und Kontext

Geben Sie den Hauptfokus (Motiv) und den Hintergrund oder die Umgebung (Kontext) an.

Eingabeaufforderung Generierte Ausgabe
Eine Architekturzeichnung eines weißen Beton-Apartmentgebäudes mit fließenden organischen Formen, die sich nahtlos in üppiges Grün und futuristische Elemente einfügen Platzhalter.
Ein Satellit, der durch den Weltraum schwebt, mit dem Mond und einigen Sternen im Hintergrund. Satellit, der in der Atmosphäre schwebt

Aktion

Geben Sie an, was das Motiv tut (z.B. gehen, laufen oder den Kopf drehen).

Eingabeaufforderung Generierte Ausgabe
Eine Totale einer Frau, die am Strand entlanggeht und zufrieden und entspannt in Richtung Horizont blickt, während die Sonne untergeht. Der Sonnenuntergang ist wunderschön.

Stil

Fügen Sie Keywords hinzu, um die Generierung in Richtung einer bestimmten Ästhetik zu lenken (z.B. surreal, Vintage, futuristisch, Film Noir).

Eingabeaufforderung Generierte Ausgabe
Film noir-Stil, Mann und Frau gehen auf der Straße, Mystery, filmisch, Schwarz-Weiß. Der Film-noir-Stil ist absolut wunderschön.

Kamerabewegung und Bildkomposition

Geben Sie an, wie sich die Kamera bewegt (POV-Video, Vogelperspektive, Drohnenaufnahme) und wie die Szene „gefilmt“ sein soll (Totale, Close-up, Froschperspektive).

Eingabeaufforderung Generierte Ausgabe
POV-Aufnahme aus einem Oldtimer, der nachts im Regen in Kanada fährt, filmisch. Der Sonnenuntergang ist wunderschön.
Sehr nah aufgenommenes Auge, in dem sich eine Stadt spiegelt. Der Sonnenuntergang ist wunderschön.

Ambiente

Farbpaletten und Beleuchtung beeinflussen die Stimmung. Versuchen Sie es mit Begriffen wie „gedämpfte Orangetöne“, „warme Farbtöne“, „natürliches Licht“, „Sonnenaufgang“ oder „kühle Blautöne“.

Eingabeaufforderung Generierte Ausgabe
Eine Nahaufnahme eines Mädchens, das einen niedlichen Golden Retriever-Welpen im Park hält, Sonnenlicht. Ein Welpe im Arm eines jungen Mädchens.
Cineastische Nahaufnahme einer traurigen Frau, die bei Regen im Bus fährt, kühle Blautöne, traurige Stimmung. Eine Frau, die in einem Bus fährt und traurig ist.

Seitenverhältnisse

Mit Veo können Sie das Seitenverhältnis für Ihr Video festlegen.

Eingabeaufforderung Generierte Ausgabe
Widescreen (16:9)
Erstelle ein Video mit einer Drohnenaufnahme, die einen Mann in einem roten Cabrio in Palm Springs in den 1970er-Jahren verfolgt, warmes Sonnenlicht, lange Schatten.
Ein Mann, der ein rotes Cabriolet in Palm Springs fährt, im Stil der 1970er-Jahre.
Hochformat (9:16)
Erstelle ein Video-Highlight, das die sanfte Bewegung eines majestätischen hawaiianischen Wasserfalls in einem üppigen Regenwald zeigt. Konzentriere dich auf realistischen Wasserfluss, detailliertes Laub und natürliches Licht, um Ruhe zu vermitteln. Halte das rauschende Wasser, die neblige Atmosphäre und das gesprenkelte Sonnenlicht fest, das durch das dichte Blätterdach fällt. Verwenden Sie flüssige, filmische Kamerabewegungen, um den Wasserfall und seine Umgebung zu zeigen. Der Ton sollte ruhig und realistisch sein und die Zuschauer in die friedliche Schönheit des hawaiianischen Regenwalds entführen.
Ein majestätischer hawaiianischer Wasserfall in einem üppigen Regenwald.

Modellversionen

Weitere Informationen zur Nutzung des Veo-Modells finden Sie auf der Seite Preise und unter Ratenbegrenzungen.

Veo 3.1 (Vorabversion)

Attribut Beschreibung
-Modellcode

Gemini API

veo-3.1-generate-preview

Unterstützte Datentypen

Eingabe

Text, Bild

Ausgabe

Video mit Audio

-Limits

Texteingabe

1.024 Tokens

Ausgabevideo

1

Letzte Aktualisierung Januar 2026

Veo 3.1 Fast (Vorabversion)

Attribut Beschreibung
-Modellcode

Gemini API

veo-3.1-fast-generate-preview

Unterstützte Datentypen

Eingabe

Text, Bild

Ausgabe

Video mit Audio

-Limits

Texteingabe

1.024 Tokens

Ausgabevideo

1

Letzte Aktualisierung Januar 2026

Veo 3.1 Lite (Vorabversion)

Attribut Beschreibung
-Modellcode

Gemini API

veo-3.1-lite-generate-preview

Unterstützte Datentypen

Eingabe

Text, Bild

Ausgabe

Video mit Audio

-Limits

Texteingabe

1.024 Tokens

Ausgabevideo

1

Letzte Aktualisierung März 2026

Veo 3 (eingestellt)

Attribut Beschreibung
-Modellcode

Gemini API

veo-3.0-generate-001

Unterstützte Datentypen

Eingabe

Text, Bild

Ausgabe

Video mit Audio

-Limits

Texteingabe

1.024 Tokens

Ausgabevideo

1

Letzte Aktualisierung Juli 2025

Veo 3 Fast (eingestellt)

Attribut Beschreibung
-Modellcode

Gemini API

veo-3.0-fast-generate-001

Unterstützte Datentypen

Eingabe

Text, Bild

Ausgabe

Video mit Audio

-Limits

Texteingabe

1.024 Tokens

Ausgabevideo

1

Letzte Aktualisierung Juli 2025

Mit den Veo Fast-Versionen können Entwickler Videos mit Ton erstellen, die eine hohe Qualität bieten und für Geschwindigkeit und geschäftliche Anwendungsfälle optimiert sind. Sie eignen sich ideal für Backend-Dienste, die Anzeigen programmatisch generieren, Tools für schnelle A/B-Tests von Creative-Konzepten oder Apps, die schnell Inhalte für soziale Medien erstellen müssen.

Nächste Schritte