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` |
|---|---|---|
|
|
|
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 |
|---|---|---|
|
|
|
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. |
|
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" nurBild-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_adultder einzige zulässige Wert fürpersonGeneration. - 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. |
|
| Weniger Details (Dialog) Animation mit ausgeschnittenem Papier. Neue Bibliothekarin: „Wo sind die verbotenen Bücher?“ Alter Kurator: „Das tun wir nicht. Sie behalten uns.“ |
|
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. |
|
| 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. |
|
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. |
|
| Referenzbild (generiert von Nano Banana) Ein pinkes Prinzessinnenkostüm für Kinder mit Zauberstab und Tiara vor einem einfachen Produkthintergrund. |
|
| Ausgabevideo (von Veo 3.1 generiert) Erstelle eine lustige Cartoon-Version des Fisches im Kostüm, der herumschwimmt und mit dem Zauberstab wedelt. |
|
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. |
|
| Letztes Bild (von Nano Banana generiert) Zeige, was passiert, wenn das Auto von einer Klippe abhebt. |
|
| Ausgabevideo (von Veo 3.1 generiert) Optional |
|
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. |
|
| Ausgabevideo (von Veo 3.1 generiert) Erweitere dieses Video, sodass der Gleitschirmflieger langsam nach unten fliegt. |
|
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. |
|
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. |
|
| 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. |
|
Schneeleopard
| Eingabeaufforderung | Generierte Ausgabe |
|---|---|
| Einfacher Prompt: Ein niedliches Wesen mit Fell wie ein Schneeleopard läuft durch einen Winterwald, 3D-Cartoon-Stil. |
|
| 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. |
|
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 |
|
| Ein Satellit, der durch den Weltraum schwebt, mit dem Mond und einigen Sternen im Hintergrund. |
|
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. |
|
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ß. |
|
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. |
|
| Sehr nah aufgenommenes Auge, in dem sich eine Stadt spiegelt. |
|
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. |
|
| Cineastische Nahaufnahme einer traurigen Frau, die bei Regen im Bus fährt, kühle Blautöne, traurige Stimmung. |
|
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. |
|
| 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. |
|
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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
- Erste Schritte mit der Veo 3.1 API: Experimentieren Sie im Veo Quickstart Colab und im Veo 3.1-Applet.
- In unserer Einführung in das Prompt-Design erfahren Sie, wie Sie noch bessere Prompts verfassen können.