Modelet e Gemini mund të përpunojnë video, duke mundësuar shumë raste të përdorimit të zhvilluesve kufitarë që do të kishin kërkuar historikisht modele specifike të domenit. Disa nga aftësitë e vizionit të Binjakëve përfshijnë aftësinë për të:
- Përshkruani, segmentoni dhe nxirrni informacione nga videot
- Përgjigjuni pyetjeve në lidhje me përmbajtjen e videos
- Referojuni vulave kohore specifike brenda një videoje
Binjakët u ndërtuan për të qenë multimodal nga themeli dhe ne vazhdojmë të shtyjmë kufirin e asaj që është e mundur. Ky udhëzues tregon se si të përdorni Gemini API për të gjeneruar përgjigje teksti bazuar në hyrjet e videos.
Hyrja e videos
Ju mund të ofroni video si hyrje për Binjakët në mënyrat e mëposhtme:
- Ngarkoni një skedar video duke përdorur API-në e skedarit përpara se të bëni një kërkesë për
generateContent
. Përdoreni këtë metodë për skedarë më të mëdhenj se 20 MB, video më të gjata se afërsisht 1 minutë ose kur dëshironi të ripërdorni skedarin për kërkesa të shumta. - Kaloni të dhënat e brendshme të videos me kërkesën për
generateContent
. Përdoreni këtë metodë për skedarë më të vegjël (<20 MB) dhe kohëzgjatje më të shkurtër. - Përfshi një URL të YouTube direkt në kërkesë.
Ngarko një skedar video
Ju mund të përdorni Files API për të ngarkuar një skedar video. Përdorni gjithmonë API-në e skedarëve kur madhësia totale e kërkesës (përfshirë skedarin, kërkesën për tekst, udhëzimet e sistemit, etj.) është më e madhe se 20 MB, kohëzgjatja e videos është e rëndësishme ose nëse keni ndërmend të përdorni të njëjtën video në disa kërkesa.
File API pranon direkt formatet e skedarëve video. Ky shembull përdor filmin e shkurtër të NASA-s "Njolla e Kuqe e Madhe e Jupiterit tkurret dhe rritet" . Kredia: Goddard Space Flight Center (GSFC)/David Ladd (2018).
"Njolla e kuqe e madhe e Jupiterit zvogëlohet dhe rritet" është në domenin publik dhe nuk tregon njerëz të identifikueshëm. ( Udhëzimet e përdorimit të imazhit dhe mediave të NASA-s. )
Kodi i mëposhtëm shkarkon mostrën e videos, e ngarkon atë duke përdorur API-në e skedarit, pret që të përpunohet dhe më pas përdor referencën e skedarit në një kërkesë të generateContent
.
from google import genai
client = genai.Client(api_key="GOOGLE_API_KEY")
myfile = client.files.upload(file="path/to/sample.mp4")
response = client.models.generate_content(
model="gemini-2.0-flash", contents=[myfile, "Summarize this video. Then create a quiz with an answer key based on the information in this video."]
)
print(response.text)
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
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-2.0-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();
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-2.0-flash",
contents,
nil,
)
fmt.Println(result.Text())
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?key=${GOOGLE_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}" \
-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 "Uploading video 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-2.0-flash:generateContent?key=$GOOGLE_API_KEY" \
-H 'Content-Type: application/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
Për të mësuar më shumë rreth punës me skedarët e medias, shihni Files API .
Kaloni të dhënat e videos në linjë
Në vend që të ngarkoni një skedar video duke përdorur API-në e skedarit, mund të kaloni video më të vogla drejtpërdrejt në kërkesën për të generateContent
. Kjo është e përshtatshme për video më të shkurtra nën madhësinë totale të kërkesës 20 MB.
Këtu është një shembull i ofrimit të të dhënave video inline:
# Only for videos of size <20Mb
video_file_name = "/path/to/your/video.mp4"
video_bytes = open(video_file_name, 'rb').read()
response = client.models.generate_content(
model='models/gemini-2.0-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.')
]
)
)
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
const ai = new GoogleGenAI({ apiKey: "GOOGLE_API_KEY" });
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-2.0-flash",
contents: contents,
});
console.log(response.text);
VIDEO_PATH=/path/to/your/video.mp4
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_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
Përfshi një URL të YouTube
Gemini API dhe AI Studio mbështesin URL-të e YouTube si Part
e të dhënave të skedarëve. Mund të përfshini një URL të YouTube me një kërkesë që i kërkon modelit të përmbledhë, përkthejë ose të ndërveprojë ndryshe me përmbajtjen e videos.
Kufizimet:
- Për nivelin falas, nuk mund të ngarkoni më shumë se 8 orë video në YouTube në ditë.
- Për nivelin e paguar, nuk ka kufi bazuar në gjatësinë e videos.
- Për modelet para 2.5, mund të ngarkoni vetëm 1 video për kërkesë. Për modelet pas 2.5, mund të ngarkoni maksimumi 10 video për kërkesë.
- Mund të ngarkoni vetëm video publike (jo video private ose të palistuara).
Shembulli i mëposhtëm tregon se si të përfshini një URL në YouTube me një kërkesë:
response = client.models.generate_content(
model='models/gemini-2.0-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.')
]
)
)
import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-pro" });
const result = await model.generateContent([
"Please summarize the video in 3 sentences.",
{
fileData: {
fileUri: "https://www.youtube.com/watch?v=9hE5-98ZeCg",
},
},
]);
console.log(result.response.text());
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, _ := genai.NewClient(ctx, &genai.ClientConfig{
APIKey: os.Getenv("GOOGLE_API_KEY"),
Backend: genai.BackendGeminiAPI,
})
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-2.0-flash",
contents,
nil,
)
fmt.Println(result.Text())
}
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GOOGLE_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
Referojuni vulave kohore në përmbajtje
Ju mund të bëni pyetje rreth pikave specifike në kohë brenda videos duke përdorur vulat kohore të formës MM:SS
.
prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?" # Adjusted timestamps for the NASA video
const prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?";
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?"),
}
PROMPT="What are the examples given at 00:05 and 00:10 supposed to show us?"
Transkriptoni videon dhe jepni përshkrime vizuale
Modelet e Gemini mund të transkriptojnë dhe ofrojnë përshkrime vizuale të përmbajtjes video duke përpunuar si pjesën audio ashtu edhe kornizat vizuale. Për përshkrime vizuale, modeli merr videon me një shpejtësi prej 1 kornizë për sekondë . Kjo normë kampionimi mund të ndikojë në nivelin e detajeve në përshkrime, veçanërisht për videot me pamje vizuale që ndryshojnë me shpejtësi.
prompt = "Transcribe the audio from this video, giving timestamps for salient events in the video. Also provide visual descriptions."
const prompt = "Transcribe the audio from this video, giving timestamps for salient events in the video. Also provide visual descriptions.";
prompt := []*genai.Part{
genai.NewPartFromURI(currentVideoFile.URI, currentVideoFile.MIMEType),
genai.NewPartFromText("Transcribe the audio from this video, giving timestamps for salient events in the video. Also " +
"provide visual descriptions."),
}
PROMPT="Transcribe the audio from this video, giving timestamps for salient events in the video. Also provide visual descriptions."
Personalizo përpunimin e videos
Mund ta personalizoni përpunimin e videos në Gemini API duke vendosur intervale të prerjes ose duke ofruar mostra të personalizuara të shpejtësisë së kuadrove.
Cakto intervalet e prerjes
Mund të kliponi video duke specifikuar videoMetadata
me zhvendosje fillimi dhe mbarimi.
response = client.models.generate_content(
model='models/gemini-2.5-flash-preview-05-20',
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.')
]
)
)
Cakto një shpejtësi të personalizuar të kuadrove
Mund të caktoni mostrën e personalizuar të shpejtësisë së kornizës duke kaluar një argument fps
te videoMetadata
.
# Only for videos of size <20Mb
video_file_name = "/path/to/your/video.mp4"
video_bytes = open(video_file_name, 'rb').read()
response = client.models.generate_content(
model='models/gemini-2.5-flash-preview-05-20',
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.')
]
)
)
Si parazgjedhje, 1 kornizë për sekondë (FPS) merret nga video. Ju mund të dëshironi të vendosni FPS të ulët (< 1) për video të gjata. Kjo është veçanërisht e dobishme për video kryesisht statike (p.sh. leksione). Nëse dëshironi të kapni më shumë detaje në pamjet që ndryshojnë me shpejtësi, merrni parasysh të vendosni një vlerë më të lartë FPS.
Formatet e mbështetura të videos
Gemini mbështet llojet e mëposhtme të formatit të videos MIME:
-
video/mp4
-
video/mpeg
-
video/mov
-
video/avi
-
video/x-flv
-
video/mpg
-
video/webm
-
video/wmv
-
video/3gpp
Detaje teknike rreth videove
- Modelet dhe konteksti i mbështetur : Të gjitha modelet Gemini 2.0 dhe 2.5 mund të përpunojnë të dhëna video.
- Modelet me një dritare konteksti 2M mund të përpunojnë video deri në 2 orë me rezolucion të paracaktuar të medias ose 6 orë me rezolucion të ulët të medias, ndërsa modelet me një dritare konteksti 1M mund të përpunojnë video deri në 1 orë me rezolucionin e paracaktuar të medias ose 3 orë të gjata me rezolucion të ulët të medias.
- Përpunimi i API-së së skedarit : Kur përdorni API-në e skedarit, videot ekzaminohen me 1 kornizë për sekondë (FPS) dhe audio përpunohet me 1 Kbps (kanal i vetëm). Vula kohore shtohen çdo sekondë.
- Këto norma janë subjekt i ndryshimit në të ardhmen për përmirësime në përfundime.
- Llogaritja e tokenit : Çdo sekondë e videos shënohet si më poshtë:
- Korniza individuale (kampionuar me 1 FPS):
- Nëse
mediaResolution
është vendosur në të ulët, kornizat shënohen me 66 token për kornizë. - Përndryshe, kornizat shënohen me 258 token për kornizë.
- Nëse
- Audio: 32 shenja në sekondë.
- Përfshihen gjithashtu metadatat.
- Gjithsej: Përafërsisht 300 argumente për sekondë video në rezolucionin e paracaktuar të medias, ose 100 argumente për sekondë video me rezolucion të ulët të medias.
- Korniza individuale (kampionuar me 1 FPS):
- Formati i vulës kohore : Kur i referoheni momenteve specifike në një video brenda kërkesës suaj, përdorni formatin
MM:SS
(p.sh.,01:15
për 1 minutë e 15 sekonda). - Praktikat më të mira :
- Përdorni vetëm një video për çdo kërkesë të menjëhershme për rezultate optimale.
- Nëse kombinoni tekst dhe një video të vetme, vendosni kërkesën e tekstit pas pjesës së videos në grupin
contents
. - Kini parasysh se sekuencat e veprimit të shpejtë mund të humbasin detajet për shkak të shkallës së kampionimit 1 FPS. Konsideroni ngadalësimin e klipeve të tilla nëse është e nevojshme.
Çfarë është më pas
Ky udhëzues tregon se si të ngarkoni skedarë video dhe të krijoni dalje teksti nga hyrjet video. Për të mësuar më shumë, shikoni burimet e mëposhtme:
- Udhëzimet e sistemit : Udhëzimet e sistemit ju lejojnë të drejtoni sjelljen e modelit bazuar në nevojat tuaja specifike dhe rastet e përdorimit.
- Files API : Mësoni më shumë rreth ngarkimit dhe menaxhimit të skedarëve për përdorim me Gemini.
- Strategjitë e nxitjes së skedarëve : Gemini API mbështet nxitjen me të dhëna teksti, imazhi, audio dhe video, të njohura gjithashtu si nxitje multimodale.
- Udhëzime për sigurinë : Ndonjëherë modelet gjeneruese të AI prodhojnë rezultate të papritura, të tilla si rezultate që janë të pasakta, të njëanshme ose fyese. Pas-përpunimi dhe vlerësimi njerëzor janë thelbësore për të kufizuar rrezikun e dëmtimit nga rezultate të tilla.