ভিডিও বোঝার

জেমিনি মডেলগুলি ভিডিও প্রক্রিয়া করতে পারে, যা অনেক সীমান্তবর্তী ডেভেলপার ব্যবহারের ক্ষেত্রে সক্ষম করে যেখানে ঐতিহাসিকভাবে ডোমেন-নির্দিষ্ট মডেলের প্রয়োজন হত। জেমিনির কিছু দৃষ্টি ক্ষমতার মধ্যে রয়েছে:

  • ভিডিও থেকে তথ্য বর্ণনা করুন, ভাগ করুন এবং বের করুন
  • ভিডিও কন্টেন্ট সম্পর্কে প্রশ্নের উত্তর দিন
  • একটি ভিডিওর মধ্যে নির্দিষ্ট টাইমস্ট্যাম্পগুলি দেখুন

জেমিনিকে শুরু থেকেই মাল্টিমোডাল হিসেবে তৈরি করা হয়েছিল এবং আমরা যা সম্ভব তার সীমানা অতিক্রম করে চলেছি। এই নির্দেশিকাটি দেখায় যে ভিডিও ইনপুটের উপর ভিত্তি করে টেক্সট প্রতিক্রিয়া তৈরি করতে জেমিনি API কীভাবে ব্যবহার করতে হয়।

ভিডিও ইনপুট

আপনি নিম্নলিখিত উপায়ে মিথুন রাশির ভিডিও ইনপুট হিসেবে প্রদান করতে পারেন:

  • generateContent অনুরোধ করার আগে File API ব্যবহার করে একটি ভিডিও ফাইল আপলোড করুন । 20MB এর চেয়ে বড় ফাইল, প্রায় 1 মিনিটের চেয়ে বড় ভিডিও, অথবা যখন আপনি একাধিক অনুরোধের মাধ্যমে ফাইলটি পুনরায় ব্যবহার করতে চান তখন এই পদ্ধতিটি ব্যবহার করুন।
  • generateContent অনুরোধের সাথে ইনলাইন ভিডিও ডেটা পাস করুন । ছোট ফাইল (<20MB) এবং কম সময়কালের জন্য এই পদ্ধতিটি ব্যবহার করুন।
  • আপনার generateContent অনুরোধের অংশ হিসেবে YouTube URL গুলি পাস করুন

একটি ভিডিও ফাইল আপলোড করুন

আপনি একটি ভিডিও ফাইল আপলোড করার জন্য Files API ব্যবহার করতে পারেন। যখন মোট অনুরোধের আকার (ফাইল, টেক্সট প্রম্পট, সিস্টেম নির্দেশাবলী ইত্যাদি সহ) 20 MB এর বেশি হয়, ভিডিওর সময়কাল উল্লেখযোগ্য হয়, অথবা আপনি যদি একই ভিডিও একাধিক প্রম্পটে ব্যবহার করতে চান তবে সর্বদা Files API ব্যবহার করুন। File API সরাসরি ভিডিও ফাইল ফর্ম্যাট গ্রহণ করে।

নিম্নলিখিত কোডটি নমুনা ভিডিওটি ডাউনলোড করে, ফাইল API ব্যবহার করে আপলোড করে, এটি প্রক্রিয়াকরণের জন্য অপেক্ষা করে এবং তারপর একটি generateContent অনুরোধে ফাইল রেফারেন্স ব্যবহার করে।

পাইথন

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)

জাভাস্ক্রিপ্ট

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())

বিশ্রাম

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 অনুরোধে ছোট ভিডিওগুলি পাস করতে পারেন। এটি 20MB মোট অনুরোধ আকারের কম ছোট ভিডিওগুলির জন্য উপযুক্ত।

ইনলাইন ভিডিও ডেটা প্রদানের একটি উদাহরণ এখানে দেওয়া হল:

পাইথন

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.')
        ]
    )
)

জাভাস্ক্রিপ্ট

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);

বিশ্রাম

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

ইউটিউব ইউআরএলগুলি পাস করুন

আপনার generateContent অনুরোধের অংশ হিসেবে আপনি ইউটিউব URL গুলি সরাসরি Gemini API-তে নিম্নলিখিতভাবে পাঠাতে পারেন:

পাইথন

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.')
        ]
    )
)

জাভাস্ক্রিপ্ট

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())
}

বিশ্রাম

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 ফর্মের টাইমস্ট্যাম্প ব্যবহার করে ভিডিওতে নির্দিষ্ট সময়ের বিষয়গুলি সম্পর্কে প্রশ্ন জিজ্ঞাসা করতে পারেন।

পাইথন

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?"

ভিডিও থেকে বিস্তারিত অন্তর্দৃষ্টি বের করুন

জেমিনি মডেলগুলি অডিও এবং ভিজ্যুয়াল উভয় স্ট্রিম থেকে তথ্য প্রক্রিয়াকরণের মাধ্যমে ভিডিও কন্টেন্ট বোঝার জন্য শক্তিশালী ক্ষমতা প্রদান করে। এটি আপনাকে একটি ভিডিওতে কী ঘটছে তার বর্ণনা তৈরি করা এবং এর বিষয়বস্তু সম্পর্কে প্রশ্নের উত্তর দেওয়া সহ বিশদ বিবরণের একটি সমৃদ্ধ সেট বের করতে দেয়। ভিজ্যুয়াল বর্ণনার জন্য, মডেলটি প্রতি সেকেন্ডে 1 ফ্রেম হারে ভিডিওটির নমুনা নেয়। এই নমুনা হার বর্ণনার বিশদ স্তরকে প্রভাবিত করতে পারে, বিশেষ করে দ্রুত পরিবর্তনশীল ভিজ্যুয়াল সহ ভিডিওগুলির জন্য।

পাইথন

prompt = "Describe the key events in this video, providing both audio and visual details. Include timestamps for salient moments."

জাভাস্ক্রিপ্ট

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."),
    }

বিশ্রাম

PROMPT="Describe the key events in this video, providing both audio and visual details. Include timestamps for salient moments."

ভিডিও প্রক্রিয়াকরণ কাস্টমাইজ করুন

ক্লিপিং ইন্টারভাল সেট করে অথবা কাস্টম ফ্রেম রেট স্যাম্পলিং প্রদান করে আপনি জেমিনি এপিআই-তে ভিডিও প্রসেসিং কাস্টমাইজ করতে পারেন।

ক্লিপিং ব্যবধান সেট করুন

আপনি শুরু এবং শেষ অফসেট সহ videoMetadata নির্দিষ্ট করে ভিডিও ক্লিপ করতে পারেন।

পাইথন

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.')
        ]
    )
)

জাভাস্ক্রিপ্ট

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 আর্গুমেন্ট পাস করে কাস্টম ফ্রেম রেট স্যাম্পলিং সেট করতে পারেন।

পাইথন

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.')
        ]
    )
)

ডিফল্টরূপে ভিডিও থেকে প্রতি সেকেন্ডে ১ ফ্রেম (FPS) নমুনা নেওয়া হয়। লম্বা ভিডিওর জন্য আপনি কম FPS (< 1) সেট করতে চাইতে পারেন। এটি বেশিরভাগ স্ট্যাটিক ভিডিওর জন্য (যেমন বক্তৃতা) বিশেষভাবে কার্যকর। দ্রুত পরিবর্তনশীল ভিজ্যুয়ালে আরও বিশদ ক্যাপচার করতে চাইলে, উচ্চতর FPS মান সেট করার কথা বিবেচনা করুন।

সমর্থিত ভিডিও ফরম্যাট

জেমিনি নিম্নলিখিত ভিডিও ফর্ম্যাট MIME প্রকারগুলিকে সমর্থন করে:

  • video/mp4
  • video/mpeg
  • video/mov
  • video/avi
  • video/x-flv
  • video/mpg
  • video/webm
  • video/wmv
  • video/3gpp

ভিডিও সম্পর্কে প্রযুক্তিগত বিবরণ

  • সমর্থিত মডেল এবং প্রসঙ্গ : সমস্ত জেমিনি ২.০ এবং ২.৫ মডেল ভিডিও ডেটা প্রক্রিয়া করতে পারে।
    • 2M কনটেক্সট উইন্ডোযুক্ত মডেলগুলি ডিফল্ট মিডিয়া রেজোলিউশনে 2 ঘন্টা পর্যন্ত দীর্ঘ বা কম মিডিয়া রেজোলিউশনে 6 ঘন্টা পর্যন্ত দীর্ঘ ভিডিও প্রক্রিয়া করতে পারে, যেখানে 1M কনটেক্সট উইন্ডোযুক্ত মডেলগুলি ডিফল্ট মিডিয়া রেজোলিউশনে 1 ঘন্টা পর্যন্ত দীর্ঘ বা কম মিডিয়া রেজোলিউশনে 3 ঘন্টা দীর্ঘ ভিডিও প্রক্রিয়া করতে পারে।
  • ফাইল এপিআই প্রক্রিয়াকরণ : ফাইল এপিআই ব্যবহার করার সময়, ভিডিওগুলি প্রতি সেকেন্ডে ১ ফ্রেমে (FPS) সংরক্ষণ করা হয় এবং অডিও ১Kbps (একক চ্যানেল) প্রক্রিয়া করা হয়। প্রতি সেকেন্ডে টাইমস্ট্যাম্প যোগ করা হয়।
    • ভবিষ্যতে অনুমানের উন্নতির জন্য এই হারগুলি পরিবর্তন সাপেক্ষে।
    • আপনি একটি কাস্টম ফ্রেম রেট সেট করে ১ FPS স্যাম্পলিং রেট ওভাররাইড করতে পারেন।
  • টোকেন গণনা : ভিডিওর প্রতিটি সেকেন্ড নিম্নরূপ টোকেনাইজ করা হয়েছে:
    • পৃথক ফ্রেম (১ FPS এ নমুনা নেওয়া):
      • যদি mediaResolution কম সেট করা থাকে, তাহলে ফ্রেমগুলি প্রতি ফ্রেমে 66 টোকেন হারে টোকেনাইজ করা হয়।
      • অন্যথায়, ফ্রেমগুলি প্রতি ফ্রেমে 258 টোকেন হারে টোকেনাইজ করা হয়।
    • অডিও: প্রতি সেকেন্ডে ৩২ টোকেন।
    • মেটাডেটাও অন্তর্ভুক্ত।
    • মোট: ডিফল্ট মিডিয়া রেজোলিউশনে প্রতি সেকেন্ডে ভিডিওতে প্রায় 300 টোকেন, অথবা কম মিডিয়া রেজোলিউশনে প্রতি সেকেন্ডে 100 টোকেন।
  • টাইমস্ট্যাম্প ফর্ম্যাট : আপনার প্রম্পটের মধ্যে কোনও ভিডিওতে নির্দিষ্ট মুহূর্তগুলি উল্লেখ করার সময়, MM:SS ফর্ম্যাটটি ব্যবহার করুন (যেমন, 01:15 , 1 মিনিট 15 সেকেন্ডের জন্য)।
  • সেরা অনুশীলন :
    • সর্বোত্তম ফলাফলের জন্য প্রতি প্রম্পট অনুরোধে শুধুমাত্র একটি ভিডিও ব্যবহার করুন।
    • যদি টেক্সট এবং একটি ভিডিও একত্রিত করা হয়, তাহলে contents অ্যারেতে ভিডিও অংশের পরে টেক্সট প্রম্পটটি রাখুন।
    • ১ FPS স্যাম্পলিং রেটের কারণে দ্রুত অ্যাকশন সিকোয়েন্সের বিস্তারিত বিবরণ হারাতে পারে, সেদিকে খেয়াল রাখবেন। প্রয়োজনে এই ধরনের ক্লিপ ধীর করার কথা বিবেচনা করুন।

এরপর কি?

এই নির্দেশিকাটি ভিডিও ফাইল আপলোড এবং ভিডিও ইনপুট থেকে টেক্সট আউটপুট তৈরি করার পদ্ধতি দেখায়। আরও জানতে, নিম্নলিখিত রিসোর্সগুলি দেখুন:

  • সিস্টেম নির্দেশাবলী : সিস্টেম নির্দেশাবলী আপনাকে আপনার নির্দিষ্ট চাহিদা এবং ব্যবহারের ক্ষেত্রের উপর ভিত্তি করে মডেলের আচরণ পরিচালনা করতে দেয়।
  • ফাইলস এপিআই : জেমিনির সাথে ব্যবহারের জন্য ফাইল আপলোড এবং পরিচালনা সম্পর্কে আরও জানুন।
  • ফাইল প্রম্পটিং কৌশল : জেমিনি এপিআই টেক্সট, ইমেজ, অডিও এবং ভিডিও ডেটা সহ প্রম্পটিং সমর্থন করে, যা মাল্টিমোডাল প্রম্পটিং নামেও পরিচিত।
  • নিরাপত্তা নির্দেশিকা : কখনও কখনও জেনারেটিভ এআই মডেলগুলি অপ্রত্যাশিত আউটপুট তৈরি করে, যেমন আউটপুটগুলি ভুল, পক্ষপাতদুষ্ট বা আক্রমণাত্মক। এই ধরনের আউটপুট থেকে ক্ষতির ঝুঁকি সীমিত করার জন্য পোস্ট-প্রসেসিং এবং মানব মূল্যায়ন অপরিহার্য।