Gemini मॉडल, वीडियो प्रोसेस कर सकते हैं. इससे डेवलपर को इस्तेमाल के कई ऐसे उदाहरण मिलते हैं जिनके लिए पहले, डोमेन के हिसाब से मॉडल की ज़रूरत होती थी. Gemini की विज़न से जुड़ी कुछ क्षमताओं में ये शामिल हैं:
- वीडियो के बारे में जानकारी देना, उन्हें सेगमेंट में बांटना, और उनसे जानकारी निकालना
- वीडियो कॉन्टेंट के बारे में सवालों के जवाब देना
- वीडियो में मौजूद किसी खास टाइमस्टैंप का रेफ़रंस देना
Gemini को शुरुआत से ही मल्टीमॉडल के तौर पर बनाया गया है. हम लगातार इस दिशा में काम कर रहे हैं कि इसे और बेहतर बनाया जा सके. इस गाइड में, वीडियो इनपुट के आधार पर टेक्स्ट रिस्पॉन्स जनरेट करने के लिए, Gemini API का इस्तेमाल करने का तरीका बताया गया है.
वीडियो इनपुट
Gemini को इन तरीकों से वीडियो इनपुट के तौर पर दिए जा सकते हैं:
generateContentसे अनुरोध करने से पहले, File API का इस्तेमाल करके वीडियो फ़ाइल अपलोड करें. इस तरीके का इस्तेमाल तब करें, जब आपको 20 एमबी से बड़ी फ़ाइलें या करीब एक मिनट से ज़्यादा अवधि के वीडियो अपलोड करने हों. इसके अलावा, अगर आपको एक ही फ़ाइल का इस्तेमाल कई अनुरोधों में करना है, तब भी इस तरीके का इस्तेमाल करें.generateContentके अनुरोध के साथ, इनलाइन वीडियो का डेटा पास करें. इस तरीके का इस्तेमाल, छोटी फ़ाइलों (<20 एमबी) और कम अवधि के लिए करें.generateContentअनुरोध के हिस्से के तौर पर, YouTube वीडियो के यूआरएल पास करें.
वीडियो फ़ाइल अपलोड करना
वीडियो फ़ाइल अपलोड करने के लिए, Files API का इस्तेमाल किया जा सकता है. जब अनुरोध का कुल साइज़ (इसमें फ़ाइल, टेक्स्ट प्रॉम्प्ट, सिस्टम के निर्देश वगैरह शामिल हैं) 20 एमबी से ज़्यादा हो, वीडियो की अवधि ज़्यादा हो या आपको एक ही वीडियो का इस्तेमाल कई प्रॉम्प्ट में करना हो, तो हमेशा Files API का इस्तेमाल करें. File API, वीडियो फ़ाइल फ़ॉर्मैट को सीधे तौर पर स्वीकार करता है.
यहां दिया गया कोड, सैंपल वीडियो को डाउनलोड करता है. इसके बाद, File API का इस्तेमाल करके उसे अपलोड करता है. साथ ही, वीडियो के प्रोसेस होने का इंतज़ार करता है. इसके बाद, generateContent अनुरोध में फ़ाइल के रेफ़रंस का इस्तेमाल करता है.
Python
from google import genai
client = genai.Client()
myfile = client.files.upload(file="path/to/sample.mp4")
response = client.models.generate_content(
model="gemini-2.5-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-2.5-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.5-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}" \
-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.5-flash:generateContent" \
-H "x-goog-api-key: $GEMINI_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
मीडिया फ़ाइलों के साथ काम करने के बारे में ज़्यादा जानने के लिए, Files API देखें.
वीडियो डेटा को इनलाइन पास करना
File API का इस्तेमाल करके वीडियो फ़ाइल अपलोड करने के बजाय, generateContent को सीधे तौर पर छोटे वीडियो भेजे जा सकते हैं. यह 20 एमबी से कम साइज़ वाले छोटे वीडियो के लिए सही है.
यहां इनलाइन वीडियो का डेटा देने का उदाहरण दिया गया है:
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-2.5-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.')
]
)
)
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-2.5-flash",
contents: contents,
});
console.log(response.text);
REST
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.5-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 को पास किया जा सकता है. इसके लिए, आपको generateContentअनुरोध में यह तरीका अपनाना होगा:
Python
response = client.models.generate_content(
model='models/gemini-2.5-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.')
]
)
)
JavaScript
import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-2.5-flash" });
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, 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-2.5-flash",
contents,
nil,
)
fmt.Println(result.Text())
}
REST
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-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 वीडियो अपलोड नहीं किया जा सकता.
- पैसे चुकाकर ली जाने वाली सदस्यता के लिए, वीडियो की अवधि के हिसाब से कोई सीमा तय नहीं की गई है.
- Gemini 2.5 से पहले के मॉडल के लिए, हर अनुरोध में सिर्फ़ एक वीडियो अपलोड किया जा सकता है. Gemini 2.5 और इसके बाद के मॉडल के लिए, हर अनुरोध में ज़्यादा से ज़्यादा 10 वीडियो अपलोड किए जा सकते हैं.
- सिर्फ़ सार्वजनिक वीडियो अपलोड किए जा सकते हैं. निजी या 'सबके लिए मौजूद नहीं' के तौर पर उपलब्ध वीडियो अपलोड नहीं किए जा सकते.
कॉन्टेंट में मौजूद टाइमस्टैंप देखें
वीडियो में किसी खास समय के बारे में सवाल पूछे जा सकते हैं. इसके लिए, 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?";
ऐप पर जाएं
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 मॉडल, वीडियो कॉन्टेंट को समझने के लिए बेहतर सुविधाएँ देते हैं. ये ऑडियो और विज़ुअल, दोनों स्ट्रीम से जानकारी प्रोसेस करते हैं. इसकी मदद से, आपको वीडियो के बारे में ज़्यादा जानकारी मिलती है. जैसे, वीडियो में क्या हो रहा है, इसके बारे में ब्यौरा जनरेट करना और वीडियो के कॉन्टेंट के बारे में सवालों के जवाब देना. विज़ुअल के बारे में जानकारी देने के लिए, मॉडल वीडियो को हर सेकंड में एक फ़्रेम की दर से सैंपल करता है. सैंपलिंग रेट से, ब्यौरे में दी गई जानकारी के लेवल पर असर पड़ सकता है. ऐसा खास तौर पर, उन वीडियो के लिए होता है जिनमें विज़ुअल तेज़ी से बदलते हैं.
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.";
ऐप पर जाएं
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 में वीडियो प्रोसेसिंग को अपनी पसंद के मुताबिक बनाया जा सकता है. इसके लिए, क्लिप बनाने के इंटरवल सेट करें या फ़्रेम रेट की सैंपलिंग को अपनी पसंद के मुताबिक बनाएं.
क्लिप करने के इंटरवल सेट करना
शुरू और खत्म होने के ऑफ़सेट के साथ videoMetadata तय करके, वीडियो को क्लिप किया जा सकता है.
Python
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model='models/gemini-2.5-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-2.5-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-2.5-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) सेट किया जा सकता है. यह खास तौर पर ऐसे वीडियो के लिए मददगार है जिनमें ज़्यादा बदलाव नहीं होता. जैसे, लेक्चर. अगर आपको तेज़ी से बदलते विज़ुअल में ज़्यादा जानकारी कैप्चर करनी है, तो ज़्यादा एफ़पीएस वैल्यू सेट करें.
काम करने वाले वीडियो फ़ॉर्मैट
Gemini, वीडियो फ़ॉर्मैट के इन MIME टाइप के साथ काम करता है:
video/mp4video/mpegvideo/movvideo/avivideo/x-flvvideo/mpgvideo/webmvideo/wmvvideo/3gpp
वीडियो के बारे में तकनीकी जानकारी
- इस्तेमाल किए जा सकने वाले मॉडल और कॉन्टेक्स्ट: Gemini 2.0 और 2.5 के सभी मॉडल, वीडियो डेटा को प्रोसेस कर सकते हैं.
- 20 लाख कॉन्टेक्स्ट विंडो वाले मॉडल, डिफ़ॉल्ट मीडिया रिज़ॉल्यूशन पर दो घंटे तक के वीडियो या कम मीडिया रिज़ॉल्यूशन पर छह घंटे तक के वीडियो प्रोसेस कर सकते हैं. वहीं, 10 लाख कॉन्टेक्स्ट विंडो वाले मॉडल, डिफ़ॉल्ट मीडिया रिज़ॉल्यूशन पर एक घंटे तक के वीडियो या कम मीडिया रिज़ॉल्यूशन पर तीन घंटे तक के वीडियो प्रोसेस कर सकते हैं.
- File API प्रोसेसिंग: File API का इस्तेमाल करते समय, वीडियो को एक फ़्रेम प्रति सेकंड (एफ़पीएस) पर सेव किया जाता है. साथ ही, ऑडियो को 1Kbps (सिंगल चैनल) पर प्रोसेस किया जाता है.
हर सेकंड टाइमस्टैंप जोड़े जाते हैं.
- इन दरों में आने वाले समय में बदलाव हो सकता है, ताकि अनुमान लगाने की प्रोसेस को बेहतर बनाया जा सके.
- अपने हिसाब से फ़्रेम रेट सेट करके, एक फ़्रेम प्रति सेकंड के सैंपलिंग रेट को बदला जा सकता है.
- टोकन की गिनती: वीडियो के हर सेकंड को इस तरह से टोकन में बदला जाता है:
- अलग-अलग फ़्रेम (1 एफ़पीएस पर सैंपल किए गए):
- अगर
mediaResolutionको कम पर सेट किया जाता है, तो हर फ़्रेम को 66 टोकन में बदला जाता है. - अगर ऐसा नहीं होता है, तो हर फ़्रेम के लिए 258 टोकन के हिसाब से फ़्रेम को टोकन में बदला जाता है.
- अगर
- ऑडियो: हर सेकंड 32 टोकन.
- इसमें मेटाडेटा भी शामिल होता है.
- कुल: डिफ़ॉल्ट मीडिया रिज़ॉल्यूशन पर, वीडियो के हर सेकंड के लिए करीब 300 टोकन या कम मीडिया रिज़ॉल्यूशन पर, वीडियो के हर सेकंड के लिए 100 टोकन.
- अलग-अलग फ़्रेम (1 एफ़पीएस पर सैंपल किए गए):
- टाइमस्टैंप का फ़ॉर्मैट: अगर आपको वीडियो के किसी खास हिस्से के बारे में बताना है, तो अपने प्रॉम्प्ट में
MM:SSफ़ॉर्मैट का इस्तेमाल करें. उदाहरण के लिए,01:15के लिए 1 मिनट और 15 सेकंड). - सबसे सही तरीके:
- बेहतर नतीजों के लिए, प्रॉम्प्ट के हर अनुरोध के लिए सिर्फ़ एक वीडियो का इस्तेमाल करें.
- अगर टेक्स्ट और एक वीडियो को साथ में इस्तेमाल किया जा रहा है, तो
contentsऐरे में वीडियो वाले हिस्से के बाद टेक्स्ट प्रॉम्प्ट डालें. - ध्यान दें कि 1 एफ़पीएस की सैंपलिंग दर की वजह से, तेज़ कार्रवाई वाले सीक्वेंस में जानकारी कम हो सकती है. अगर ज़रूरी हो, तो ऐसी क्लिप की स्पीड कम करें.
आगे क्या करना है
इस गाइड में, वीडियो फ़ाइलें अपलोड करने और वीडियो इनपुट से टेक्स्ट आउटपुट जनरेट करने का तरीका बताया गया है. ज़्यादा जानने के लिए, ये संसाधन देखें:
- सिस्टम के लिए निर्देश: सिस्टम के लिए निर्देश देने की सुविधा की मदद से, अपनी खास ज़रूरतों और इस्तेमाल के उदाहरणों के आधार पर, मॉडल के व्यवहार को कंट्रोल किया जा सकता है.
- Files API: Gemini के साथ इस्तेमाल करने के लिए, फ़ाइलें अपलोड करने और उन्हें मैनेज करने के बारे में ज़्यादा जानें.
- फ़ाइल प्रॉम्प्ट करने की रणनीतियां: Gemini API में टेक्स्ट, इमेज, ऑडियो, और वीडियो डेटा के साथ प्रॉम्प्ट करने की सुविधा उपलब्ध है. इसे मल्टीमॉडल प्रॉम्प्टिंग भी कहा जाता है.
- सुरक्षा से जुड़ी गाइडलाइन: कभी-कभी जनरेटिव एआई मॉडल ऐसे आउटपुट जनरेट करते हैं जिनकी उम्मीद नहीं होती. जैसे, गलत, पक्षपात करने वाले या आपत्तिजनक आउटपुट. ऐसे आउटपुट से होने वाले नुकसान के जोखिम को कम करने के लिए, पोस्ट-प्रोसेसिंग और मैन्युअल तरीके से समीक्षा करना ज़रूरी है.