জেমিনি মডেলগুলি ভিডিওগুলি প্রক্রিয়া করতে পারে, অনেক ফ্রন্টিয়ার ডেভেলপার ব্যবহারের ক্ষেত্রে সক্ষম করে যার জন্য ঐতিহাসিকভাবে ডোমেন নির্দিষ্ট মডেলের প্রয়োজন হবে। মিথুনের কিছু দৃষ্টিশক্তির মধ্যে রয়েছে:
- বর্ণনা করুন, বিভাগ করুন এবং 90 মিনিট পর্যন্ত ভিডিও থেকে তথ্য বের করুন
- ভিডিও বিষয়বস্তু সম্পর্কে প্রশ্নের উত্তর
- একটি ভিডিওর মধ্যে নির্দিষ্ট টাইমস্ট্যাম্প পড়ুন
জেমিনি মাটি থেকে মাল্টিমোডাল হওয়ার জন্য তৈরি করা হয়েছিল এবং আমরা যা সম্ভব তার সীমানায় ধাক্কা চালিয়ে যাচ্ছি। এই নির্দেশিকাটি দেখায় কিভাবে ভিডিও ইনপুটগুলির উপর ভিত্তি করে পাঠ্য প্রতিক্রিয়া তৈরি করতে Gemini API ব্যবহার করতে হয়।
আপনি শুরু করার আগে
Gemini API কল করার আগে, নিশ্চিত করুন যে আপনি আপনার পছন্দের SDK ইনস্টল করেছেন, এবং একটি Gemini API কী কনফিগার করা এবং ব্যবহারের জন্য প্রস্তুত।
ভিডিও ইনপুট
আপনি নিম্নলিখিত উপায়ে মিথুনকে ইনপুট হিসাবে ভিডিও প্রদান করতে পারেন:
-
generateContent
করার অনুরোধ করার আগে File API ব্যবহার করে একটি ভিডিও ফাইল আপলোড করুন । 20MB এর চেয়ে বড় ফাইল, প্রায় 1 মিনিটের বেশি ভিডিওর জন্য বা আপনি যখন একাধিক অনুরোধে ফাইলটি পুনরায় ব্যবহার করতে চান তখন এই পদ্ধতিটি ব্যবহার করুন৷ -
generateContent
অনুরোধের সাথে ইনলাইন ভিডিও ডেটা পাস করুন । ছোট ফাইল (<20MB) এবং ছোট সময়ের জন্য এই পদ্ধতিটি ব্যবহার করুন। - প্রম্পটে সরাসরি একটি YouTube URL অন্তর্ভুক্ত করুন ।
একটি ভিডিও ফাইল আপলোড করুন
আপনি একটি ভিডিও ফাইল আপলোড করতে Files API ব্যবহার করতে পারেন। সর্বদা Files API ব্যবহার করুন যখন মোট অনুরোধের আকার (ফাইল, পাঠ্য প্রম্পট, সিস্টেম নির্দেশাবলী, ইত্যাদি সহ) 20 MB-এর থেকে বড় হয়, ভিডিওর সময়কাল উল্লেখযোগ্য হয়, অথবা আপনি যদি একাধিক প্রম্পটে একই ভিডিও ব্যবহার করতে চান৷
ফাইল API সরাসরি ভিডিও ফাইল ফরম্যাট গ্রহণ করে। এই উদাহরণটি ছোট NASA ফিল্ম "বৃহস্পতির গ্রেট রেড স্পট সঙ্কুচিত এবং বৃদ্ধি" ব্যবহার করে। ক্রেডিট: গডার্ড স্পেস ফ্লাইট সেন্টার (GSFC)/ডেভিড ল্যাড (2018)।
"বৃহস্পতির গ্রেট রেড স্পট সঙ্কুচিত এবং বৃদ্ধি" সর্বজনীন ডোমেনে রয়েছে এবং সনাক্তযোগ্য ব্যক্তিদের দেখায় না৷ ( নাসা ইমেজ এবং মিডিয়া ব্যবহারের নির্দেশিকা। )
নিম্নলিখিত কোড নমুনা ভিডিও ডাউনলোড করে, এটি ফাইল API ব্যবহার করে আপলোড করে, এটি প্রক্রিয়া করার জন্য অপেক্ষা করে এবং তারপর একটি 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();
যাও
file, err := client.UploadFileFromPath(ctx, "path/to/sample.mp4", nil)
if err != nil {
log.Fatal(err)
}
defer client.DeleteFile(ctx, file.Name)
model := client.GenerativeModel("gemini-2.0-flash")
resp, err := model.GenerateContent(ctx,
genai.FileData{URI: file.URI},
genai.Text("Summarize this video. Then create a quiz with an answer key based on the information in this video."))
if err != nil {
log.Fatal(err)
}
printResponse(resp)
বিশ্রাম
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
মিডিয়া ফাইলগুলির সাথে কাজ করার বিষয়ে আরও জানতে, ফাইল API দেখুন।
ভিডিও ডেটা ইনলাইনে পাস করুন
ফাইল API ব্যবহার করে একটি ভিডিও ফাইল আপলোড করার পরিবর্তে, আপনি generateContent
অনুরোধে সরাসরি ছোট ভিডিও পাস করতে পারেন। এটি 20MB মোট অনুরোধের আকারের কম ছোট ভিডিওগুলির জন্য উপযুক্ত৷
এখানে ইনলাইন ভিডিও ডেটা প্রদানের একটি উদাহরণ রয়েছে:
পাইথন
# 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
একটি YouTube URL অন্তর্ভুক্ত করুন
Gemini API এবং AI স্টুডিও একটি ফাইল ডেটা Part
হিসাবে YouTube URL সমর্থন করে। আপনি মডেলটিকে ভিডিও সামগ্রীর সংক্ষিপ্তসার, অনুবাদ বা অন্যথায় ইন্টারঅ্যাক্ট করতে বলার জন্য একটি প্রম্পট সহ একটি YouTube URL অন্তর্ভুক্ত করতে পারেন৷
সীমাবদ্ধতা:
- আপনি প্রতিদিন 8 ঘন্টার বেশি YouTube ভিডিও আপলোড করতে পারবেন না।
- আপনি প্রতি অনুরোধে শুধুমাত্র 1টি ভিডিও আপলোড করতে পারবেন।
- আপনি শুধুমাত্র সর্বজনীন ভিডিও আপলোড করতে পারেন (ব্যক্তিগত বা তালিকাভুক্ত ভিডিও নয়)।
নিচের উদাহরণটি দেখায় কিভাবে একটি প্রম্পট সহ একটি YouTube URL অন্তর্ভুক্ত করতে হয়:
পাইথন
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());
যাও
ctx := context.Background()
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GOOGLE_API_KEY")))
if err != nil {
log.Fatal(err)
}
defer client.Close()
model := client.GenerativeModel("gemini-2.0-flash")
resp, err := model.GenerateContent(ctx,
genai.FileData{URI: "https://www.youtube.com/watch?v=9hE5-98ZeCg"},
genai.Text("Please summarize the video in 3 sentences."))
if err != nil {
log.Fatal(err)
}
// Handle the response of generated text.
for _, c := range resp.Candidates {
if c.Content != nil {
fmt.Println(*c.Content)
}
}
বিশ্রাম
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
বিষয়বস্তু টাইমস্ট্যাম্প পড়ুন
আপনি 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.FileData{URI: currentVideoFile.URI, MIMEType: currentVideoFile.MIMEType},
// Adjusted timestamps for the NASA video
genai.Text("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?"
ভিডিও প্রতিলিপি এবং ভিজ্যুয়াল বিবরণ প্রদান
মিথুন মডেলগুলি অডিও ট্র্যাক এবং ভিজ্যুয়াল ফ্রেম উভয় প্রক্রিয়াকরণের মাধ্যমে ভিডিও সামগ্রীর ভিজ্যুয়াল বিবরণ প্রতিলিপি এবং প্রদান করতে পারে। ভিজ্যুয়াল বর্ণনার জন্য, মডেলটি প্রতি সেকেন্ডে 1 ফ্রেম হারে ভিডিওটির নমুনা দেয়। এই নমুনা হার বর্ণনার বিশদ স্তরকে প্রভাবিত করতে পারে, বিশেষ করে দ্রুত পরিবর্তনশীল ভিজ্যুয়াল সহ ভিডিওগুলির জন্য।
পাইথন
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.FileData{URI: currentVideoFile.URI, MIMEType: currentVideoFile.MIMEType},
genai.Text("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."
সমর্থিত ভিডিও ফরম্যাট
মিথুন নিম্নলিখিত ভিডিও ফর্ম্যাট MIME প্রকারগুলিকে সমর্থন করে:
-
video/mp4
-
video/mpeg
-
video/mov
-
video/avi
-
video/x-flv
-
video/mpg
-
video/webm
-
video/wmv
-
video/3gpp
ভিডিও সম্পর্কে প্রযুক্তিগত বিবরণ
- সমর্থিত মডেল এবং প্রসঙ্গ : সমস্ত জেমিনি 2.0 এবং 2.5 মডেল ভিডিও ডেটা প্রক্রিয়া করতে পারে।
- একটি 2M প্রসঙ্গ উইন্ডো সহ মডেলগুলি 2 ঘন্টা পর্যন্ত ভিডিওগুলি প্রক্রিয়া করতে পারে, যখন 1M প্রসঙ্গ উইন্ডো সহ মডেলগুলি 1 ঘন্টা পর্যন্ত ভিডিওগুলি প্রক্রিয়া করতে পারে৷
- ফাইল এপিআই প্রসেসিং : ফাইল এপিআই ব্যবহার করার সময়, ভিডিওগুলি 1 ফ্রেম প্রতি সেকেন্ডে (FPS) নমুনা করা হয় এবং অডিও 1Kbps (একক চ্যানেল) এ প্রক্রিয়া করা হয়। টাইমস্ট্যাম্প প্রতি সেকেন্ডে যোগ করা হয়।
- অনুমানের উন্নতির জন্য এই হারগুলি ভবিষ্যতে পরিবর্তন সাপেক্ষে।
- টোকেন গণনা : ভিডিওর প্রতিটি সেকেন্ড নিম্নরূপ টোকেনাইজ করা হয়:
- স্বতন্ত্র ফ্রেম (1 FPS এ নমুনা): প্রতি ফ্রেমে 258 টোকেন।
- অডিও: প্রতি সেকেন্ডে 32 টোকেন।
- মেটাডেটাও অন্তর্ভুক্ত।
- মোট: ভিডিওর প্রতি সেকেন্ডে প্রায় 300 টোকেন।
- টাইমস্ট্যাম্প বিন্যাস : আপনার প্রম্পটের মধ্যে একটি ভিডিওতে নির্দিষ্ট মুহুর্তগুলি উল্লেখ করার সময়,
MM:SS
বিন্যাসটি ব্যবহার করুন (যেমন,01:15
1 মিনিট এবং 15 সেকেন্ডের জন্য)। - সর্বোত্তম অনুশীলন :
- সর্বোত্তম ফলাফলের জন্য প্রতি অনুরোধে শুধুমাত্র একটি ভিডিও ব্যবহার করুন।
- পাঠ্য এবং একটি একক ভিডিও একত্রিত হলে,
contents
অ্যারেতে ভিডিও অংশের পরে পাঠ্য প্রম্পট রাখুন। - সচেতন থাকুন যে 1 FPS স্যাম্পলিং হারের কারণে দ্রুত অ্যাকশন সিকোয়েন্স বিশদ হারাতে পারে। প্রয়োজনে এই জাতীয় ক্লিপগুলিকে ধীর করার কথা বিবেচনা করুন।
এরপর কি
এই গাইডটি দেখায় কিভাবে ভিডিও ফাইল আপলোড করতে হয় এবং ভিডিও ইনপুট থেকে টেক্সট আউটপুট তৈরি করতে হয়। আরও জানতে, নিম্নলিখিত সংস্থানগুলি দেখুন:
- সিস্টেম নির্দেশাবলী : সিস্টেম নির্দেশাবলী আপনাকে আপনার নির্দিষ্ট প্রয়োজন এবং ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে মডেলের আচরণ পরিচালনা করতে দেয়।
- ফাইল এপিআই : মিথুনের সাথে ব্যবহারের জন্য ফাইল আপলোড এবং পরিচালনা সম্পর্কে আরও জানুন।
- ফাইল প্রম্পটিং কৌশল : জেমিনি এপিআই টেক্সট, ইমেজ, অডিও এবং ভিডিও ডেটা সহ প্রম্পটিং সমর্থন করে, যা মাল্টিমডাল প্রম্পটিং নামেও পরিচিত।
- নিরাপত্তা নির্দেশিকা : কখনও কখনও জেনারেটিভ এআই মডেলগুলি অপ্রত্যাশিত আউটপুট তৈরি করে, যেমন আউটপুটগুলি ভুল, পক্ষপাতদুষ্ট বা আপত্তিকর। এই ধরনের আউটপুট থেকে ক্ষতির ঝুঁকি সীমিত করার জন্য পোস্ট-প্রসেসিং এবং মানব মূল্যায়ন অপরিহার্য।