多模态理解:用 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 APIGemini 可以处理视频,对视频进行描述、分割、提取信息,回答关于视频内容的问题,并指向视频中的具体时间点。
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 APIGemini 可以分析音频输入并生成文本响应,包括为一段音频生成转录文本和摘要。
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 因为看到了图片里的内容而去查点什么——可以看函数调用与工具。
实际操作
- 根据文件大小和是否复用选传入方式——小型、一次性的图片用 URL 或内联 base64,更大或要复用的用 Files API。
- 视频或音频要通过 client.files.upload 上传,然后轮询直到文件状态变成 ACTIVE。
- 在 input 数组里,把上传文件的 uri 和 mime_type 和文本提示词一起传入。
- 图片场景如果需要"具体在哪"而不只是"是什么",在提示词里直接点名目标检测或图像分割。
- 用组合好的 input 调用 client.interactions.create,从 interaction.output_text 读取答案。
Windows 步骤
手机步骤
使用案例
- 给一批图片做描述或分类,不用先专门训练一个计算机视觉模型。
- 让 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 还专门通过额外训练,为目标检测和图像分割提供了更高的准确度。
官方来源
这些是本教程对照核验的官方页面。需要厂商的原始措辞时请直接查阅。
- Image understanding with the Gemini API
https://ai.google.dev/gemini-api/docs/image-understanding.md.txt
- Video understanding with the Gemini API
https://ai.google.dev/gemini-api/docs/video-understanding.md.txt
- Audio understanding with the Gemini API
https://ai.google.dev/gemini-api/docs/audio.md.txt