# Veo 教程：用 Gemini API 生成 AI 视频

> 想在代码里用 Veo 生成视频，先安装 Google 的 google-genai 包，用 Gemini API 密钥创建客户端，再用提示词调用 generate_videos。然后轮询任务直到完成，保存 MP4。Veo 3.1 生成 4、6 或 8 秒的片段，分辨率 720p 或 1080p，带声音，Google 把它列为付费功能。

Mindket 编辑部 · 发布于 2026-11-06 · 更新于 2026-11-06 · https://mindket.com/cn/learn/ai-video/veo-tutorial

## 要点

- 用提示词调用 generate_videos，再轮询任务并保存文件。
- 画幅、分辨率和反向提示词都写在 config 对象里。
- 从一张图开始，固定尾帧，或传入最多三张参考图来保持画面风格。
- 想用对话的方式修改片段时，换成 Gemini Omni。

## 开始之前：三个模型 ID，一项付费功能

Veo 是 Google 的视频模型。你通过 Gemini API 使用它：这是让你自己的代码向 Google 的服务器发请求、再取回视频的接口。一个叫 google-genai 的软件包（SDK）把这些请求包装好。Google 的 [Veo 笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Veo.ipynb)把 Veo 标为付费功能，所以它的示例代码默认是关着的，要你自己把开关打开。

你需要一个来自 Google AI Studio 的 Gemini API 密钥，以及 2.9.0 或更新版本的 SDK。Veo 3 及之后的版本会同时生成声音，Veo 2 还会保留一段时间，但生成的是无声视频。如果不想写代码，Mindket 的[用 Gemini 和 Flow 做 AI 视频](https://mindket.com/cn/learn/ai-images-video/make-ai-video)一课讲了 Google 的应用和它们的菜单。

Google 自家的频道 Google Cloud Tech 在 2025 年 11 月发布了一段不到 5 分钟的 Veo 入门介绍。它的章节列表包括提示词优化、可配置参数和图生视频，和下面几节讲的是同一块内容。它的说明里写的是 Google Cloud 的 Veo 模型，并附有 Vertex AI Studio 的链接，所以看到的会是 Google Cloud 的画面，而不是这一课用的 Gemini API 代码。代码还是看笔记本。

| 模型 ID | 笔记本怎么说 |
| --- | --- |
| veo-3.1-generate-preview | 完整的 Veo 3.1，笔记本里做参考图用的就是它 |
| veo-3.1-fast-generate-preview | 更快、更容易用的版本，适合广告、A/B 测试和社交媒体内容 |
| veo-3.1-lite-generate-preview | 笔记本的默认选项，说它性价比高，为大批量的 720p 和 1080p 优化 |

[Bringing ideas to life: An intro to AI video generation](https://www.youtube.com/watch?v=5NlXA7A8IKg)

Google Cloud Tech 的 YouTube 视频，2025 年 11 月，介绍 Google Cloud 上的 Veo。

## 生成第一段视频

按笔记本的说法，一段视频大约要一分钟才能做好，所以 SDK 里用来请求生成的函数 generate_videos 不会直接返回成品。它返回的是一个 operation，也就是一个还在运行的任务。你每隔 20 秒问一次它的状态，等它报告完成，再下载文件保存。

下面的代码就是笔记本里的文生视频单元，只改了密钥的读法：笔记本从名为 GEMINI_API_KEY 的 Colab 密钥里读，这个版本改成读同名的环境变量。

````python
import os
import time

from google import genai
from google.genai import types

client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
VEO_MODEL_ID = "veo-3.1-lite-generate-preview"

operation = client.models.generate_videos(
    model=VEO_MODEL_ID,
    prompt="a close-up shot of a golden retriever playing in a field of sunflowers",
    config=types.GenerateVideosConfig(
        aspect_ratio="16:9",
        resolution="1080p",
    ),
)

while not operation.done:
    time.sleep(20)
    operation = client.operations.get(operation)

for n, generated_video in enumerate(operation.result.generated_videos):
    client.files.download(file=generated_video.video)
    generated_video.video.save(f"video{n}.mp4")
````

1. 用 `pip install -U "google-genai>=2.9.0"` 安装 SDK。
2. 在 Google AI Studio 里创建 Gemini API 密钥，别写进代码，放在名为 GEMINI_API_KEY 的环境变量里。
3. 选一个模型 ID。笔记本从 veo-3.1-lite-generate-preview 开始。
4. 带着提示词和 config 调用 generate_videos。aspect_ratio 取 "16:9" 或 "9:16"，resolution 取 "720p" 或 "1080p"。
5. 按定时器反复调用 client.operations.get，直到 operation.done 为 true。
6. 下载每一段生成的视频，保存成 MP4。

> 笔记本只有在顶部的开关设为 True 时才会执行付费调用。如果要对很多条提示词循环调用，请先加上你自己的保护。

## 可以加上的设置

提示词是唯一必填的参数，其余都是可选的，写在 config 对象里。反向提示词，是一小段写明你不想看到什么的文字，比如笔记本独角兽例子里的“airplanes”。

关于提示词的写法，笔记本提到了镜头构图（“single shot”“over-the-shoulder shot”）、机位和运镜（“eye level”“dolly shot”“tracking shot”），还有对焦和镜头效果（“shallow focus”“macro lens”）以及整体风格。

| 设置 | 取值 |
| --- | --- |
| negative_prompt | 描述你不想在视频里看到什么的文字 |
| person_generation | 是否允许出现成年人。儿童一律被拦截 |
| duration_seconds | Veo 3.1 可取 4、6 或 8。Veo 3 固定为 8，续写时为 7 |
| aspect_ratio | "16:9" 为横屏，"9:16" 为竖屏 |
| resolution | "720p" 或 "1080p" |

## 在提示词里描述声音

Veo 3 用同一条提示词生成音频，所以声音和别的细节一样，写进句子里就行。下面是笔记本的音频例子，它把看到的和听到的写在一起，还交代了听者站在哪里。

对于人物说话，笔记本把每一句台词放进引号写在提示词里，再在调用里加上反向提示词“texts, captions, subtitles”。两种情况用的都是前面那段 generate_videos 代码。

````text
fireworks at a beautiful city skyline scene with many different fireworks colors and sounds. sounds from excited people enjoying the show surrounding the camera POV can be heard too.
````

## 从一张图开始，再固定结尾

image 参数会让这张图成为第一帧，提示词说明哪些东西会动，提示词甚至可以留空。笔记本说，没有提示词时，模型会根据图片自己决定生成什么。

想控制片段怎么结尾，就在 config 里加上 last_frame。笔记本说得很明确：尾帧图不能单独使用，必须同时给一张首帧图。下面的单元里，gemini_image 和 ending_image 是笔记本先前用 Gemini 图像模型生成的图片，你也可以换成自己的。做这些图的方法见[图片编辑一课](https://mindket.com/cn/learn/ai-images-video/edit-images-with-ai)。

````python
operation = client.models.generate_videos(
    model=VEO_MODEL_ID,
    prompt="",
    image=gemini_image,
    config=types.GenerateVideosConfig(
        aspect_ratio="16:9",
        resolution="1080p",
        negative_prompt="ugly, low quality, static, weird physics",
        last_frame=ending_image,
    ),
)
````

## 参考图，以及把片段变长

参考图用来在整段视频里保持某个角色、道具或风格，又不会把它们当作第一帧。每张图作为一张标明为 asset 的参考图传入。笔记本规定，这只适用于 Veo 3.1，不含 Fast 模型，分辨率 720p，横屏。

续写是另一个参数。你把先前的 Veo 视频作为 video 传入，可以再配一条提示词，Veo 会再加 7 秒。

````python
backpack_reference = types.VideoGenerationReferenceImage(
    image=backpack_image,
    reference_type="asset",
)
actor_reference = types.VideoGenerationReferenceImage(
    image=actor_image,
    reference_type="asset",
)

operation = client.models.generate_videos(
    model="veo-3.1-generate-preview",
    prompt="A caricatural commercial video for this backpack. The actor puts on the backpack, jumps on his motorbike and starts off with a bang and an epic music",
    config=types.GenerateVideosConfig(
        aspect_ratio="16:9",
        resolution="720p",
        reference_images=[backpack_reference, actor_reference],
    ),
)
````

- 要续写的片段必须由 Veo 生成，分辨率 720p，长度不到 141 秒。
- 成片最长可达 148 秒，笔记本算下来，是在一段 8 秒的片段上续写大约 20 次。
- 续写用的调用和前面一样，只是传 video，不传 image。

## Gemini Omni，cookbook 里的另一个视频模型

Google 的 [Omni 笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Omni.ipynb)讲的是 Gemini Omni 1.2 Flash，它用另一种调用，也就是 Interactions API，需要 google-genai 2.21.0 或更新版本。一次交互是有状态的：你用 previous_interaction_id 指定先前的一次交互，模型就会修改或续写那个片段。

下面是笔记本里的多轮单元。第一轮用带时间码的提示词生成片段，第二轮只改车的颜色。Google 建议修改的提示词要简短、精准，它的例子以“Keep everything else the same.”结尾。

笔记本自己的建议是：对话式编辑、复杂提示词和大量参考图，优先用 Omni，独立的批量任务用 Veo。下表把两者放在一起对比。

**两份笔记本写明的上限**

- **148 秒** 续写后 Veo 视频的最长长度 (来源：[GitHub：google-gemini/cookbook 的 Veo 入门笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Veo.ipynb), 2026-11-06 查阅)
- **3** Veo 3.1 的参考图数量 (来源：[GitHub：google-gemini/cookbook 的 Veo 入门笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Veo.ipynb), 2026-11-06 查阅)
- **15 秒** Omni 单个片段的最长长度 (来源：[GitHub：google-gemini/cookbook 的 Gemini Omni 笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Omni.ipynb), 2026-11-06 查阅)
- **6** Omni 的参考图数量 (来源：[GitHub：google-gemini/cookbook 的 Gemini Omni 笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Omni.ipynb), 2026-11-06 查阅)

````python
turn1 = client.interactions.create(
    model="gemini-omni-1.2-flash",
    input="[0-10s] Single unbroken continuous camera shot from a locked perspective gliding forward along a scenic coastal road at sunset. A sleek silver sports car cruises smoothly in front of the camera. Completely continuous unbroken take.",
    response_format={"type": "video"},
)

turn2 = client.interactions.create(
    model="gemini-omni-1.2-flash",
    previous_interaction_id=turn1.id,
    input="Change the car color to metallic blue. Keep everything else the same.",
)
````

|  | Veo 3.1 | Gemini Omni 1.2 Flash |
| --- | --- | --- |
| 调用 | client.models.generate_videos | client.interactions.create |
| 片段时长 | 4、6 或 8 秒 | 3 到 15 秒，默认 10 秒 |
| 分辨率 | 720p 或 1080p | 360p 草稿、720p、1080p 或 4k |
| 编辑 | 没有，每次调用各自独立 | 用 previous_interaction_id 进行后续轮次 |
| 参考图 | 最多 3 张，限 Veo 3.1，不含 Fast | 最多 6 张，最长的片段也可用 |
| 续写 | 每步 7 秒 | 每轮 3 到 10 秒，生成的片段总长最多 30 秒 |
| SDK | google-genai 2.9.0 或更新 | google-genai 2.21.0 或更新 |

## 常见错误

- 在没有付费方案的情况下跑示例。笔记本里每个付费单元都先检查一个开关，原因就在这里。
- 只固定尾帧。笔记本说，它必须搭配一张首帧图。
- 用 Fast 模型、1080p 或竖屏去传参考图。笔记本只允许它们用在 Veo 3.1（不含 Fast 模型）、720p 和横屏里。
- 续写不是由 Veo 生成的片段，或者长度超过上面所说上限的片段。
- 轮询时不间隔。笔记本每次检查之间会等待，并指向 webhook，用它来接收任务结束的通知。
- 把 API 密钥直接粘贴进脚本。把它放进密钥管理或环境变量里。

## 动手试试

- 用小狗的提示词跑第一段视频，再把 aspect_ratio 换成竖屏的取值，得到竖屏视频。
- 给一个天空场景加上笔记本里的反向提示词“airplanes”，对比两段视频。
- 做一张图，作为 image 传入，再加一张表现下一个瞬间的尾帧。
- 用 Lite 和完整的 Veo 3.1 模型在 720p 下各做同一段视频，比较细节。
- 对很多条提示词循环调用之前，先看看一次调用要花多少钱。

> 按你的要求来评判一段视频：主体的样子保持不变，镜头照你写的运动，台词和文字一致。

## 下一课：写出更好的视频提示词

调用的效果取决于提示词，OpenAI、Google、Lightricks 和腾讯各自公布了写提示词的建议。[写出更好的视频提示词](https://mindket.com/cn/learn/ai-video/ai-video-prompts)一课把这些建议并排放在一起，再讲怎样让同一个角色在镜头之间保持不变。

## 自测一下

1. 你的 generate_videos 调用立刻返回了，却没有视频。笔记本接下来怎么做？

   A. 用同一条提示词再调用一次
   B. 每隔 20 秒调用 client.operations.get，直到 operation.done 为 true
   C. 打开 Gemini 应用

   答案：B。 generate_videos 返回的是 operation，也就是还在运行的任务，所以代码要轮询它，完成后再下载文件。

2. 你想让片段以某一张图结尾，还必须传什么？

   A. 一张首帧图，因为尾帧图不能单独使用
   B. 一张参考图
   C. 一条反向提示词

   答案：A。 笔记本说，你不能只用尾帧图，必须同时给一张首帧图。

3. 笔记本给 Veo 里的参考图规定了哪些条件？

   A. Veo 3.1 Fast、1080p、竖屏
   B. 任意模型、720p、任意画幅
   C. Veo 3.1 但不含 Fast、720p、横屏

   答案：C。 笔记本把参考图限定在 Veo 3.1，不含 Fast 模型，分辨率 720p，横屏。

4. 哪个调用可以在后续轮次里修改已生成的 Gemini Omni 片段？

   A. 带 last_frame 的 generate_videos
   B. 带 previous_interaction_id 的 client.interactions.create
   C. 带新提示词的 files.download
   D. 带旧提示词的 operations.get

   答案：B。 交互是有状态的，用 previous_interaction_id 指定先前的一次交互，模型就能修改那个片段。

## 常见问题

### Veo 可以免费使用吗？

不行。Google 的笔记本说，Veo 在免费额度上跑不了，所以要从付费账号开始。

### Veo 生成的视频有水印吗？

有。按笔记本的说法，每段生成的视频都带有 Google DeepMind 的 SynthID 数字水印。

### 不装 Python 能试 Veo 的代码吗？

能。笔记本顶部有一个按钮，点开就在 Google Colab 里运行，密钥从名为 GEMINI_API_KEY 的 Colab Secret 里读。付费单元默认关着，等你把开关打开。

### Veo 能生成竖屏视频吗？

能，要竖着的 9:16 画幅就行。参考图是例外，笔记本只允许它用在横屏画幅。

### 能续写我自己拍的片段吗？

Veo 不行，按笔记本的说法，它只续写自己生成的视频。Gemini Omni 接受 10 秒或更短的上传片段，欧洲经济区、瑞士和英国的用户除外。

## 资料来源

- [GitHub：google-gemini/cookbook 的 Veo 入门笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Veo.ipynb) (2026-11-06 查阅)
- [GitHub：google-gemini/cookbook 的 Gemini Omni 笔记本](https://github.com/google-gemini/cookbook/blob/main/quickstarts/Get_started_Omni.ipynb) (2026-11-06 查阅)
- [YouTube（Google Cloud Tech）：Bringing ideas to life: An intro to AI video generation（AI 视频生成入门）](https://www.youtube.com/watch?v=5NlXA7A8IKg) (2026-11-06 查阅)

[浏览 MCP 服务器](https://mindket.com/cn/mcp-servers)
