跳到正文

多模态理解:用 Gemini 处理图片、视频和音频

Gemini 原生支持读图片、视频和音频。这篇讲清楚怎么把每一种传进去——内联数据、URL,还是 Files API——以及不同文件大小该用哪种方式。

当前有效最后核验

适用平台

  • Gemini API(Python、JavaScript、Java、REST)

官方文档怎么说

  • Gemini 模型从底层设计上就是多模态的,支持图片处理和计算机视觉任务,包括图片描述、分类和视觉问答,不需要单独训练专门的机器学习模型。

    Image understanding with the Gemini API
  • 除了通用的多模态能力之外,Gemini 还通过额外训练,为目标检测和图像分割这类具体任务提供了更高的准确度。

    Image understanding with the Gemini API
  • 图片可以用三种方式传给 Gemini——通过 URL(适用于公开可访问的图片)、内联 base64 编码数据,或者通过 Files API 上传,后者推荐用于较大的文件,或者需要在多次请求中复用同一张图片的场景。

    Image understanding with the Gemini API
  • Gemini 可以处理视频,对视频进行描述、分割、提取信息,回答关于视频内容的问题,并指向视频中的具体时间点。

    Video understanding with the Gemini API
  • 视频可以通过 Files API(付费层最大 20GB / 免费层最大 2GB,推荐用于 100MB 以上或时长 10 分钟以上的视频)、Cloud Storage 注册(单文件 2GB,没有存储总量限制)、内联数据(小于 100MB、时长小于 1 分钟)或公开的 YouTube URL 提供。

    Video understanding with the Gemini API
  • 对大多数视频场景,官方推荐使用 Files API,尤其是 100MB 以上的文件,或者同一个文件要在多次请求中复用的情况;上传的文件必须先达到 ACTIVE 处理状态,才能在请求中使用。

    Video understanding with the Gemini API
  • Gemini 可以分析音频输入并生成文本响应,包括为一段音频生成转录文本和摘要。

    Audio understanding with the Gemini API
  • 音频和图片、视频一样,需要先通过 Files API 上传,然后在交互中通过返回的 URI 和 MIME 类型引用它。

    Audio understanding with the Gemini API

一个模型,三种输入

Gemini 不需要单独接一个视觉模型或音频模型——它从底层设计上就是多模态的。处理文本的同一个 interactions.create 调用也能处理图片、视频和音频;变的是 input 数组里放的内容,不是要调用的模型。

图片:三种传入方式

  • 通过 URL —— 适用于已经公开可访问的图片。
  • 内联 base64 数据 —— 适用于小型、一次性的图片。
  • Files API —— 推荐用于较大的文件,或者需要在多次请求中引用同一张图片的场景。
from google import genai

client = genai.Client()

uploaded_file = client.files.upload(file="path/to/organ.jpg")

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {"type": "text", "text": "Caption this image."},
        {
            "type": "image",
            "uri": uploaded_file.uri,
            "mime_type": uploaded_file.mime_type
        }
    ]
)
print(interaction.output_text)

除了图片描述和视觉问答之外,Gemini 还专门针对目标检测图像分割做了额外训练——如果你的场景是"这个东西具体在图片的哪个位置",而不只是"图片里有什么",这两个能力值得直接点名使用。

视频:按文件大小选方式,而不是凭习惯

| 方式 | 最大大小 | 适合场景 | |---|---|---| | Files API | 付费层 20GB / 免费层 2GB | 大文件(100MB+)、长视频(10 分钟+)、需要复用的文件 | | Cloud Storage 注册 | 单文件 2GB,无存储总量上限 | 大型、需要长期保存、反复复用的文件 | | 内联数据 | 小于 100MB | 小型、短时长(小于 1 分钟)、一次性输入 | | YouTube URL | 不适用 | 公开的 YouTube 视频 |

对大多数实际视频场景来说,Files API 是合适的默认选项。有个细节容易踩坑:文件上传完并不会立刻可用。要轮询直到它报告 ACTIVE 状态,再在交互中引用它:

myfile = client.files.upload(file="path/to/sample.mp4")

while not myfile.state or myfile.state.name != "ACTIVE":
    print("Processing video...")
    time.sleep(5)
    myfile = client.files.get(name=myfile.name)

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {"type": "video", "uri": myfile.uri, "mime_type": myfile.mime_type},
        {"type": "text", "text": "Summarize this video. Then create a quiz with an answer key based on the information in this video."}
    ]
)

Gemini 能对视频做描述、分割、提取信息,回答关于内容的问题,还能指向具体的时间点——不是把整段视频当成一坨无差别的内容笼统概括。

音频:先上传,再提问

音频遵循和视频一样的 Files API 模式——上传,拿到 URI 和 MIME 类型,在交互里引用两者:

uploaded_file = client.files.upload(file="path/to/sample.mp3")

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {"type": "text", "text": "Describe this audio clip"},
        {
            "type": "audio",
            "uri": uploaded_file.uri,
            "mime_type": uploaded_file.mime_type
        }
    ]
)

要转录文本加摘要的请求也是同样的方式——音频除了上传之外不需要任何特殊的预处理。

怎么选对输入方式

这三种输入方式不是可以随便换用的默认选项——它们各自是为不同大小的任务设计的。一个针对小截图的快速提问不需要走 Files API 那套上传再轮询的流程;一段要在五个不同提示词里反复引用的 10 分钟视频,也不该内联成 base64。在写集成代码之前,先把方式和文件大小、免费层与付费层的限制对上,而不是等请求失败了才发现问题。

如果想把多模态输入和函数调用或联网检索结合起来——比如让 Gemini 因为看到了图片里的内容而去查点什么——可以看函数调用与工具

实际操作

  1. 根据文件大小和是否复用选传入方式——小型、一次性的图片用 URL 或内联 base64,更大或要复用的用 Files API。
  2. 视频或音频要通过 client.files.upload 上传,然后轮询直到文件状态变成 ACTIVE。
  3. 在 input 数组里,把上传文件的 uri 和 mime_type 和文本提示词一起传入。
  4. 图片场景如果需要"具体在哪"而不只是"是什么",在提示词里直接点名目标检测或图像分割。
  5. 用组合好的 input 调用 client.interactions.create,从 interaction.output_text 读取答案。

Windows 步骤

不适用多模态输入的处理方式在不同操作系统上完全一致——这是 API 本身的特性,跟客户端操作系统无关。

手机步骤

不适用这篇教程讲的是在应用代码里把图片、视频、音频文件传给 API,不涉及移动端 App 界面。

使用案例

  • 给一批图片做描述或分类,不用先专门训练一个计算机视觉模型。
  • 让 Gemini 总结一段较长的视频,并根据视频里实际出现的内容生成一份带答案的小测验。
  • 从一段录音文件里拿到会议或采访的转录文本和摘要。

常见错误

  • 把较大的图片、音频或视频文件内联成 base64 数据,而不是通过 Files API 上传。文档明确内联数据只适用于小文件——比如视频要小于 100MB——而且要复用的文件通过 Files API 上传更省钱。
  • 以为视频一上传完就能立刻使用。Files API 返回的文件资源必须先达到 ACTIVE 状态才能在交互里引用,用得太早会失败。
  • 在默认大文件"应该能用"之前,没有先确认免费层的 Files API 大小上限(2GB)和付费层(20GB)的区别。
  • 忘了公开的 YouTube URL 是和已上传视频文件完全独立的另一种输入方式,因为实际上没有上传任何东西,所以文档里也没给出大小限制。

常见问题

处理图片是不是需要换一个模型或做特殊配置?
不需要——Gemini 从底层设计上就是多模态的。处理文本的同一个模型也能处理图片、视频和音频,你只需要改变交互 input 数组里放的内容。
想快速问一次截图或小图标的问题,最合适的方式是什么?
内联 base64 编码数据正是为这种场景设计的——小文件、一次性输入。要复用的文件或者较大的文件,推荐用 Files API。
Gemini 能回答关于视频里某个具体时刻的问题吗,而不只是整体内容?
可以——文档明确提到除了整体描述、分割、提取信息之外,Gemini 还能指向视频中的具体时间点。
视频到底能发多大?
取决于用哪种方式。内联数据上限是小于 100MB、时长小于 1 分钟。Files API 免费层最大 2GB,付费层最大 20GB。Cloud Storage 注册单文件最大 2GB,没有存储总量限制。公开的 YouTube URL 因为视频本身没有被上传,文档里没有给出大小限制。
Gemini 除了描述图片,还能做更多事情吗,比如定位某个东西在哪?
可以。除了通用的图片描述和视觉问答之外,Gemini 还专门通过额外训练,为目标检测和图像分割提供了更高的准确度。

官方来源

这些是本教程对照核验的官方页面。需要厂商的原始措辞时请直接查阅。

来源状态