Veo 是 Google 的高保真视频生成模型,能够生成各种电影和视觉风格的视频。Veo 可以捕捉提示的细微差别,从而在各个帧中呈现复杂的细节。
本指南将介绍如何使用 Veo 生成视频。如需获取有关如何编写视频提示的提示,请参阅 Veo 提示指南。
Veo 版本
Gemini API 提供两种视频生成模型:Veo 3 和 Veo 2。 我们建议使用最新模型 Veo 3,因为它在质量和音频生成方面表现出色。
Veo 3 目前处于预览版阶段,可能无法大规模用于生产环境。 Veo 2 处于稳定状态,可提供更好的制作体验。
如需详细了解各型号之间的主要功能差异,请查看型号版本比较部分。
根据文本生成视频
本部分中的代码示例使用 Veo 3 生成包含集成音频的视频。
Python
import time
from google import genai
from google.genai import types
client = genai.Client()
operation = client.models.generate_videos(
model="veo-3.0-generate-preview",
prompt="Panning wide shot of a purring kitten sleeping in the sunshine",
config=types.GenerateVideosConfig(
person_generation="allow_all", # "allow_adult" and "dont_allow" for Veo 2 only
aspect_ratio="16:9", # "16:9", and "9:16" for Veo 2 only
),
)
while not operation.done:
time.sleep(20)
operation = client.operations.get(operation)
for n, generated_video in enumerate(operation.response.generated_videos):
client.files.download(file=generated_video.video)
generated_video.video.save(f"video{n}.mp4")
JavaScript
import { GoogleGenAI } from "@google/genai";
import { createWriteStream } from "fs";
import { Readable } from "stream";
const ai = new GoogleGenAI({});
async function main() {
let operation = await ai.models.generateVideos({
model: "veo-3.0-generate-preview",
prompt: "Panning wide shot of a purring kitten sleeping in the sunshine",
config: {
personGeneration: "allow_all",
aspectRatio: "16:9",
},
});
while (!operation.done) {
await new Promise((resolve) => setTimeout(resolve, 10000));
operation = await ai.operations.getVideosOperation({
operation: operation,
});
}
operation.response?.generatedVideos?.forEach(async (generatedVideo, n) => {
const resp = await fetch(`${generatedVideo.video?.uri}&key=GEMINI_API_KEY`); // append your API key
const writer = createWriteStream(`video${n}.mp4`);
Readable.fromWeb(resp.body).pipe(writer);
});
}
main();
Go
package main
import (
"context"
"fmt"
"os"
"time"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
videoConfig := &genai.GenerateVideosConfig{
AspectRatio: "16:9",
PersonGeneration: "allow_all",
}
operation, _ := client.Models.GenerateVideos(
ctx,
"veo-3.0-generate-preview",
"Panning wide shot of a purring kitten sleeping in the sunshine",
nil,
videoConfig,
)
for !operation.Done {
time.Sleep(20 * time.Second)
operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
}
for n, video := range operation.Response.GeneratedVideos {
client.Files.Download(ctx, video.Video, nil)
fname := fmt.Sprintf("video_%d.mp4", n)
_ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
}
}
REST
# Use curl to send a POST request to the predictLongRunning endpoint.
# The request body includes the prompt for video generation.
curl "${BASE_URL}/models/veo-3.0-generate-preview:predictLongRunning" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-X "POST" \
-d '{
"instances": [{
"prompt": "Panning wide shot of a purring kitten sleeping in the sunshine"
}
],
"parameters": {
"aspectRatio": "16:9",
"personGeneration": "allow_all",
}
}' | tee result.json | jq .name | sed 's/"//g' > op_name
# Obtain operation name to download video.
op_name=$(cat op_name)
# Check against status of operation.
while true; do
is_done=$(curl -H "x-goog-api-key: $GEMINI_API_KEY" "${BASE_URL}/${op_name}" | tee op_check.json | jq .done)
if [ "${is_done}" = "true" ]; then
cat op_check.json
echo "** Attach API_KEY to download video, or examine error message."
break
fi
echo "** Video ${op_name} has not downloaded yet! Check again after 5 seconds..."
# Wait for 5 seoncds to check again.
sleep 5
done
此代码大约需要一分钟才能运行完毕,但如果资源受限,可能需要更长时间。运行完毕后,您应该会看到一段小猫睡觉的视频,就像我们这里展示的这段视频一样。
如果您看到的是错误消息而不是视频,则表示资源受限,无法完成您的请求。在这种情况下,请再次运行代码。
生成的视频会在服务器上存储 2 天,之后会被移除。如果您想保存生成的视频的本地副本,必须在生成后的 2 天内运行 result()
和 save()
。
根据图片生成视频
以下代码使用 Imagen 生成图片,然后将生成的图片用作所生成视频的起始帧。
首先,使用 Imagen 生成图片:
Python
prompt="Panning wide shot of a calico kitten sleeping in the sunshine",
imagen = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
aspect_ratio="16:9",
number_of_images=1
)
)
imagen.generated_images[0].image
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
const response = await ai.models.generateImages({
model: "imagen-3.0-generate-002",
prompt: "Panning wide shot of a calico kitten sleeping in the sunshine",
config: {
numberOfImages: 1,
},
});
// you'll pass response.generatedImages[0].image.imageBytes to Veo
Go
package main
import (
"context"
"fmt"
"os"
"time"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
config := &genai.GenerateImagesConfig{
AspectRatio: "16:9",
NumberOfImages: 1,
}
response, _ := client.Models.GenerateImages(
ctx,
"imagen-3.0-generate-002",
"Panning wide shot of a calico kitten sleeping in the sunshine",
config,
)
// you'll pass response.GeneratedImages[0].Image to Veo
}
然后,使用生成的图片作为第一帧来生成视频:
Python
operation = client.models.generate_videos(
model="veo-2.0-generate-001",
prompt=prompt,
image = imagen.generated_images[0].image,
config=types.GenerateVideosConfig(
person_generation="dont_allow", # "dont_allow" or "allow_adult"
aspect_ratio="16:9", # "16:9" or "9:16"
number_of_videos=2
),
)
# Wait for videos to generate
while not operation.done:
time.sleep(20)
operation = client.operations.get(operation)
for n, video in enumerate(operation.response.generated_videos):
fname = f'with_image_input{n}.mp4'
print(fname)
client.files.download(file=video.video)
video.video.save(fname)
JavaScript
import { GoogleGenAI } from "@google/genai";
import { createWriteStream } from "fs";
import { Readable } from "stream";
const ai = new GoogleGenAI({});
async function main() {
// get image bytes from Imagen, as shown above
let operation = await ai.models.generateVideos({
model: "veo-2.0-generate-001",
prompt: "Panning wide shot of a calico kitten sleeping in the sunshine",
image: {
imageBytes: response.generatedImages[0].image.imageBytes, // response from Imagen
mimeType: "image/png",
},
config: {
aspectRatio: "16:9",
numberOfVideos: 2,
},
});
while (!operation.done) {
await new Promise((resolve) => setTimeout(resolve, 10000));
operation = await ai.operations.getVideosOperation({
operation: operation,
});
}
operation.response?.generatedVideos?.forEach(async (generatedVideo, n) => {
const resp = await fetch(
`${generatedVideo.video?.uri}&key=GEMINI_API_KEY`, // append your API key
);
const writer = createWriteStream(`video${n}.mp4`);
Readable.fromWeb(resp.body).pipe(writer);
});
}
main();
Go
image := response.GeneratedImages[0].Image
videoConfig := &genai.GenerateVideosConfig{
AspectRatio: "16:9",
NumberOfVideos: 2,
}
operation, _ := client.Models.GenerateVideos(
ctx,
"veo-2.0-generate-001",
"A dramatic scene based on the input image",
image,
videoConfig,
)
for !operation.Done {
time.Sleep(20 * time.Second)
operation, _ = client.Operations.GetVideosOperation(ctx, operation, nil)
}
for n, video := range operation.Response.GeneratedVideos {
client.Files.Download(ctx, video.Video, nil)
fname := fmt.Sprintf("video_with_image_input_%d.mp4", n)
_ = os.WriteFile(fname, video.Video.VideoBytes, 0644)
}
Veo 模型参数
(命名惯例因编程语言而异。)
prompt
:视频的文本提示。如果存在,image
参数是可选的。image
:用作视频第一帧的图片。如果存在,prompt
参数是可选的。negativePrompt
:一个文本字符串,用于描述您想要阻止模型生成的内容aspectRatio
:更改生成的视频的宽高比。"16:9"
:Veo 3 和 Veo 2 支持此功能。"9:16"
:仅在 Veo 2 中受支持(默认为"16:9"
)。
personGeneration
:允许模型生成包含人物的视频。支持以下值:- 文本转视频生成:
"allow_all"
:生成包含成人和儿童的视频。 目前,Veo 3 唯一可用的personGeneration
值。"dont_allow"
:仅限 Veo 2。不允许包含人物或人脸。"allow_adult"
:仅限 Veo 2。生成包含成人但不包含儿童的视频。
- 图片转视频生成:仅限 Veo 2
"dont_allow"
:不允许包含人物或人脸。"allow_adult"
:生成包含成人但不包含儿童的视频。
- 请参阅限制。
- 文本转视频生成:
numberOfVideos
:请求的输出视频1
:Veo 3 和 Veo 2 支持2
:仅在 Veo 2 中受支持。
durationSeconds
:仅限 Veo 2。每个输出视频的时长(以秒为单位),介于5
和8
之间。- 无法为 Veo 3 配置,默认设置为 8 秒。
enhancePrompt
:仅限 Veo 2。启用或停用提示重写器。 默认处于启用状态。- 无法为 Veo 3 配置,默认提示增强器始终处于开启状态。
如需并排查看 Veo 3 和 Veo 2 之间的参数差异,请参阅模型版本比较表。
规格
模态 |
|
请求延迟时间 |
|
可变长度生成 |
|
解决方法 | 720p |
帧速率 | 24 帧/秒 |
宽高比 |
|
输入语言(文字转视频) | 英语 |
限制 |
Veo 创建的视频会使用 SynthID(我们的 AI 生成内容水印添加和识别工具)添加水印,并会通过安全过滤和记忆检查流程,以帮助降低隐私权、版权和偏见风险。
Veo 提示指南
Veo 指南的这一部分包含一些示例视频,展示了如何使用 Veo 创作视频,以及如何修改提示以获得不同的效果。
安全过滤器
Veo 会在 Gemini 中应用安全过滤器,以帮助确保生成的视频和上传的照片不包含冒犯性内容。 违反我们条款和准则的提示会被屏蔽。
提示撰写的基础知识
良好的提示应具有描述性且清晰明了。如要充分利用 Veo,请先确定核心创意,然后通过添加关键字和修饰符来完善创意,并在提示中加入视频专用术语。
您的提示应包含以下元素:
- 正文:您希望在视频中呈现的对象、人物、动物或场景,例如城市景观、自然、车辆或小狗。
- 动作:正文正在执行的动作(例如,走路、跑步或转头)。
- 风格:使用特定的电影风格关键字(例如科幻、恐怖片、黑色电影)或动画风格(例如卡通)来指定创意方向。
- 相机定位和运动:[可选] 使用航拍、平视、俯拍、轨道拍摄或仰拍等术语控制相机的位置和运动。
- 构图:[可选] 镜头取景方式,例如广角镜头、特写镜头、单人镜头或双人镜头。
- 对焦和镜头效果:[可选] 使用浅景深、深景深、柔焦、微距镜头和广角镜头等术语来实现特定的视觉效果。
- 氛围:[可选] 颜色和光线对场景的贡献,例如蓝色调、夜间或暖色调。
- 隐式或显式音频提示:[仅限 Veo 3] 使用 Veo 3,您可以提供音效、环境噪音和对话提示。
有关撰写提示的更多技巧
以下提示可帮助您撰写用于生成视频的提示:
- 使用描述性语言:使用形容词和副词为 Veo 描绘清晰的画面。
- 提供背景信息:根据需要,添加背景信息以帮助模型理解您的意图。
- 参考特定艺术风格:如果您有特定的审美观,请参考特定艺术风格或艺术运动。
- 使用提示工程工具:可考虑探索提示工程工具或资源,以帮助您优化提示并实现最佳结果。如需了解详情,请参阅提示设计简介。
- 增强个人和群组图片中的面部细节:指定面部细节作为照片的焦点,例如在提示中使用“portrait”一词。
提示和输出示例
本部分提供了多个提示,重点介绍了描述性细节如何提升每个视频的最终效果。
集成音频
这些视频演示了如何通过提供越来越详细的提示来让 Veo 3 生成音频。
提示 | 生成的输出 |
---|---|
更多细节 特写镜头:两个人盯着墙上的一幅神秘图画,火光闪烁。“这一定是钥匙,”他一边低声说道,一边描摹着图案。“不过,这是什么意思呢?”她困惑地问道,同时歪了歪头。潮湿的石头、精美的雕刻、隐藏的符号。背景中传来一阵微弱而诡异的嗡嗡声。 |
![]() |
减少细节 露营(定格动画):露营者:“我现在与大自然融为一体了!”熊:“大自然希望有一些个人空间”。 |
![]() |
不妨亲自尝试一下这些提示,听听音频效果! 试用 Veo 3
冰柱
本视频演示了如何在提示中使用提示撰写基础知识中的元素。
提示 | 生成的输出 |
---|---|
特写镜头(构图):冰冻岩壁(背景)上融化的冰柱(正文),冷蓝色调(氛围),放大(镜头运动),保持水滴(动作)的特写细节。 |
![]() |
一位男士正在手机
这些视频演示了如何通过添加越来越具体的细节来修改提示,让 Veo 按照您的喜好优化输出内容。
提示 | 生成的输出 |
---|---|
细节较少 镜头从远处推近,展现一位身着绿色风衣、神情绝望的男人。他正在用一部转盘式壁挂电话拨打电话,电话上亮着绿色霓虹灯。看起来像电影场景。 |
![]() |
更多细节 一个电影特写镜头跟随着一位身着破旧绿色风衣、神情绝望的男人,他正在拨打安装在粗糙砖墙上的转盘式电话,周围笼罩着绿色霓虹灯的诡异光芒。镜头缓缓推进,显示出他下巴的紧张感,以及他努力拨打电话时脸上刻着的绝望。浅景深效果将焦点对准了他紧锁的眉头和黑色的拨号手机,模糊了背景,使其变成一片模糊的霓虹色彩和不清晰的阴影,营造出一种紧迫感和孤立感。 |
![]() |
雪豹
此示例展示了 Veo 可能会针对简单提示生成的输出。
提示 | 生成的输出 |
---|---|
一只毛皮像雪豹一样可爱的生物在冬季森林中行走,3D 卡通风格渲染。 |
![]() |
奔跑的雪豹
此提示包含更多细节,并展示了可能更接近您想要的视频效果的生成输出。
提示 | 生成的输出 |
---|---|
创作一段欢快的卡通风格的 3D 动画短片。一只可爱的生物,有着雪豹般的皮毛、富有表现力的大眼睛和圆润友好的身形,在奇幻的冬季森林中欢快地跳跃。场景中应有圆润的雪树、缓缓飘落的雪花,以及透过树枝的温暖阳光。生物活泼的动作和灿烂的笑容应传达出纯粹的喜悦。采用欢快温馨的基调,搭配明亮欢快的色彩和活泼的动画。 |
![]() |
按写作要素划分的示例
以下示例展示了如何根据每个基本要素优化提示。
主题
此示例展示了如何指定拍摄对象描述。说明可以包含一个主题,也可以包含多个主题和操作。在此示例中,我们的主题是“白色混凝土公寓楼”。
提示 | 生成的输出 |
---|---|
一栋白色混凝土公寓楼的建筑效果图,具有流畅的有机形状,与茂盛的绿色植物和未来派元素无缝融合 |
![]() |
上下文
此示例展示了如何指定上下文。正文所处的背景或环境非常重要。尝试将正文置于各种背景下,例如繁忙的街道或外太空。
提示 | 生成的输出 |
---|---|
一颗卫星在太空中漂浮,背景是月球和一些星星。 |
![]() |
操作
此示例展示了如何指定动作:被拍摄对象正在做什么,例如走路、跑步或转头。
提示 | 生成的输出 |
---|---|
广角镜头:一位女性在海滩上行走,在日落时分面朝地平线,看起来很满足和放松。 |
![]() |
样式
此示例展示了如何指定风格。您可以添加关键字来提高生成质量,并使生成结果更贴近预期风格,例如浅景深、电影剧照、极简主义、超现实主义、复古、未来主义或双重曝光。
提示 | 生成的输出 |
---|---|
黑色电影风格,一男一女走在街上,神秘、电影感、黑白。 |
![]() |
相机运动
此示例展示了如何指定相机运动。拍摄运动画面的选项包括第一人称视角拍摄、航拍、跟踪无人机视角拍摄或跟踪拍摄。
提示 | 生成的输出 |
---|---|
第一人称视角镜头:一辆复古汽车在雨中行驶,加拿大夜景,电影风格。 |
![]() |
乐曲
此示例展示了如何指定构图:拍摄的画面如何取景(广角镜头、特写镜头、低角度等)。
提示 | 生成的输出 |
---|---|
眼睛的超近特写,眼睛中映出城市。 |
![]() |
制作一段视频,内容为:一位冲浪者拿着冲浪板走在海滩上,美丽的日落,电影风格的广角镜头。 |
![]() |
气氛
此示例展示了如何指定氛围。调色板在摄影中发挥着至关重要的作用,可影响照片的氛围并传达预期的情感。您可以尝试“柔和的橙色暖色调”“自然光”“日出”或“日落”等效果。例如,暖色调的金色调色板可以为照片注入浪漫而富有氛围的感觉。
提示 | 生成的输出 |
---|---|
在阳光明媚的公园里,一个女孩抱着可爱的金毛猎犬小狗的特写镜头。 |
![]() |
电影般的特写镜头:一位悲伤的女性在雨中乘坐公交车,画面采用冷色调蓝色,营造出悲伤的氛围。 |
![]() |
使用参考图片生成视频
您可以使用 Veo 的图像转视频功能让图片栩栩如生。 您可以使用现有素材资源,也可以尝试使用 Imagen 生成新内容。
提示 | 生成的输出 |
---|---|
拿着巧克力棒的兔子。 |
![]() |
兔子跑开了。 |
![]() |
否定提示
否定提示是一种强大的工具,有助于指定您不希望出现在视频中的元素。在“否定提示”一词后,描述您想要阻止模型生成的内容。请按照以下提示操作。
❌ 请勿使用指令性语言或“没有”或“不”等字词。例如,“没有墙壁”或“不显示墙壁”。
✅ 请描述您不想看到的内容。例如,“墙、框架”,表示您不希望视频中出现墙或框架。
提示 | 生成的输出 |
---|---|
生成一段简短的风格化动画,内容是一棵巨大的孤零零的橡树,树叶在强风中剧烈摇摆。树的形状应略显夸张、奇特,树枝应呈现出动态的流动感。树叶应呈现出各种秋季色彩,在风中旋转飞舞。动画应使用暖色调的调色板,营造出温馨的氛围。 |
![]() |
生成一段简短的风格化动画,内容是一棵巨大的孤零零的橡树,树叶在强风中剧烈摇摆。树的形状应略显夸张、奇特,树枝应呈现出动态的流动感。树叶应呈现出各种秋季色彩,在风中旋转飞舞。动画应使用暖色调的调色板,营造出温馨的氛围。
使用负面提示 - 城市背景、人造结构、黑暗、暴风雨或威胁性氛围。 |
![]() |
宽高比
Gemini Veo 视频生成支持以下两种宽高比:
宽高比 | 说明 |
---|---|
宽屏或 16:9 | 电视、显示器和手机屏幕(横向)最常用的宽高比。如果您想拍摄更多背景(例如风景),请使用这种宽高比。 |
纵向或 9:16 (仅限 Veo 2) |
旋转的宽屏。这种宽高比深受短视频应用(例如 YouTube Shorts)的欢迎。可将这种宽高比用于具有强烈垂直方向的肖像或较高对象,例如建筑物、树或瀑布。
|
宽屏
此提示的宽高比为 16:9,属于宽屏。
提示 | 生成的输出 |
---|---|
制作一段视频,内容为:在 20 世纪 70 年代的棕榈泉,一名男子驾驶一辆红色敞篷车,无人机跟拍视角,阳光温暖,阴影拉长。 |
![]() |
纵向
此提示是纵向宽高比 9:16 的示例。此比例仅适用于 Veo 2。
提示 | 生成的输出 |
---|---|
制作一段视频,突出展示茂密热带雨林中壮丽的夏威夷瀑布的流畅动态。重点呈现逼真的水流、细致的树叶和自然光照,以传达宁静感。捕捉湍急的水流、雾气弥漫的氛围以及透过茂密树冠的斑驳阳光。使用流畅的电影级镜头移动来展示瀑布及其周围环境。力求营造宁静而真实的氛围,让观看者仿佛置身于夏威夷热带雨林的宁静美景之中。 |
![]() |
模型版本比较
我们建议使用 Veo 3,以获得最佳性能、保真度和画质。
下表介绍了 Veo 2 与当前 Veo 3 预览版在功能、规格和参数方面的差异:
型号 | Veo 3 | Veo 2 |
---|---|---|
适用的国家/地区 | 预览 | 稳定版 |
音频 | 带音频的视频(始终开启) | 无音频 |
生成 | 文本转视频 | 文字和图片转视频 |
每个请求的视频数量 | 1 | 1 或 2 |
aspectRatio |
仅 16:9 |
16:9 或 19:6 |
personGeneration |
allow_all (无法配置) |
allow_adult 、dont_allow 或 allow_all (仅限文字转视频) |
durationSeconds |
无法配置,只能设置为 8 秒 | 5-8 秒 |
enhancePrompt |
不可配置,始终处于开启状态 | 启用(默认)或停用 |
您只需将模型名称更新为使用 Veo 3 模型代码,并对参数进行少量更改,即可从 Veo 2 迁移到 Veo 3。
后续步骤
- 通过 Veo Colab 获得更多 AI 视频生成经验。
- 前往 Google DeepMind 网站,查看使用 Veo 2 制作的精彩示例