Skip to main content
视频理解让 Gemini 模型直接读取完整的 MP4,同时理解画面时序和音轨,用于生成章节与摘要、转写解说、检索某一时刻的内容或对比多个视频。直接上传视频文件即可,不需要先在本地抽帧转图片。

选择模型

视频输入只有 Gemini 模型支持,GPT-6、GPT-5.6 等 OpenAI 模型不接受视频。以下模型都在 default 分组按量计费:

准备密钥和 SDK

在令牌管理创建 API Key,计费模式选择按量优先(推荐)或按量计费,然后写入环境变量。Python 示例使用 Google Gen AI SDK:
老张API不提供 Google File API(/upload/v1beta/files),SDK 的 client.files.upload() 不可用。本地视频按下文用 inlineData 放进请求,已有公网地址的视频用 fileData 传链接。

快速开始:上传本地视频

以下示例读取当前目录中的 input.mp4,让模型按时间顺序描述画面并转写语音:
回答在 candidates[].content.parts 的 text 中,SDK 用 response.text 读取。 使用内联视频时注意:
  • mimeType 写文件的实际类型,MP4 为 video/mp4;data 只放 Base64 字符串,不带 data: 前缀。
  • Base64 编码后请求体约为原文件的 4/3,视频越大上传越久,超时时间要留足。
  • 大文件或已经托管在公网的视频,改用视频链接可以省去上传。
以下案例都复用上面创建的 client,本地视频统一为 input.mp4。

案例:按时间戳拆分章节

在提示词里写明时间格式和每章要包含的字段,模型会结合画面切换和语音内容划分章节:
回答类似:
画面与声音按时间对齐,所以模型能指出「某段画面出现时说了什么」。标注的时间可能与实际切换点相差约 1 秒,需要精确到秒时见时间戳准确吗。

案例:输出结构化 JSON

要把结果写入数据库或字幕系统,在 config 中指定 response_mime_type 和 response_schema,模型会返回符合结构的 JSON,SDK 用 response.parsed 得到对象:
用 REST 请求时,把同样的设置写进 generationConfig:

案例:只分析其中一段

用 videoMetadata 的 startOffset 和 endOffset 截取片段,模型只处理这一段,用量按片段时长计算。长视频里只关心某几分钟时,这比上传整段更省:
REST 请求中,videoMetadata 与 inlineData 或 fileData 写在同一个 part 里:
只想问某一时刻时,也可以不截取,直接在提示词中写时间,例如「00:14 时画面上显示什么?」。

分析视频链接

视频已有公网地址时,用 fileData 传链接,由服务端下载,省去 Base64 上传。以下示例分析一个公开 YouTube 视频的前 60 秒:
链接的要求:
  • 可以是公开的 YouTube 视频,也可以是 MP4 直链。
  • 必须无需登录、Cookie 或签名即可下载,服务端拉取失败时返回 400 Cannot fetch content from the provided URL。
  • 私有存储中的视频,先生成可公开访问的临时链接,或下载后用 inlineData 上传。

案例:一次对比多个视频

在同一条消息里依次放入多个视频 part,并在提示词中说明顺序:
每个视频的 token 分别计算,总用量是各视频之和。

控制抽帧率和用量

模型默认每秒抽取 1 帧画面,音轨完整处理。用 videoMetadata.fps 可以调整抽帧率:
  • 画面变化慢的视频,例如讲座、录屏,设为 0.5 等更低的值,画面 token 大约按比例减少。
  • 动作快、需要捕捉短暂画面的视频,设为 2 等更高的值,画面 token 大约按比例增加。
  • 音频 token 不受 fps 影响。
fps 可以与 startOffset、endOffset 写在同一个 videoMetadata 中。

流式输出

长视频的回答较长时,可以边生成边显示。SDK 用 generate_content_stream,REST 把方法换成 streamGenerateContent 并加上 ?alt=sse:
流式过程中 SDK 可能打印 is not a valid FinishReason 警告,不影响输出内容。

用 OpenAI SDK 调用

已经基于 OpenAI SDK 开发的应用,可以在 Chat Completions 中用 video_url 内容块传视频,只接受 Base64 data URL:
这种写法有以下限制:
  • 需要 pip install openai,model 只能用 Gemini 模型。
  • video_url 里传公网链接,或用 file 内容块传视频,视频会被忽略,模型可能在没看到视频的情况下作答。
  • 不支持视频链接、片段截取和 fps;需要这些功能时使用原生接口。
  • 响应 usage 中的 video_tokens 大于 0,说明视频已被读取。

读取用量与计费

原生接口的 usageMetadata.promptTokensDetails 分别列出画面与音轨的 token:
两者都按输入 token 计费。要降低用量,可以截取片段、降低 fps,或换用单价更低的模型。每次请求的实际费用以调用日志为准。

错误处理

常见问题

可以直接上传完整 MP4 吗?

可以。把整个 MP4 编码为 Base64 放进 inlineData,模型会同时理解画面时序和音轨,不需要预先抽帧转图片。视频已有公网地址时,用 fileData 传链接更省上传时间。

哪些模型支持视频理解?

以下模型都支持:
  • gemini-3.8-flash、gemini-3.7-flash
  • gemini-3.5-flash-lite
  • gemini-3.1-pro-preview、gemini-2.5-pro
使用其他 Gemini 模型前,先发送一个短视频,检查用量中是否出现 VIDEO。

模型能听到视频里的声音吗?

能。音轨会和画面一起处理,可以转写对白、总结解说,也能回答「这段画面出现时说了什么」这类需要音画对齐的问题。用量中的 AUDIO 就是音轨占用的 token。

时间戳准确吗?

章节顺序和内容可靠,但各模型标注的起止时间都可能与实际切换点相差约 1 秒。需要逐秒核对时:
  • 用 startOffset 和 endOffset 截取相关片段再问一次;
  • 提高 fps,让模型看到更密的画面;
  • 用 whisper-1 生成带时间戳的字幕,按语音时间核对,见生成字幕和时间戳。

视频有大小或时长限制吗?

内联视频会让请求体增大约三分之一,文件越大上传越慢、越容易超时。大文件建议用 fileData 传公网链接,长视频可以用 startOffset、endOffset 分段处理。

支持 Google File API 吗?

不支持,以下写法都不可用:
  • /upload/v1beta/files 上传接口;
  • files/... 形式的文件引用;
  • SDK 的 client.files.upload()。
本地视频用 inlineData,公网视频用 fileData。

能生成视频吗?

本页只负责理解已有视频。生成视频可使用 Wan 2.7 或 Seedance 2.0。

相关文档