Per scoprire di più sulla generazione di video, consulta la guida di Gemini Omni Flash.
I modelli Gemini possono elaborare i video, consentendo molti casi d'uso per gli sviluppatori all'avanguardia che in passato avrebbero richiesto modelli specifici per il dominio. Alcune delle funzionalità di visione di Gemini includono la possibilità di: descrivere, segmentare ed estrarre informazioni dai video, rispondere a domande sui contenuti video e fare riferimento a timestamp specifici all'interno di un video.
Puoi fornire i video come input a Gemini nei seguenti modi:
| Metodo inserimento | Dimensione massima | Caso d'uso consigliato |
|---|---|---|
| API File | 20 GB (a pagamento) / 2 GB (senza costi) | File di grandi dimensioni (oltre 100 MB), video lunghi (oltre 10 minuti), file riutilizzabili. |
| Registrazione di Cloud Storage | 2 GB (per file, senza limiti di spazio di archiviazione) | File di grandi dimensioni (oltre 100 MB), video lunghi (oltre 10 minuti), file persistenti e riutilizzabili. |
| Dati in linea | < 100 MB | File di piccole dimensioni (meno di 100 MB), durata breve (meno di 1 minuto), input una tantum. |
| URL di YouTube | N/D | Video di YouTube pubblici. |
Nota: l'API File è consigliata per la maggior parte dei casi d'uso, soprattutto per i file di dimensioni superiori a 100 MB o quando vuoi riutilizzare il file in più richieste.
Per scoprire di più su altri metodi di input dei file, ad esempio l'utilizzo di URL esterni o file archiviati in Google Cloud, consulta la guida Metodi di input dei file.
Caricare un file video
Il seguente codice scarica un video di esempio, lo carica utilizzando l'API Files, attende che venga elaborato e poi utilizza il riferimento al file caricato per riassumere il video.
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();
Vai
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": [{
"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
Utilizza sempre l'API Files quando la dimensione totale della richiesta (inclusi file, prompt di testo, istruzioni di sistema e così via) è superiore a 20 MB, la durata del video è significativa o se intendi utilizzare lo stesso video in più prompt. L'API Files accetta direttamente i formati di file video.
Per scoprire di più su come lavorare con i file multimediali, consulta l'API Files.
Passare i dati video in linea
Anziché caricare un file video utilizzando l'API Files, puoi passare video più piccoli direttamente nella richiesta a generateContent. Questa opzione è adatta per i video più brevi con una dimensione totale della richiesta inferiore a 20 MB.
Ecco un esempio di come fornire dati video in linea:
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
Passare gli URL di YouTube
Puoi passare gli URL di YouTube direttamente all'API Gemini come parte della richiesta nel seguente modo:
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);
Vai
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
Limitazioni:
- Per il piano senza costi, non puoi caricare più di 8 ore di video di YouTube al giorno.
- Per il piano a pagamento, non esistono limiti in base alla durata del video.
- Per i modelli precedenti a Gemini 2.5, puoi caricare un solo video per richiesta. Per i modelli Gemini 2.5 e successivi, puoi caricare un massimo di 10 video per richiesta.
- Puoi caricare solo video pubblici (non video privati o non in elenco).
Comprensione dei video agentica
Per impostazione predefinita, gli input video utilizzano l'elaborazione statica (estrazione di frame a 1 FPS). I modelli Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash e 3.5 Flash Lite supportano anche la comprensione dei video agentica, in cui il modello esplora dinamicamente la sequenza temporale del video, ispezionando selettivamente le trascrizioni e regolando in modo adattivo la frequenza fotogrammi e la risoluzione al volo in base al prompt.
| Modalità | Descrizione | Modelli supportati |
|---|---|---|
| Statica (impostazione predefinita) | Estrae i frame a una frequenza fissa (1 FPS) e li inserisce nel contesto in un unico passaggio. Funziona bene per le clip brevi. | Tutti i modelli Gemini |
| Agentica | Il modello naviga dinamicamente nella sequenza temporale del video, caricando solo i contenuti di cui ha bisogno in base al prompt. Fino all'88% di token in meno e una qualità superiore di circa il 7% per i contenuti nel formato lungo. | Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash, 3.5 Flash Lite |
Scegliere una modalità di elaborazione
Come linea guida generale, inizia con la modalità agentica, soprattutto quando ottimizzi la qualità della risposta o l'efficienza dei token.
- Agentica: video nel formato lungo o query che hanno come target momenti specifici. Il modello naviga dinamicamente nella sequenza temporale per indirizzare le informazioni contestualmente pertinenti senza riempire la finestra contestuale.
- Statica: query sensibili alla latenza su clip brevi (meno di 5 minuti) o casi in cui è necessaria una precisione a livello di frame sull'intera clip.
Impostare la modalità di elaborazione
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);
Vai
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": "AGENTIC"
},
{"text": "What are the three main arguments presented?"}
]
}]
}'
Nota: per verificare che sia stata utilizzata l'elaborazione agentica, esamina
response.candidates[0].content.parts. La presenza di partitool_calletool_responsecon il tipo di strumentoMEDIA_PROCESSINGindica che il modello ha navigato dinamicamente nel video.
Nota: a differenza di altri strumenti lato server (come la Ricerca Google o il contesto URL), il video agentico non richiede l'impostazione di
include_server_side_tool_invocations=TrueinToolConfigper la restituzione o lo streaming delle chiamate e dei risultati degli strumenti. Le partitool_calletool_responseper la navigazione video vengono restituite automaticamente quandomedia_processing="AGENTIC"è impostato su qualsiasi parte di input.
Struttura della risposta
Quando l'elaborazione agentica è abilitata, la risposta include parti aggiuntive che espongono la traccia di navigazione interna:
tool_callParti (tool_type: "MEDIA_PROCESSING"): emesse ogni volta che il modello richiede un segmento video o una trascrizione audio.tool_responseParti (tool_type: "MEDIA_PROCESSING"): il risultato di ogni operazione di caricamento.
Non è necessario gestire o rispondere manualmente a queste parti: passa la risposta completa come cronologia delle conversazioni e verranno gestite automaticamente.
Se include_thoughts=True è impostato in ThinkingConfig, i passaggi di ragionamento vengono visualizzati come parti thought: true intervallate dalle coppie di chiamate/risposte degli strumenti. Con i pensieri disattivati, il testo dei pensieri viene omesso, ma le parti degli strumenti sono comunque presenti.
L'esempio seguente mostra il payload della risposta con le parti di chiamata e risposta degli strumenti intervallate:
{
"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"
}
]
}
}
]
}
Combinare le modalità di elaborazione tra i video
Puoi impostare modalità di elaborazione diverse per ogni parte video nella stessa richiesta:
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);
Vai
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": "video/mp4"
},
"media_processing": "STATIC"
},
{"text": "Compare the lecture content with the experiment results."}
]
}]
}'
Utilizzare la memorizzazione nella cache del contesto per i video lunghi
Per i video di durata superiore a 10 minuti o quando prevedi di effettuare più richieste per lo stesso file video, utilizza la memorizzazione nella cache del contesto per ridurre i costi e migliorare la latenza. La memorizzazione nella cache del contesto ti consente di elaborare il video una sola volta e riutilizzare i token per le query successive, il che la rende ideale per le sessioni di chat o l'analisi ripetuta di contenuti nel formato lungo.
Fare riferimento ai timestamp nei contenuti
Puoi porre domande su punti specifici nel tempo all'interno del video utilizzando i timestamp nel formato 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?";
Vai
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?"
Estrarre insight dettagliati dai video
I modelli Gemini offrono potenti funzionalità per la comprensione dei contenuti video elaborando le informazioni provenienti dagli stream audio e visivi. In questo modo puoi estrarre un insieme di dettagli, tra cui la generazione di descrizioni di ciò che accade in un video e la risposta a domande sui suoi contenuti.
Per le descrizioni visive, il modello campiona il video a una frequenza di 1 frame al secondo (FPS). Questa frequenza di campionamento predefinita funziona bene per la maggior parte dei contenuti, ma tieni presente che potrebbe perdere i dettagli nei video con movimenti rapidi o cambi di scena veloci. Per questi contenuti ad alta velocità, valuta la possibilità di impostare una frequenza fotogrammi personalizzata.
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.";
Vai
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."
Personalizzare l'elaborazione dei video
Puoi personalizzare l'elaborazione dei video nell'API Gemini impostando intervalli di clipping o fornendo un campionamento della frequenza fotogrammi personalizzato. Queste opzioni di personalizzazione
sono supportate solo quando il video viene elaborato in modalità "static".
Impostare gli intervalli di clipping
Puoi ritagliare il video specificando videoMetadata con offset di inizio e fine.
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();
Impostare una frequenza fotogrammi personalizzata
Puoi impostare un campionamento della frequenza fotogrammi personalizzato passando un argomento fps a videoMetadata.
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.')
]
)
)
Per impostazione predefinita, viene campionato 1 frame al secondo (FPS) dal video. Potresti voler impostare un FPS basso (meno di 1) per i video lunghi. Questa opzione è particolarmente utile per i video per lo più statici (ad es. lezioni). Utilizza un FPS più alto per i video che richiedono un'analisi temporale granulare, ad esempio la comprensione di azioni rapide o il rilevamento del movimento ad alta velocità.
Formati video supportati
Gemini supporta i seguenti tipi MIME di formato video:
video/mp4video/mpegvideo/quicktimevideo/avivideo/x-flvvideo/mpgvideo/webmvideo/wmvvideo/3gpp
Dettagli tecnici sui video
- Modelli e contesto supportati: tutti i modelli Gemini possono elaborare i dati video.
- Per impostazione predefinita, i modelli con una finestra contestuale di 1 milione possono elaborare video di durata massima di 3 ore (a bassa risoluzione multimediale) o di durata massima di 1 ora ad alta risoluzione multimediale.
- Modalità di elaborazione: i modelli Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash, 3.5 Flash Lite,
e successivi supportano due modalità di elaborazione video:
- Statica: i frame vengono estratti a 1 FPS e inseriti nel contesto (impostazione predefinita per tutti i modelli). L'audio viene elaborato a 1 Kbps (canale singolo). I timestamp vengono aggiunti ogni secondo. Ideale per clip brevi o quando ogni frame è importante (ad esempio l'ispezione frame per frame). Tieni presente che le sequenze di azioni rapide potrebbero perdere dettagli a causa della frequenza di campionamento di 1 FPS.
- Agentica: il modello naviga dinamicamente nel video, caricando
la trascrizione e/o i frame e/o l'audio on demand. Questa opzione utilizza fino all'88% di token in meno per i contenuti nel formato lungo, anche se la navigazione potrebbe aumentare leggermente il tempo al primo token (TTFT) nelle clip brevi (meno di 5 minuti) a causa del ragionamento interno e dei round trip degli strumenti prima dell'inizio della generazione.
Le risposte includono le parti di chiamata e risposta dello strumento
MEDIA_PROCESSINGper preservare il contesto di ragionamento tra i turni. Ideale per i video nel formato lungo per ottimizzare i costi dei token e la qualità della risposta. Supportata su Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash e 3.5 Flash Lite. Per maggiori dettagli, consulta Comprensione dei video agentica.
- Calcolo dei token (modalità statica): ogni secondo di video viene tokenizzato nel seguente modo:
- Frame singoli (campionati a 1 FPS):
- Se
media_resolutionè impostato su low, i frame vengono tokenizzati a 66 token per frame. - In caso contrario, i frame vengono tokenizzati a 258 token per frame.
- Se
- Audio: 32 token al secondo.
- Sono inclusi anche i metadati.
- Totale: circa 100 token al secondo di video alla risoluzione multimediale predefinita (bassa) o circa 300 token al secondo di video ad alta risoluzione multimediale.
- Frame singoli (campionati a 1 FPS):
- Calcolo dei token (modalità agentica): l'utilizzo dei token varia in base alla complessità dei contenuti
e alla strategia di navigazione del modello. I token di ragionamento di navigazione
generati durante l'esplorazione dei video vengono conteggiati come token di pensiero
(
thoughts_token_count), mentre i frame, l'audio e la trascrizione caricati on demand vengono conteggiati come token di prompt dello strumento (tool_use_prompt_token_count). L'elaborazione agentica in genere utilizza fino all'88% di token totali in meno rispetto all'elaborazione statica per i contenuti nel formato lungo, perché il modello carica solo la trascrizione e/o i frame e/o l'audio di cui ha bisogno per rispondere al prompt (consulta la guida ai token). - Risoluzione multimediale: Gemini 3 introduce un controllo granulare sull'elaborazione della visione multimodale
con il parametro
media_resolution. Il parametromedia_resolutiondetermina il numero massimo di token allocati per ogni frame di immagine o video di input. Le risoluzioni più elevate migliorano la capacità del modello di leggere il testo fine o identificare piccoli dettagli, ma aumentano l'utilizzo dei token e la latenza. I parametrimedia_resolutionemedia_processingsono indipendenti: puoi impostarli entrambi sulla stessa parte video.
Per maggiori dettagli sui calcoli dei token, consulta la guida ai token.
- Formato timestamp: quando fai riferimento a momenti specifici in un video all'interno del
prompt, utilizza il formato
MM:SS(ad es.01:15per 1 minuto e 15 secondi). - Posizionamento del prompt: se combini testo e un singolo video, inserisci il prompt testuale
dopo la parte video nell'array
contents.
Passaggi successivi
- Risoluzione multimediale: controlla la risoluzione dei frame video per bilanciare la qualità e l'utilizzo dei token.
- Token: scopri come vengono tokenizzati i contenuti video nelle modalità di elaborazione statica e agentica.
- Istruzioni di sistema: Le istruzioni di sistema ti consentono di indirizzare il comportamento del modello in base alle tue esigenze e ai tuoi casi d'uso specifici.
- API Files: scopri di più sul caricamento e sulla gestione dei file da utilizzare con Gemini.
- Strategie di prompt dei file: l'API Gemini supporta i prompt con dati di testo, immagini, audio e video, noti anche come prompt multimodali.
- Linee guida per la sicurezza: a volte i modelli di AI generativa producono output imprevisti, ad esempio output imprecisi, distorti o offensivi. L'elaborazione post-generazione e la valutazione umana sono essenziali per limitare il rischio di danni derivanti da questi output.