Gemini मॉडल, वीडियो प्रोसेस कर सकते हैं. इससे डेवलपर को इस्तेमाल के कई ऐसे उदाहरण मिलते हैं जिनके लिए पहले, डोमेन के हिसाब से मॉडल की ज़रूरत होती थी. Gemini की विज़न से जुड़ी कुछ क्षमताओं में ये शामिल हैं:
- वीडियो के बारे में जानकारी देना, उन्हें सेगमेंट में बांटना, और उनसे जानकारी निकालना
- वीडियो कॉन्टेंट के बारे में सवालों के जवाब देना
- वीडियो में मौजूद किसी खास टाइमस्टैंप का रेफ़रंस देना
Gemini को शुरुआत से ही मल्टीमॉडल के तौर पर बनाया गया है. हम लगातार इस दिशा में काम कर रहे हैं कि इसे और बेहतर बनाया जा सके. इस गाइड में, वीडियो इनपुट के आधार पर टेक्स्ट रिस्पॉन्स जनरेट करने के लिए, Gemini API का इस्तेमाल करने का तरीका बताया गया है.
वीडियो इनपुट
Gemini को इन तरीकों से वीडियो इनपुट के तौर पर दिए जा सकते हैं:
generateContent
से अनुरोध करने से पहले, File API का इस्तेमाल करके वीडियो फ़ाइल अपलोड करें. इस तरीके का इस्तेमाल तब करें, जब आपको 20 एमबी से बड़ी फ़ाइलें, करीब एक मिनट से ज़्यादा अवधि वाले वीडियो अपलोड करने हों या आपको एक ही फ़ाइल का इस्तेमाल कई अनुरोधों में करना हो.generateContent
को अनुरोध भेजते समय, इनलाइन वीडियो का डेटा पास करें. इस तरीके का इस्तेमाल, छोटी फ़ाइलों (<20 एमबी) और कम अवधि के लिए करें.- सीधे प्रॉम्प्ट में 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
# 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',
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 वीडियो का यूआरएल शामिल करना
Gemini API और AI Studio में, YouTube के यूआरएल को फ़ाइल डेटा Part
के तौर पर इस्तेमाल किया जा सकता है. प्रॉम्प्ट के साथ YouTube वीडियो का यूआरएल शामिल किया जा सकता है. इससे मॉडल को वीडियो के कॉन्टेंट के बारे में खास जानकारी देने, उसका अनुवाद करने या उसके साथ इंटरैक्ट करने के लिए कहा जा सकता है.
सीमाएं:
- मुफ़्त टियर के लिए, हर दिन आठ घंटे से ज़्यादा का YouTube वीडियो अपलोड नहीं किया जा सकता.
- पैसे चुकाकर ली जाने वाली सदस्यता के लिए, वीडियो की अवधि के हिसाब से कोई सीमा तय नहीं की गई है.
- 2.5 से पहले के मॉडल के लिए, हर अनुरोध में सिर्फ़ एक वीडियो अपलोड किया जा सकता है. 2.5 से बाद के मॉडल के लिए, हर अनुरोध में ज़्यादा से ज़्यादा 10 वीडियो अपलोड किए जा सकते हैं.
- सिर्फ़ सार्वजनिक वीडियो अपलोड किए जा सकते हैं. निजी या 'सबके लिए मौजूद नहीं' के तौर पर उपलब्ध वीडियो अपलोड नहीं किए जा सकते.
यहां दिए गए उदाहरण में, प्रॉम्प्ट के साथ YouTube यूआरएल शामिल करने का तरीका बताया गया है:
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-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, 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
कॉन्टेंट में मौजूद टाइमस्टैंप देखें
वीडियो में किसी खास समय के बारे में सवाल पूछे जा सकते हैं. इसके लिए, 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 = "Transcribe the audio from this video, giving timestamps for salient events in the video. Also provide visual descriptions."
JavaScript
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."),
}
REST
PROMPT="Transcribe the audio from this video, giving timestamps for salient events in the video. Also provide visual descriptions."
वीडियो प्रोसेसिंग को पसंद के मुताबिक बनाना
Gemini API में वीडियो प्रोसेसिंग को अपनी पसंद के मुताबिक बनाया जा सकता है. इसके लिए, क्लिप करने के इंटरवल सेट करें या फ़्रेम रेट की कस्टम सैंपलिंग दें.
क्लिप करने के इंटरवल सेट करना
वीडियो को क्लिप करने के लिए, videoMetadata
के साथ शुरू और खत्म होने के ऑफ़सेट तय करें.
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=XEzRZ35urlk'),
video_metadata=types.VideoMetadata(
start_offset='1250s',
end_offset='1570s'
)
),
types.Part(text='Please summarize the video in 3 sentences.')
]
)
)
अपनी पसंद के मुताबिक फ़्रेम रेट सेट करना
videoMetadata
में fps
आर्ग्युमेंट पास करके, कस्टम फ़्रेम रेट सैंपलिंग सेट की जा सकती है.
Python
# 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',
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/mp4
video/mpeg
video/mov
video/avi
video/x-flv
video/mpg
video/webm
video/wmv
video/3gpp
वीडियो के बारे में तकनीकी जानकारी
- इस्तेमाल किए जा सकने वाले मॉडल और कॉन्टेक्स्ट: Gemini 2.0 और 2.5 के सभी मॉडल, वीडियो डेटा को प्रोसेस कर सकते हैं.
- 20 लाख कॉन्टेक्स्ट विंडो वाले मॉडल, डिफ़ॉल्ट मीडिया रिज़ॉल्यूशन पर दो घंटे तक के वीडियो या कम मीडिया रिज़ॉल्यूशन पर छह घंटे तक के वीडियो प्रोसेस कर सकते हैं. वहीं, 10 लाख कॉन्टेक्स्ट विंडो वाले मॉडल, डिफ़ॉल्ट मीडिया रिज़ॉल्यूशन पर एक घंटे तक के वीडियो या कम मीडिया रिज़ॉल्यूशन पर तीन घंटे तक के वीडियो प्रोसेस कर सकते हैं.
- File API की मदद से प्रोसेसिंग: File API का इस्तेमाल करते समय, वीडियो को हर सेकंड में एक फ़्रेम (एफ़पीएस) के हिसाब से सैंपल किया जाता है. साथ ही, ऑडियो को 1 केबीपीएस (सिंगल चैनल) के हिसाब से प्रोसेस किया जाता है.
हर सेकंड में टाइमस्टैंप जोड़े जाते हैं.
- अनुमान को बेहतर बनाने के लिए, आने वाले समय में इन दरों में बदलाव किया जा सकता है.
- टोकन की गिनती: वीडियो के हर सेकंड को इस तरह टोकन में बदला जाता है:
- अलग-अलग फ़्रेम (1 एफ़पीएस पर सैंपल किए गए):
- अगर
mediaResolution
को कम पर सेट किया जाता है, तो हर फ़्रेम को 66 टोकन में बदला जाता है. - अगर ऐसा नहीं होता है, तो हर फ़्रेम के लिए 258 टोकन के हिसाब से फ़्रेम को टोकन में बदला जाता है.
- अगर
- ऑडियो: हर सेकंड 32 टोकन.
- इसमें मेटाडेटा भी शामिल होता है.
- कुल: डिफ़ॉल्ट मीडिया रिज़ॉल्यूशन पर, वीडियो के हर सेकंड के लिए करीब 300 टोकन या कम मीडिया रिज़ॉल्यूशन पर, वीडियो के हर सेकंड के लिए 100 टोकन.
- अलग-अलग फ़्रेम (1 एफ़पीएस पर सैंपल किए गए):
- टाइमस्टैंप का फ़ॉर्मैट: अगर आपको वीडियो के किसी खास हिस्से के बारे में बताना है, तो अपने प्रॉम्प्ट में
MM:SS
फ़ॉर्मैट का इस्तेमाल करें. उदाहरण के लिए,01:15
के लिए 1 मिनट और 15 सेकंड). - सबसे सही तरीके:
- बेहतर नतीजों के लिए, हर प्रॉम्प्ट के लिए सिर्फ़ एक वीडियो का इस्तेमाल करें.
- अगर टेक्स्ट और एक वीडियो को साथ में इस्तेमाल किया जा रहा है, तो
contents
ऐरे में वीडियो वाले हिस्से के बाद टेक्स्ट प्रॉम्प्ट डालें. - ध्यान दें कि 1 एफ़पीएस सैंपलिंग रेट की वजह से, तेज़ गति से होने वाली गतिविधियों की जानकारी कम हो सकती है. अगर ज़रूरी हो, तो ऐसी क्लिप की स्पीड कम करें.
आगे क्या करना है
इस गाइड में, वीडियो फ़ाइलें अपलोड करने और वीडियो इनपुट से टेक्स्ट आउटपुट जनरेट करने का तरीका बताया गया है. ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें:
- सिस्टम के लिए निर्देश: सिस्टम के लिए निर्देश देने की सुविधा की मदद से, अपनी खास ज़रूरतों और इस्तेमाल के उदाहरणों के आधार पर, मॉडल के व्यवहार को कंट्रोल किया जा सकता है.
- Files API: Gemini के साथ इस्तेमाल करने के लिए, फ़ाइलें अपलोड करने और उन्हें मैनेज करने के बारे में ज़्यादा जानें.
- फ़ाइल प्रॉम्प्ट करने की रणनीतियां: Gemini API, टेक्स्ट, इमेज, ऑडियो, और वीडियो डेटा के साथ प्रॉम्प्ट करने की सुविधा देता है. इसे मल्टीमॉडल प्रॉम्प्टिंग भी कहा जाता है.
- सुरक्षा से जुड़ी गाइडलाइन: कभी-कभी जनरेटिव एआई मॉडल ऐसे आउटपुट जनरेट करते हैं जिनकी उम्मीद नहीं होती. जैसे, गलत, पक्षपात करने वाले या आपत्तिजनक आउटपुट. इस तरह के आउटपुट से होने वाले नुकसान के जोखिम को कम करने के लिए, पोस्ट-प्रोसेसिंग और मैन्युअल तरीके से आकलन करना ज़रूरी है.