视频理解

如需了解视频生成,请参阅 Gemini Omni Flash 指南。

Gemini 模型可以处理视频,从而实现许多前沿开发者用例,而这些用例在过去需要使用特定于领域的模型。 Gemini 的一些视觉功能包括:能够描述视频、对视频进行分段和提取视频中的信息、回答有关视频内容的问题,以及引用视频中的特定时间戳。

您可以通过以下方式向 Gemini 提供视频作为输入:

输入法 最大大小 推荐的使用场景
File API 20GB(付费)/ 2GB(免费) 大型文件(100MB+)、长视频(10 分钟以上)、可重复使用的文件。
Cloud Storage 注册 2GB(每个文件,无存储空间限制) 大型文件(100MB+)、长视频(10 分钟以上)、持久性文件、可重复使用的文件。
内嵌数据 < 100MB 小型文件(<100MB)、时长较短(<1 分钟)、一次性输入。
YouTube 网址 不适用 公开 YouTube 视频。

注意:对于大多数用例,建议使用 File API,尤其是对于大于 100MB 的文件,或者当您想在多个请求中重复使用文件时。

如需了解其他文件输入方法(例如使用外部网址或存储在 Google Cloud 中的文件),请参阅 文件输入方法指南。

上传视频文件

以下代码会下载示例视频,使用 Files API 上传该视频, 等待其处理完毕,然后使用上传的文件引用来 总结视频。

Python

from google import genai

client = genai.Client()

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

response = client.models.generate_content(
    model="gemini-3.8-flash", contents=[myfile, "Summarize this video. Then create a quiz with an answer key based on the information in this video."]
)

print(response.text)

JavaScript

import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";

const ai = new GoogleGenAI({});

async function main() {
  const myfile = await ai.files.upload({
    file: "path/to/sample.mp4",
    config: { mimeType: "video/mp4" },
  });

  const response = await ai.models.generateContent({
    model: "gemini-3.8-flash",
    contents: createUserContent([
      createPartFromUri(myfile.uri, myfile.mimeType),
      "Summarize this video. Then create a quiz with an answer key based on the information in this video.",
    ]),
  });
  console.log(response.text);
}

await main();

Go

uploadedFile, _ := client.Files.UploadFromPath(ctx, "path/to/sample.mp4", nil)

parts := []*genai.Part{
    genai.NewPartFromText("Summarize this video. Then create a quiz with an answer key based on the information in this video."),
    genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}

contents := []*genai.Content{
    genai.NewContentFromParts(parts, genai.RoleUser),
}

result, _ := client.Models.GenerateContent(
    ctx,
    "gemini-3.8-flash",
    contents,
    nil,
)

fmt.Println(result.Text())

REST

VIDEO_PATH="path/to/sample.mp4"
MIME_TYPE=$(file -b --mime-type "${VIDEO_PATH}"<)
NUM_BYTES=$(wc -c  "${VIDEO_PATH}")
DISPLAY_NAME=VIDEO

tmp_header_file=upload-header.tmp

echo "Starting file upload..."
curl "https://generativelanguage.googleapis.com/upload/v1beta/files" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -D ${tmp_header_file} \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}&qu>ot; \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2 /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

echo "Upl>oading vide>o data..."
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${VIDEO_PATH}" 2 /dev/null  file_info.json

file_uri=$(jq -r ".file.uri" file_info.json)
echo file_uri=$file_uri

echo "File uploaded successfully. File URI: ${file_uri}"

# --- 3. Generate content using the uploaded video file ---
echo "Generating content from video..."
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: applicati>on/json'>; \
    -X POST \
    -d '{
      "contents": [{
        &quot;parts":[
          {"file_data":{"mime_type": "'"${MIME_TYPE}"'", "file_uri": "'"${file_uri}"'"}},
          {"text": "Summarize this video. Then create a quiz with an answer key based on the information in this video."}]
        }]
      }' 2 /dev/null  response.json

jq -r ".candidates[].content.parts[].text" response.json

如果总请求大小(包括文件、文本提示、系统说明等)超过 20 MB、视频时长较长,或者您打算在多个提示中使用同一视频,请务必使用 Files API。 File API 直接接受视频文件格式。

如需详细了解如何使用媒体文件,请参阅 Files API

以内嵌方式传递视频数据

您可以直接在对 generateContent 的请求中传递较小的视频,而无需使用 File API 上传视频文件。此方法适用于总请求大小不超过 20 MB 的较短视频。

以下是提供内嵌视频数据的示例:

Python

from google import genai
from google.genai import types

# Only for videos of size <20Mb
video_file_name = "/path/to/your/video.mp4"
video_bytes = open(video_file_name, 'rb').read()

client = genai.Client()
response = client.models.generate_content(
    model='gemini-3.8-flash',
    contents=types.Content(
        parts=[
            types.Part(
                inline_data=types.Blob(data=video_bytes, mime_type='video/mp4')
            ),
            types.Part(text='Please summarize the video in 3 sentences.';)
        ]
    )
)
print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

const ai = new GoogleGenAI({});
const base64VideoFile = fs.readFileSync("path/to/small-sample.mp4", {
  encoding: "base64",
});

const contents = [
  {
    inlineData: {
      mimeType: "video/mp4",
      data: base64VideoFile,
    },
  },
  { text: "Please summarize the video in 3 sentences." }
];

const response = await ai.models.generateContent({
  model: "gemini-3.8-flash",
  contents: contents,
});
console.log(response.text);

REST

VIDEO_PATH=/path/to/your/video.mp4

if [[ "$(base64 --vers>&ion 21)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
            {
              "inline_data": {
                "mime_type":"video/mp4",
                "data": "'$(base64 $B64FLAGS> $VIDEO_PATH)'"
              }
            },
            {"text": "Please summarize the video in 3 sentences."}
        ]
      }]
    }' 2 /dev/null

传递 YouTube 网址

您可以按如下所示将 YouTube 网址作为请求的一部分直接传递给 Gemini API:

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model='gemini-3.8-flash',
    contents=types.Content(
        parts=[
            types.Part(
                file_data=types.FileData(file_uri='https://www.youtube.com/watch?v=9hE5-98ZeCg')
            ),
            types.Part(text='Please summarize the video in 3 sentences.')
        ]
    )
)
print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const contents = [
  {
    fileData: {
      fileUri: "https://www.youtube.com/watch?v=9hE5-98ZeCg",
    },
  },
  { text: "Please summarize the video in 3 sentences." }
];

const response = await ai.models.generateContent({
  model: "gemini-3.8-flash",
  contents: contents,
});
console.log(response.text);

Go

package main

import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)

func main() {
  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  parts := []*genai.Part{
      genai.NewPartFromText("Please summarize the video in 3 sentences."),
      genai.NewPartFromURI("https://www.youtube.com/watch?v=9hE5-98ZeCg","video/mp4"),
  }

  contents := []*genai.Content{
      genai.NewContentFromParts(parts, genai.RoleUser),
  }

  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-3.8-flash",
      contents,
      nil,
  )

  fmt.Println(result.Text())
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
            {"text": "Please summarize the video in 3 sentences."},
            {
              "file_data": {
                "file_uri": "https>://www.youtube.com/watch?v=9hE5-98ZeCg"
              }
            }
        ]
      }]
    }' 2 /dev/null

限制

  • 对于免费层级,您每天上传的 YouTube 视频时长不能超过 8 小时。
  • 对于付费层级,没有基于视频时长的限制。
  • 对于 Gemini 2.5 之前的模型,您每次请求只能上传 1 个视频。对于 Gemini 2.5 及更高版本的模型,您每次请求最多能上传 10 个视频。
  • 您只能上传公开视频(不能上传私享视频或未公开列出的视频)。

智能体视频理解

默认情况下,视频输入使用静态处理(以 1 FPS 的速率提取帧)。 Gemini 3.8 Flash、3.7 Flash、3.6 Flash 和 3.5 Flash Lite 模型还支持 智能体视频理解,即模型动态探索视频 时间轴,根据提示选择性地检查脚本,并即时自适应地调整帧 速率和分辨率。

Mode 说明 支持的模型
静态 (默认) 以固定速率 (1 FPS) 提取帧,并在一次传递中将其放入上下文中。适用于短视频片段。 所有 Gemini 模型
智能体 模型会根据提示动态浏览视频时间轴,仅加载所需的内容。对于长篇内容,token 效率最多可提高 88%,质量可提高约 7%。 Gemini 3.8 Flash、3.7 Flash、3.6 Flash、3.5 Flash Lite

选择处理模式

作为一般准则,请先使用智能体 模式,尤其是在针对回答质量或 token 效率进行优化时。

  • 智能体 :长视频或针对特定时刻的查询。模型会动态浏览时间轴,以定位与上下文相关的信息,而无需填充上下文窗口。
  • 静态 :对短视频片段(不到 5 分钟)的延迟敏感型查询,或者需要整个视频片段的帧级精度的情形。

设置处理模式

Python

import time
from google import genai
from google.genai import types

client = genai.Client()

video_file = client.files.upload(file="path/to/lecture.mp4")

while video_file.state.name == "PROCESSING":
    time.sleep(2)
    video_file = client.files.get(name=video_file.name)

response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=[
        types.Part.from_uri(
            file_uri=video_file.uri,
            mime_type=video_file.mime_type,
            media_processing="AGENTIC",
        ),
        "What are the three main arguments presented?",
    ],
)
print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

let videoFile = await ai.files.upload({
  file: "path/to/lecture.mp4",
  config: { mimeType: "video/mp4" },
});

while (videoFile.state === "PROCESSING&>quot;) {
  await new Promise((resolve) = setTimeout(resolve, 2000));
  videoFile = await ai.files.get({ name: videoFile.name });
}

const response = await ai.models.generateContent({
  model: "gemini-3.8-flash",
  contents: [
    {
      role: "user",
      parts: [
        {
          fileData: {
            fileUri: videoFile.uri,
            mimeType: videoFile.mimeType,
          },
          mediaProcessing: "AGENTIC",
        },
        { text: "What are the three main arguments presented?" },
      ],
    },
  ],
});
console.log(response.text);

Go

uploadedFile, _ := client.Files.UploadFromPath(ctx, "path/to/lecture.mp4", nil)
parts := []*genai.Part{
    {
        &FileData: genai.FileData{
            FileURI:  uploadedFile.URI,
            MIMEType: uploadedFile.MIMEType,
        },
        MediaProcessing: genai.MediaProcessingAgentic,
    },
    genai.NewPartFromText("What are the three main arguments presented?"),
}
contents := []*genai.Content{
    genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
    ctx,
    "gemini-3.8-flash",
    contents,
    nil,
)
fmt.Println(result.Text())

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent?key=$GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "parts": [
        {
          "file_data": {
            "file_uri": "'${file_uri}'",
            "mime_type": "video/mp4"
          },
          "media_processing&quot;: "AGENTIC"
        },
        {"text": "What are the three main arguments presented?"}
      ]
    }]
  }'

注意 :如需验证是否使用了智能体处理,请检查 response.candidates[0].content.parts。如果存在 tool_calltool_response 部分且 MEDIA_PROCESSING 工具类型,则表示模型动态浏览了视频。

注意 :与其他服务器端工具(例如 Google 搜索或网址上下文)不同,智能体视频不需要在 ToolConfig 中设置 include_server_side_tool_invocations=True,即可返回或流式传输工具调用和结果。当在任何输入部分上设置 media_processing="AGENTIC" 时,系统会自动返回视频浏览的 tool_calltool_response 部分。

响应结构

启用智能体处理后,响应会包含额外的部分,用于公开内部浏览轨迹:

  • tool_call 部分tool_type: "MEDIA_PROCESSING"):每次模型请求视频片段或音频脚本时发出。
  • tool_response 部分 (tool_type: "MEDIA_PROCESSING"): 每次加载操作的结果。

您无需手动处理或回复这些部分:将完整响应作为对话历史记录传递回去,系统会自动处理这些部分。

如果在 ThinkingConfig 中设置了 include_thoughts=True,推理步骤会显示为与工具调用/响应对交错的 thought: true 部分。如果停用了想法,系统会省略想法文本,但仍会显示工具部分。

以下示例展示了包含交错的工具调用和响应部分的响应载荷:

{
  "candidates": [
    {
      "content": {
        "role": "model",
        "parts": [
          {
            "thought": true,
            "text": "Inspecting transcript for key discussion topics..."
          },
          {
            "thought_signature": "sig_A",
            "tool_call": {
              "tool_type": "MEDIA_PROCESSING"
            }
          },
          {
            "thought_signature": "sig_B",
            "tool_response": {
              "tool_type": "MEDIA_PROCESSING"
            }
          },
          {
            "thought": true,
            "text": "Loading visual frames to verify slide content..."
          },
          {
            "thought_signature": "sig_C",
            "tool_call": {
              "tool_type": "MEDIA_PROCESSING"
            }
          },
          {
            "thought_signature": "sig_D",
            "tool_response": {
              "tool_type": "MEDIA_PROCESSING"
            }
          },
          {
            "thought": true,
            "text": "Synthesizing answer from gathered evidence..."
          },
          {
            "text": "The three main arguments presented in the lecture are...",
            "thought_signature": "sig_E"
          }
        ]
      }
    }
  ]
}

在不同视频之间混合处理模式

您可以为同一请求中的每个视频部分设置不同的处理模式:

Python

from google import genai
from google.genai import types

client = genai.Client()

lecture = client.files.upload(file="path/to/long-lecture.mp4")
experiment = client.files.upload(file="path/to/short-experiment.mp4")

response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=[
        types.Part.from_uri(
            file_uri=lecture.uri,
            mime_type=lecture.mime_type,
            media_processing="AGENTIC",  # Use agentic video understanding
        ),
        types.Part.from_uri(
            file_uri=experiment.uri,
            mime_type=experiment.mime_type,
            media_processing="STATIC",  # Use static processing
        ),
        "Compare the lecture content with the experiment results.",
    ],
)
print(response.text)

JavaScript

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const lecture = await ai.files.upload({
  file: "path/to/long-lecture.mp4",
  config: { mimeType: "video/mp4" },
});
const experiment = await ai.files.upload({
  file: "path/to/short-experiment.mp4",
  config: { mimeType: "video/mp4" },
});

const response = await ai.models.generateContent({
  model: "gemini-3.8-flash",
  contents: [
    {
      role: "user",
      parts: [
        {
          fileData: {
            fileUri: lecture.uri,
            mimeType: lecture.mimeType,
          },
          mediaProcessing: "AGENTIC", // Use agentic video understanding
        },
        {
          fileData: {
            fileUri: experiment.uri,
            mimeType: experiment.mimeType,
          },
          mediaProcessing: "STATIC", // Use static processing
        },
        { text: "Compare the lecture content with the experiment results." },
      ],
    },
  ],
});
console.log(response.text);

Go

lecturePart := &genai.Part{
    FileData: &genai.FileData{
        FileURI:  lectureFile.URI,
        MIMEType: lectureFile.MIMEType,
    },
    MediaProcessing: genai.MediaProcessingAgentic, // Use agentic
}
experimentPart := &genai.Part{
    FileData: &genai.FileData{
        FileURI:  experimentFile.URI,
        MIMEType: experimentFile.MIMEType,
    },
    MediaProcessing: genai.MediaProcessingStatic, // Use static
}
parts := []*genai.Part{
    lecturePart,
    experimentPart,
    genai.NewPartFromText("Compare the lecture content with the experiment results."),
}
contents := []*genai.Content{
    genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
fmt.Println(result.Text())

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent?key=$GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{
      "parts": [
        {
          "file_data": {
            "file_uri": "'${lecture_uri}'",
            "mime_type": "video/mp4"
          },
          "media_processing": "AGENTIC"
        },
        {
          "file_data": {
            "file_uri": "'${experiment_uri}'",
            "mime_type": &quot;video/mp4"
          },
          "media_processing": "STATIC"
        },
        {"text": "Compare the lecture content with the experiment results."}
      ]
    }]
  }'

对长视频使用上下文缓存

对于时长超过 10 分钟的视频,或者当您计划针对同一视频文件发出多个请求 时,请使用 上下文缓存 来 降低费用并缩短延迟时间。借助上下文缓存,您可以处理一次视频,并在后续查询中重复使用 token,因此非常适合聊天会话或对长篇内容进行重复分析。

引用内容中的时间戳

您可以使用 MM:SS 格式的时间戳,询问有关视频中特定时间点的问题。

Python

prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?" # Adjusted timestamps for the NASA video

JavaScript

const prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?";

Go

    prompt := []*genai.Part{
        genai.NewPartFromURI(currentVideoFile.URI, currentVideoFile.MIMEType),
          // Adjusted timestamps for the NASA video
        genai.NewPartFromText("What are the examples given at 00:05 and " +
            "00:10 supposed to show us?"),
    }

REST

PROMPT="What are the examples given at 00:05 and 00:10 supposed to show us?"

从视频中提取详细的数据洞见

Gemini 模型通过处理音频和视觉 流中的信息,提供强大的视频内容理解功能。这样,您就可以提取丰富多样的详细信息,包括生成视频中发生的情况的描述,以及回答有关视频内容的问题。

对于视觉描述,模型会以 1 帧/秒 (FPS) 的速率对视频进行采样。此默认采样率适用于大多数内容,但请注意,它可能会遗漏快速动作或快速场景变化的视频中的细节。 对于此类高动作内容,请考虑设置自定义帧速率

Python

prompt = "Describe the key events in this video, providing both audio and visual details. Include timestamps for salient moments."

JavaScript

const prompt = "Describe the key events in this video, providing both audio and visual details. Include timestamps for salient moments.";

Go

    prompt := []*genai.Part{
        genai.NewPartFromURI(currentVideoFile.URI, currentVideoFile.MIMEType),
        genai.NewPartFromText("Describe the key events in this video, providing both audio and visual details. " +
      "Include timestamps for salient moments."),
    }

REST

PROMPT="Describe the key events in this video, providing both audio and visual details. Include timestamps for salient moments."

自定义视频处理

您可以在 Gemini API 中通过设置剪辑间隔或提供自定义帧速率选段来自定义视频处理。这些自定义选项 仅在 "static" 模式下处理视频时受支持。

设置剪辑间隔

您可以通过指定包含开始和结束偏移量的 videoMetadata 来剪辑视频。

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model='models/gemini-3.8-flash',
    contents=types.Content(
        parts=[
            types.Part(
                file_data=types.FileData(file_uri='https://www.youtube.com/watch?v=XEzRZ35urlk'),
                video_metadata=types.VideoMetadata(
                    start_offset='1250s',
                    end_offset='1570s'
                )
            ),
            types.Part(text='Please summarize the video in 3 sentences.')
        ]
    )
)

JavaScript

import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-3.8-flash';

async function main() {
const contents = [
  {
    role: 'user',
    parts: [
      {
        fileData: {
          fileUri: 'https://www.youtube.com/watch?v=9hE5-98ZeCg',
          mimeType: 'video/*',
        },
        videoMetadata: {
          startOffset: '40s',
          endOffset: '80s',
        }
      },
      {
        text: 'Please summarize the video in 3 sentences.',
      },
    ],
  },
];

const response = await ai.models.generateContent({
  model,
  contents,
});

console.log(response.text)

}

await main();

设置自定义帧速率

您可以通过向 videoMetadata 传递 fps 实参来设置自定义帧速率选段。

Python

from google import genai
from google.genai import types

# Only for videos of size <20Mb
video_file_name = "/path/to/your/video.mp4"
video_bytes = open(video_file_name, 'rb').read()

client = genai.Client()
response = client.models.generate_content(
    model='models/gemini-3.8-flash',
    contents=types.Content(
        parts=[
            types.Part(
                inline_data=types.Blob(
                    data=video_bytes,
                    mime_type='video/mp4'),
                video_metadata=types.VideoMetadata(fps=5)
            ),
            types.Part(text='Please summarize the video in 3 sentences.')
        ]
    )
)

默认情况下,系统会按 1 帧/秒 (FPS) 的速率从视频中提取选段。对于长视频,您可能需要设置较低的 FPS(低于 1)。这对于偏静态的视频(例如讲座)尤其有用。对于需要精细时间分析(例如快速动作理解或高速动作跟踪)的视频,请使用更高的 FPS。

支持的视频格式

Gemini 支持以下视频格式 MIME 类型:

  • video/mp4
  • video/mpeg
  • video/quicktime
  • video/avi
  • video/x-flv
  • video/mpg
  • video/webm
  • video/wmv
  • video/3gpp

有关视频技术方面的详细信息

  • 支持的模型和上下文:所有 Gemini 模型都可以处理视频数据。
    • 上下文窗口为 100 万个 token 的模型默认可以处理时长不超过 3 小时(低媒体分辨率)或 1 小时(高媒体分辨率)的视频。
  • 处理模式:Gemini 3.8 Flash、3.7 Flash、3.6 Flash、3.5 Flash Lite、 及更高版本的模型支持两种视频处理模式:
    • 静态:以 1 FPS 的速率提取帧并将其放入上下文中(所有模型的默认设置 )。音频的处理速率为 1Kbps(单声道)。 每秒都会添加时间戳。最适合短视频片段或每个帧都很重要的情况(例如逐帧检查)。请注意,如果选段率为 1 FPS,快速动作序列可能会丢失细节。
    • 智能体:模型会动态浏览视频,并根据需要加载 脚本和/或帧和/或音频。对于长篇内容,此模式使用的 token 最多可减少 88%,但由于在开始生成之前需要进行内部推理和工具往返,因此对于短视频片段(不到 5 分钟),浏览可能会略微增加首次 token 响应时间 (TTFT)。 响应包含 MEDIA_PROCESSING 工具调用和响应部分,以在不同轮次之间保留推理上下文。最适合长视频,以优化 token 费用和回答质量。在 Gemini 3.8 Flash、3.7 Flash、3.6 Flash 和 3.5 Flash Lite 上受支持。如需了解详情,请参阅 智能体视频理解
  • token 计算(静态模式):视频的每一秒都按如下方式计算 token:
    • 各帧(选段率为 1 FPS):
      • 如果 media_resolution 设置为低,则每帧按 66 个 token 计算。
      • 否则,每帧按 258 个 token 计算。
    • 音频:每秒 32 个 token。
    • 元数据也包含在内。
    • 总计:默认(低)媒体分辨率下,每秒视频大约需要 100 个 token;高媒体分辨率下,每秒视频大约需要 300 个 token。
  • token 计算(智能体模式):token 用量因内容 复杂性和模型的浏览策略而异。在视频探索期间生成的浏览推理 token 计为推理 token (thoughts_token_count),而根据需要加载的帧、音频和脚本则计为工具提示 token (tool_use_prompt_token_count)。 对于长篇内容,智能体处理通常使用的总 token 数比静态 处理少 88%,因为模型仅加载回答提示所需的脚本 和/或帧和/或音频(请参阅 token 指南)。
  • 媒体分辨率:Gemini 3 引入了对多模态 视觉处理的精细控制,通过 media_resolution 参数实现。media_resolution 参数用于确定为每个输入图片或视频帧分配的 token 数量上限 。分辨率越高,模型读取精细文本或识别小细节的能力就越强,但 token 用量和延迟时间也会增加。media_resolutionmedia_processing 参数是独立的:您可以在同一视频部分上同时设置这两个参数。

如需详细了解 token 计算,请参阅 token 指南。

  • 时间戳格式:在提示中引用视频中的特定时刻时,请使用 MM:SS 格式(例如,01:15 表示 1 分 15 秒)。
  • 提示位置:如果将文本与单个视频相结合,请在 contents 数组中将文本提示放在视频部分 之后

后续步骤

  • 媒体分辨率:控制视频帧的 分辨率,以平衡质量和 token 用量。
  • token:了解在静态和智能体处理模式下如何对视频内容进行 token 化 。
  • 系统说明: 系统说明可让您根据 特定需求和使用情形来控制模型的行为。
  • Files API:详细了解如何上传和管理 文件以供 Gemini 使用。
  • 文件提示策略:Gemini API 支持使用文本、图片、音频和视频数据进行提示,也称为 多模态提示。
  • 安全指南:生成式 AI 模型有时会生成意外输出,例如不准确、 有偏见或令人反感的输出。后处理和人工评估对于限制此类输出造成的危害风险至关重要。