ভিডিও বোঝার

ভিডিও তৈরি সম্পর্কে জানতে, জেমিনি অমনি ফ্ল্যাশ গাইডটি দেখুন।

জেমিনি মডেল ভিডিও প্রসেস করতে পারে, যা ডেভেলপারদের জন্য এমন অনেক অত্যাধুনিক ব্যবহারের সুযোগ তৈরি করে, যার জন্য ঐতিহাসিকভাবে ডোমেইন-নির্দিষ্ট মডেলের প্রয়োজন হতো। জেমিনির ভিশন সক্ষমতাগুলোর মধ্যে রয়েছে: ভিডিও বর্ণনা করা, সেগমেন্ট করা এবং তা থেকে তথ্য নিষ্কাশন করা; ভিডিওর বিষয়বস্তু সম্পর্কে প্রশ্নের উত্তর দেওয়া; এবং একটি ভিডিওর মধ্যে নির্দিষ্ট টাইমস্ট্যাম্প উল্লেখ করা।

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

ইনপুট পদ্ধতি সর্বোচ্চ আকার সুপারিশকৃত ব্যবহারের ক্ষেত্র
ফাইল এপিআই ২০ জিবি (মূল্য পরিশোধিত) / ২ জিবি (বিনামূল্যে) বড় ফাইল (১০০ মেগাবাইট+), দীর্ঘ ভিডিও (১০ মিনিট+), পুনঃব্যবহারযোগ্য ফাইল।
ক্লাউড স্টোরেজ নিবন্ধন ২ জিবি (প্রতি ফাইলে, স্টোরেজের কোনো সীমা নেই) বড় ফাইল (১০০ মেগাবাইট+), দীর্ঘ ভিডিও (১০ মিনিট+), স্থায়ী ও পুনঃব্যবহারযোগ্য ফাইল।
ইনলাইন ডেটা < ১০০ মেগাবাইট ছোট ফাইল (<১০০ মেগাবাইট), স্বল্প সময়কাল (<১ মিনিট), এককালীন ইনপুট।
ইউটিউব ইউআরএল প্রযোজ্য নয় সর্বজনীন ইউটিউব ভিডিও।

দ্রষ্টব্য: বেশিরভাগ ক্ষেত্রে ফাইল এপিআই (File API) ব্যবহার করার পরামর্শ দেওয়া হয়, বিশেষ করে ১০০ মেগাবাইটের চেয়ে বড় ফাইলের জন্য অথবা যখন আপনি একাধিক অনুরোধে ফাইলটি পুনরায় ব্যবহার করতে চান।

অন্যান্য ফাইল ইনপুট পদ্ধতি, যেমন এক্সটার্নাল ইউআরএল বা গুগল ক্লাউডে সংরক্ষিত ফাইল ব্যবহার করার বিষয়ে জানতে, ফাইল ইনপুট পদ্ধতি নির্দেশিকাটি দেখুন।

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

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

পাইথন

from google import genai
import time

client = genai.Client()

myfile = client.files.upload(file="path/to/sample.mp4")

while not myfile.state or myfile.state.name != "ACTIVE":
    print("Processing video...")
    time.sleep(5)
    myfile = client.files.get(name=myfile.name)

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {"type": "video", "uri": myfile.uri, "mime_type": myfile.mime_type},
        {"type": "text", "text": "Summarize this video. Then create a quiz with an answer key based on the information in this video."}
    ]
)

print(interaction.output_text)

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

import { GoogleGenAI } 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" },
  });

  let getFile = await ai.files.get({ name: myfile.name });
  while (getFile.state === 'PROCESSING') {
      getFile = await ai.files.get({ name: myfile.name });
      console.log(`current file status: ${getFile.state}`);
      console.log('File is still processing, retrying in 5 seconds');

      await new Promise((resolve) => {
          setTimeout(resolve, 5000);
      });
  }
  if (getFile.state === 'FAILED') {
      throw new Error('File processing failed.');
  }

  const interaction = await ai.interactions.create({
    model: "gemini-3.8-flash",
    input: [
      { type: "video", uri: myfile.uri, mime_type: myfile.mimeType },
      { type: "text", text: "Summarize this video. Then create a quiz with an answer key based on the information in this video." }
    ],
  });
  console.log(interaction.output_text);
}

await main();

জাভা

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.VideoContent;
import com.google.genai.gaos.models.interactions.VideoContentMimeType;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

Content textContent = TextContent.builder().text("Summarize the key events in this video.").build();
Content videoContent =
    VideoContent.builder()
        .uri("gs://cloud-samples-data/generative-ai/video/pixel8.mp4")
        .mimeType(VideoContentMimeType.VIDEO_MP4)
        .build();

List<Content> contents = Arrays.asList(textContent, videoContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

বিশ্রাম

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)
file_name=$(jq -r ".file.name" file_info.json)
echo file_uri=$file_uri

echo "File uploaded successfully. File URI: ${file_uri}"

# Polling loop
echo "Waiting for file to be processed..."
while true; do
  curl -s "https://generativelanguage.googleapis.com/v1beta/${file_name}" \
    -H "x-goog-api-key: $GEMINI_API_KEY" > file_status.json
  state=$(jq -r ".state" file_status.json)
  echo "Current state: $state"
  if [ "$state" == "ACTIVE" ]; then
    break
  elif [ "$state" == "FAILED" ]; then
    echo "File processing failed."
    exit 1
  fi
  sleep 5
done

echo "Generating content from video..."
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "gemini-3.8-flash",
      "input": [
        {"type": "video", "uri": "'${file_uri}'", "mime_type": "'${MIME_TYPE}'"},
        {"type": "text", "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 ".steps[].content[0].text" response.json

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

মিডিয়া ফাইল নিয়ে কাজ করার বিষয়ে আরও জানতে, ফাইলস এপিআই (Files API) দেখুন।

ভিডিও ডেটা ইনলাইনে পাঠান

ফাইল এপিআই ব্যবহার করে ভিডিও ফাইল আপলোড করার পরিবর্তে, আপনি ছোট ভিডিওগুলো সরাসরি রিকোয়েস্টে পাঠাতে পারেন। এটি ২০ মেগাবাইটের কম মোট রিকোয়েস্ট সাইজের ছোট ভিডিওর জন্য উপযুক্ত।

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

পাইথন

from google import genai
import base64

video_file_name = "/path/to/your/video.mp4"
video_bytes = open(video_file_name, 'rb').read()

client = genai.Client()
interaction = client.interactions.create(
    model='gemini-3.8-flash',
    input=[
        {"type": "text", "text": "Please summarize the video in 3 sentences."},
        {
            "type": "video",
            "data": base64.b64encode(video_bytes).decode('utf-8'),
            "mime_type": "video/mp4"
        }
    ]
)
print(interaction.output_text)

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

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 interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: [
    { type: "text", text: "Please summarize the video in 3 sentences." },
    {
      type: "video",
      data: base64VideoFile,
      mime_type: "video/mp4",
    }
  ],
});
console.log(interaction.output_text);

জাভা

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.VideoContent;
import com.google.genai.gaos.models.interactions.VideoContentMimeType;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

Content textContent = TextContent.builder().text("Summarize the key events in this video.").build();
Content videoContent =
    VideoContent.builder()
        .uri("gs://cloud-samples-data/generative-ai/video/pixel8.mp4")
        .mimeType(VideoContentMimeType.VIDEO_MP4)
        .build();

List<Content> contents = Arrays.asList(textContent, videoContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

বিশ্রাম

VIDEO_PATH=/path/to/your/video.mp4

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "gemini-3.8-flash",
      "input": [
        {"type": "text", "text": "Please summarize the video in 3 sentences."},
        {
          "type": "video",
          "data": "'$(base64 $B64FLAGS $VIDEO_PATH)'",
          "mime_type": "video/mp4"
        }
      ]
    }' 2> /dev/null

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

আপনি নিম্নলিখিত উপায়ে আপনার অনুরোধের অংশ হিসাবে সরাসরি জেমিনি এপিআই-তে ইউটিউব ইউআরএল পাঠাতে পারেন:

পাইথন

from google import genai

client = genai.Client()
interaction = client.interactions.create(
    model='gemini-3.8-flash',
    input=[
        {"type": "text", "text": "Please summarize the video in 3 sentences."},
        {
            "type": "video",
            "uri": "https://www.youtube.com/watch?v=9hE5-98ZeCg"
        }
    ]
)
print(interaction.output_text)

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

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: [
    { type: "text", text: "Please summarize the video in 3 sentences." },
    {
      type: "video",
      uri: "https://www.youtube.com/watch?v=9hE5-98ZeCg",
    }
  ],
});
console.log(interaction.output_text);

জাভা

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.VideoContent;
import com.google.genai.gaos.models.interactions.VideoContentMimeType;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

Content textContent = TextContent.builder().text("Summarize the key events in this video.").build();
Content videoContent =
    VideoContent.builder()
        .uri("gs://cloud-samples-data/generative-ai/video/pixel8.mp4")
        .mimeType(VideoContentMimeType.VIDEO_MP4)
        .build();

List<Content> contents = Arrays.asList(textContent, videoContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

বিশ্রাম

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "gemini-3.8-flash",
      "input": [
        {"type": "text", "text": "Please summarize the video in 3 sentences."},
        {
          "type": "video",
          "uri": "https://www.youtube.com/watch?v=9hE5-98ZeCg"
        }
      ]
    }' 2> /dev/null

সীমাবদ্ধতা:

  • ফ্রি টিয়ারের জন্য, আপনি প্রতিদিন ৮ ঘণ্টার বেশি ইউটিউব ভিডিও আপলোড করতে পারবেন না।
  • পেইড টায়ারের ক্ষেত্রে ভিডিওর দৈর্ঘ্যের কোনো সীমা নেই।
  • জেমিনি ২.৫-এর পূর্ববর্তী মডেলগুলোর জন্য, আপনি প্রতি অনুরোধে কেবল ১টি ভিডিও আপলোড করতে পারবেন। জেমিনি ২.৫ এবং পরবর্তী মডেলগুলোর জন্য, আপনি প্রতি অনুরোধে সর্বোচ্চ ১০টি ভিডিও আপলোড করতে পারবেন।
  • আপনি শুধুমাত্র পাবলিক ভিডিও আপলোড করতে পারবেন (প্রাইভেট বা আনলিস্টেড ভিডিও নয়)।

এজেন্টিক ভিডিও বোঝা

ডিফল্টরূপে, ভিডিও ইনপুটগুলো স্ট্যাটিক প্রসেসিং ব্যবহার করে (অর্থাৎ প্রতি সেকেন্ডে ১ ফ্রেম হারে ফ্রেম এক্সট্র্যাক্ট করে)। Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash, এবং 3.5 Flash Lite মডেলগুলো agentic video understanding-ও সাপোর্ট করে, যেখানে মডেলটি ডায়নামিকভাবে ভিডিও টাইমলাইন অন্বেষণ করে, বেছে বেছে ট্রান্সক্রিপ্ট পরীক্ষা করে এবং প্রম্পটের উপর ভিত্তি করে তাৎক্ষণিকভাবে ফ্রেম রেট ও রেজোলিউশন অভিযোজিতভাবে সামঞ্জস্য করে।

মোড বর্ণনা সমর্থিত মডেল
স্থির (ডিফল্ট) একটি নির্দিষ্ট হারে (১ এফপিএস) ফ্রেমগুলো আলাদা করে এবং একবারে সেগুলোকে প্রাসঙ্গিক স্থানে স্থাপন করে। ছোট ক্লিপের জন্য এটি ভালোভাবে কাজ করে। সমস্ত জেমিনি মডেল
এজেন্টিক মডেলটি প্রম্পটের উপর ভিত্তি করে ভিডিও টাইমলাইনে গতিশীলভাবে নেভিগেট করে এবং শুধুমাত্র প্রয়োজনীয় কন্টেন্ট লোড করে। দীর্ঘ কন্টেন্টের ক্ষেত্রে এটি ৮৮% পর্যন্ত বেশি টোকেন-দক্ষ এবং প্রায় ৭% উন্নত মানের। জেমিনি ৩.৮ ফ্ল্যাশ, ৩.৭ ফ্ল্যাশ, ৩.৬ ফ্ল্যাশ, ৩.৫ ফ্ল্যাশ লাইট

একটি প্রক্রিয়াকরণ মোড নির্বাচন করুন

সাধারণ নির্দেশিকা হিসেবে, এজেন্টিক মোড দিয়ে শুরু করুন, বিশেষ করে যখন প্রতিক্রিয়ার গুণমান বা টোকেন দক্ষতার জন্য অপ্টিমাইজ করা হচ্ছে।

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

দ্রষ্টব্য: দীর্ঘ ভিডিও বা জটিল প্রম্পটের ক্ষেত্রে, যেখানে এজেন্টিক প্রসেসিং-এ বেশি সময় লাগে, সেখানে স্ট্রিমিং ( stream=True ) বা ব্যাকগ্রাউন্ড এক্সিকিউশন ( background=True ) ব্যবহার করুন। এটি সংযোগ সক্রিয় রাখে, মধ্যবর্তী রিজনিং ধাপগুলো প্রদর্শন করে এবং সংযোগ বা প্রমাণীকরণ টাইমআউট এড়িয়ে চলে।

প্রসেসিং মোড সেট করুন

পাইথন

import time
from google import genai

client = genai.Client()

# Upload a long video
video_file = client.files.upload(file="path/to/lecture.mp4")

while video_file.state.name == "PROCESSING":
    time.sleep(2)
    video_file = client.files.get(name=video_file.name)

# Use agentic processing
interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {
            "type": "video",
            "uri": video_file.uri,
            "mime_type": video_file.mime_type,
            "processing": "agentic"
        },
        {"type": "text", "text": "What are the three main arguments presented?"}
    ]
)
print(interaction.output_text)

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

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

// Upload a long video
let videoFile = await ai.files.upload({
  file: "path/to/lecture.mp4",
  config: { mimeType: "video/mp4" }
});

while (videoFile.state === "PROCESSING") {
  await new Promise((resolve) => setTimeout(resolve, 2000));
  videoFile = await ai.files.get({ name: videoFile.name });
}

// Use agentic processing
const interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: [
    {
      type: "video",
      uri: videoFile.uri,
      mime_type: videoFile.mimeType,
      processing: "agentic"
    },
    { type: "text", text: "What are the three main arguments presented?" }
  ]
});
console.log(interaction.output_text);

বিশ্রাম

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gemini-3.8-flash",
    "input": [
      {
        "type": "video",
        "uri": "'${file_uri}'",
        "mime_type": "video/mp4",
        "processing": "agentic"
      },
      {"type": "text", "text": "What are the three main arguments presented?"}
    ]
  }' 2> /dev/null

দ্রষ্টব্য: এজেন্টিক প্রসেসিং ব্যবহৃত হয়েছে কিনা তা যাচাই করতে, interaction.steps পরীক্ষা করুন। processing_call এবং processing_result এর উপস্থিতি নির্দেশ করে যে মডেলটি ডাইনামিকভাবে ভিডিওটি নেভিগেট করেছে।

প্রতিক্রিয়ার পদক্ষেপ

এজেন্টিক প্রসেসিং steps অ্যারেতে দুটি নতুন স্টেপ টাইপ যোগ করে:

  • processing_call : মডেলটি একটি ভিডিও অংশ বা অডিও ট্রান্সক্রিপ্টের জন্য অনুরোধ করেছে, যা id দ্বারা চিহ্নিত।
  • processing_result : সেই লোডের ফলাফল, যা call_id দ্বারা সংযুক্ত।

এগুলি thought ধাপগুলির সাথে পর্যায়ক্রমে প্রদর্শিত হয় (যখন সারাংশ সক্রিয় করা থাকে) এবং চূড়ান্ত model_output ধাপের আগে আসে। এগুলি আপনার UI-তে অগ্রগতির ধারা দেখানোর জন্য ব্যবহার করা যেতে পারে, কিন্তু এর জন্য কোনো প্রতিক্রিয়ার প্রয়োজন হয় না।

নিম্নলিখিত উদাহরণটি পর্যায়ক্রমিক প্রক্রিয়াকরণ ধাপসহ প্রতিক্রিয়া পেলোড দেখায়:

{
  "steps": [
    {
      "type": "thought",
      "signature": "sig_thought_1",
      "summary": [
        {
          "type": "text",
          "text": "Inspecting transcript for key discussion topics..."
        }
      ]
    },
    {
      "type": "processing_call",
      "id": "call_01",
      "signature": "sig_call_01"
    },
    {
      "type": "processing_result",
      "call_id": "call_01",
      "signature": "sig_result_01"
    },
    {
      "type": "thought",
      "signature": "sig_thought_2",
      "summary": [
        {
          "type": "text",
          "text": "Loading visual frames to verify slide content..."
        }
      ]
    },
    {
      "type": "processing_call",
      "id": "call_02",
      "signature": "sig_call_02"
    },
    {
      "type": "processing_result",
      "call_id": "call_02",
      "signature": "sig_result_02"
    },
    {
      "type": "thought",
      "signature": "sig_thought_3",
      "summary": [
        {
          "type": "text",
          "text": "Synthesizing answer from gathered evidence..."
        }
      ]
    },
    {
      "type": "model_output",
      "content": [
        {
          "type": "text",
          "text": "The three main arguments presented in the lecture are..."
        }
      ]
    }
  ]
}

ভিডিও জুড়ে প্রসেসিং মোড মিশ্রিত করুন

আপনি একই অনুরোধে প্রতিটি ভিডিওর জন্য আলাদা প্রসেসিং মোড সেট করতে পারেন:

পাইথন

from google import genai

client = genai.Client()

lecture = client.files.upload(file="path/to/long-lecture.mp4")
experiment = client.files.upload(file="path/to/short-experiment.mp4")

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {
            "type": "video",
            "uri": lecture.uri,
            "mime_type": lecture.mime_type,
            "processing": "agentic"  # Use agentic video understanding
        },
        {
            "type": "video",
            "uri": experiment.uri,
            "mime_type": experiment.mime_type,
            "processing": "static"  # Use static processing
        },
        {"type": "text", "text": "Compare the lecture content with the experiment results."}
    ]
)
print(interaction.output_text)

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

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({});

const lecture = await ai.files.upload({
  file: "path/to/long-lecture.mp4",
  config: { mimeType: "video/mp4" }
});
const experiment = await ai.files.upload({
  file: "path/to/short-experiment.mp4",
  config: { mimeType: "video/mp4" }
});

const interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: [
    {
      type: "video",
      uri: lecture.uri,
      mime_type: lecture.mimeType,
      processing: "agentic" // Use agentic video understanding
    },
    {
      type: "video",
      uri: experiment.uri,
      mime_type: experiment.mimeType,
      processing: "static" // Use static processing
    },
    { type: "text", text: "Compare the lecture content with the experiment results." }
  ]
});
console.log(interaction.output_text);

বিশ্রাম

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gemini-3.8-flash",
    "input": [
      {
        "type": "video",
        "uri": "'${lecture_uri}'",
        "mime_type": "video/mp4",
        "processing": "agentic"
      },
      {
        "type": "video",
        "uri": "'${experiment_uri}'",
        "mime_type": "video/mp4",
        "processing": "static"
      },
      {"type": "text", "text": "Compare the lecture content with the experiment results."}
    ]
  }' 2> /dev/null

একাধিক পালা ভিডিও কথোপকথন

কথোপকথনের পালাক্রমে ভিডিওর প্রেক্ষাপট সংরক্ষিত থাকে। এজেন্টিক প্রসেসিং ব্যবহার করার সময়:

  • স্টেটফুল মোড ( previous_interaction_id ব্যবহার করে): সার্ভার ভিডিও কনটেক্সট ধরে রাখে। কোনো অতিরিক্ত ব্যবস্থাপনার প্রয়োজন নেই।
  • স্টেটলেস মোড ( step_list ব্যবহার করে): স্টেটলেস মোডে, রেসপন্সে processing_call এবং processing_result স্টেপগুলো অন্তর্ভুক্ত থাকে, যা ভিডিও কনটেক্সট এনকোড করে। ভিডিও কনটেক্সট সংরক্ষণ করার জন্য আপনাকে অবশ্যই আপনার পরবর্তী রিকোয়েস্টের step_list এ রেসপন্সের সমস্ত স্টেপ অন্তর্ভুক্ত করতে হবে। যদিও বর্তমানে এগুলো বাদ দিলে কোনো API এরর আসে না, কিন্তু ভিডিও কনটেক্সট হারিয়ে যায়, যা পরবর্তী প্রশ্নগুলোর ক্ষেত্রে রেসপন্সের মান উল্লেখযোগ্যভাবে কমিয়ে দেয়। মনে রাখবেন যে, পরবর্তী রিকোয়েস্টগুলোতে পাঠানো রিটার্ন করা স্টেপগুলো ইনপুট টোকেন গণনায় যোগ হয়।

বিষয়বস্তুতে থাকা টাইমস্ট্যাম্পগুলো দেখুন।

আপনি MM:SS ফর্ম্যাটের টাইমস্ট্যাম্প ব্যবহার করে ভিডিওর মধ্যে নির্দিষ্ট সময় সম্পর্কে প্রশ্ন করতে পারেন।

পাইথন

prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?"

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

const prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?";

জাভা

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.VideoContent;
import com.google.genai.gaos.models.interactions.VideoContentMimeType;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

Content textContent = TextContent.builder().text("Summarize the key events in this video.").build();
Content videoContent =
    VideoContent.builder()
        .uri("gs://cloud-samples-data/generative-ai/video/pixel8.mp4")
        .mimeType(VideoContentMimeType.VIDEO_MP4)
        .build();

List<Content> contents = Arrays.asList(textContent, videoContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

বিশ্রাম

PROMPT="What are the examples given at 00:05 and 00:10 supposed to show us?"

ভিডিও থেকে বিস্তারিত তথ্য বের করুন।

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

ভিজ্যুয়াল বর্ণনার জন্য, মডেলটি প্রতি সেকেন্ডে ১ ফ্রেম (FPS) হারে ভিডিও স্যাম্পল করে। এই ডিফল্ট স্যাম্পলিং রেট বেশিরভাগ কন্টেন্টের জন্য ভালোভাবে কাজ করে, তবে মনে রাখবেন যে দ্রুত গতি বা দ্রুত দৃশ্য পরিবর্তনের ভিডিওতে এটি ডিটেইলস বাদ দিতে পারে।

পাইথন

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.";

জাভা

import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.VideoContent;
import com.google.genai.gaos.models.interactions.VideoContentMimeType;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

Content textContent = TextContent.builder().text("Summarize the key events in this video.").build();
Content videoContent =
    VideoContent.builder()
        .uri("gs://cloud-samples-data/generative-ai/video/pixel8.mp4")
        .mimeType(VideoContentMimeType.VIDEO_MP4)
        .build();

List<Content> contents = Arrays.asList(textContent, videoContent);

CreateModelInteraction params =
    CreateModelInteraction.builder()
        .model(Model.of("gemini-3.8-flash"))
        .input(InteractionsInput.ofContent(contents))
        .build();

Interaction interaction =
    client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();

System.out.println(interaction.outputText().orElse(""));

বিশ্রাম

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

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

আপনি জেমিনি এপিআই-তে ক্লিপিং ইন্টারভাল সেট করে অথবা কাস্টম ফ্রেম রেট স্যাম্পলিং প্রদান করে ভিডিও প্রসেসিং কাস্টমাইজ করতে পারেন। এই কাস্টমাইজেশন অপশনগুলো শুধুমাত্র "static" মোডে ভিডিও প্রসেস করার সময় সমর্থিত হয়।

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

processing কনফিগারেশন অবজেক্টে start_offset এবং end_offset উল্লেখ করে আপনি ভিডিও ক্লিপ করতে পারেন।

পাইথন

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {
            "type": "video",
            "uri": video_file.uri,
            "mime_type": video_file.mime_type,
            "processing": {
                "type": "static",
                "start_offset": 1200,
                "end_offset": 1500,
            },
        },
        {"type": "text", "text": "Summarize this section of the video."},
    ],
)
print(interaction.output_text)

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

const interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: [
    {
      type: "video",
      uri: videoFile.uri,
      mime_type: videoFile.mimeType,
      processing: {
        type: "static",
        start_offset: 1200,
        end_offset: 1500,
      },
    },
    { type: "text", text: "Summarize this section of the video." },
  ],
});
console.log(interaction.output_text);

বিশ্রাম

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gemini-3.8-flash",
    "input": [
      {
        "type": "video",
        "uri": "'${file_uri}'",
        "mime_type": "video/mp4",
        "processing": {
          "type": "static",
          "start_offset": 1200,
          "end_offset": 1500
        }
      },
      {"type": "text", "text": "Summarize this section of the video."}
    ]
  }' 2> /dev/null

একটি কাস্টম ফ্রেম রেট সেট করুন

processing কনফিগারেশন অবজেক্টে একটি fps আর্গুমেন্ট পাস করে আপনি কাস্টম ফ্রেম রেট স্যাম্পলিং সেট করতে পারেন।

পাইথন

interaction = client.interactions.create(
    model="gemini-3.8-flash",
    input=[
        {
            "type": "video",
            "uri": video_file.uri,
            "mime_type": video_file.mime_type,
            "processing": {
                "type": "static",
                "fps": 0.5,  # Sample 1 frame every 2 seconds
            },
        },
        {"type": "text", "text": "Describe the scene changes in this video."},
    ],
)
print(interaction.output_text)

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

const interaction = await ai.interactions.create({
  model: "gemini-3.8-flash",
  input: [
    {
      type: "video",
      uri: videoFile.uri,
      mime_type: videoFile.mimeType,
      processing: {
        type: "static",
        fps: 0.5, // Sample 1 frame every 2 seconds
      },
    },
    { type: "text", text: "Describe the scene changes in this video." },
  ],
});
console.log(interaction.output_text);

বিশ্রাম

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gemini-3.8-flash",
    "input": [
      {
        "type": "video",
        "uri": "'${file_uri}'",
        "mime_type": "video/mp4",
        "processing": {
          "type": "static",
          "fps": 0.5
        }
      },
      {"type": "text", "text": "Describe the scene changes in this video."}
    ]
  }' 2> /dev/null

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

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

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

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

  • সমর্থিত মডেল ও প্রেক্ষাপট : সকল জেমিনি মডেল ভিডিও ডেটা প্রসেস করতে পারে।
    • ১ মেগাবাইট কনটেক্সট উইন্ডোযুক্ত মডেলগুলো ডিফল্টভাবে (লো মিডিয়া রেজোলিউশনে) ৩ ঘণ্টা পর্যন্ত দীর্ঘ ভিডিও, অথবা হাই মিডিয়া রেজোলিউশনে ১ ঘণ্টা পর্যন্ত দীর্ঘ ভিডিও প্রসেস করতে পারে।
  • প্রসেসিং মোড : জেমিনি ৩.৮ ফ্ল্যাশ, ৩.৭ ফ্ল্যাশ, ৩.৬ ফ্ল্যাশ, ৩.৫ ফ্ল্যাশ লাইট এবং পরবর্তী মডেলগুলো দুটি ভিডিও প্রসেসিং মোড সমর্থন করে:
    • স্ট্যাটিক : ফ্রেমগুলো ১ FPS হারে এক্সট্র্যাক্ট করে কনটেক্সটে রাখা হয় (সকল মডেলের জন্য ডিফল্ট)। অডিও ১ Kbps (সিঙ্গেল চ্যানেল) হারে প্রসেস করা হয়। প্রতি সেকেন্ডে টাইমস্ট্যাম্প যোগ করা হয়। ছোট ক্লিপের জন্য অথবা যখন প্রতিটি ফ্রেম গুরুত্বপূর্ণ (যেমন ফ্রেম-বাই-ফ্রেম ইন্সপেকশনের ক্ষেত্রে) তখন এটি সেরা। উল্লেখ্য যে, ১ FPS স্যাম্পলিং রেটের কারণে দ্রুত অ্যাকশন সিকোয়েন্সের ডিটেইল হারিয়ে যেতে পারে।
    • এজেন্টিক : এই মডেলটি গতিশীলভাবে ভিডিও নেভিগেট করে এবং চাহিদা অনুযায়ী ট্রান্সক্রিপ্ট এবং/অথবা ফ্রেম এবং/অথবা অডিও লোড করে। এটি দীর্ঘ কন্টেন্টের জন্য ৮৮% পর্যন্ত কম টোকেন ব্যবহার করে, যদিও অভ্যন্তরীণ যুক্তি এবং জেনারেশন শুরু হওয়ার আগে টুলের রাউন্ড-ট্রিপের কারণে ছোট ক্লিপের (<৫ মিনিট) ক্ষেত্রে নেভিগেশনের জন্য টাইম টু ফার্স্ট টোকেন (TTFT) সামান্য বেড়ে যেতে পারে। টোকেন খরচ এবং প্রতিক্রিয়ার মান অপ্টিমাইজ করার জন্য দীর্ঘ ভিডিওর ক্ষেত্রে এটি সেরা। এটি জেমিনি ৩.৮ ফ্ল্যাশ, ৩.৭ ফ্ল্যাশ, ৩.৬ ফ্ল্যাশ এবং ৩.৫ ফ্ল্যাশ লাইটে সমর্থিত। বিস্তারিত জানতে এজেন্টিক ভিডিও আন্ডারস্ট্যান্ডিং দেখুন।
  • টোকেন গণনা (স্ট্যাটিক মোড) : ভিডিওর প্রতিটি সেকেন্ডকে নিম্নোক্তভাবে টোকেনাইজ করা হয়:
    • প্রতিটি ফ্রেম (১ এফপিএস হারে নমুনা করা):
      • media_resolution low-তে সেট করা হলে, প্রতি ফ্রেমে ৬৬টি টোকেন করে ফ্রেমগুলোকে টোকেনাইজ করা হয়।
      • অন্যথায়, প্রতিটি ফ্রেমে ২৫৮টি টোকেন করে টোকেনাইজ করা হয়।
    • অডিও: প্রতি সেকেন্ডে ৩২টি টোকেন।
    • মেটাডেটাও অন্তর্ভুক্ত করা হয়েছে।
    • মোট: ডিফল্ট (নিম্ন) মিডিয়া রেজোলিউশনে প্রতি সেকেন্ড ভিডিওর জন্য প্রায় ১০০ টোকেন, অথবা উচ্চ মিডিয়া রেজোলিউশনে প্রতি সেকেন্ড ভিডিওর জন্য প্রায় ৩০০ টোকেন।
  • টোকেন গণনা (এজেন্টিক মোড) : কন্টেন্টের জটিলতা এবং মডেলের নেভিগেশন কৌশলের উপর ভিত্তি করে টোকেনের ব্যবহার পরিবর্তিত হয়। ভিডিও এক্সপ্লোরেশনের সময় তৈরি হওয়া নেভিগেশন রিজনিং টোকেনগুলোকে থট টোকেন ( total_thought_tokens ) হিসেবে গণনা করা হয়, অন্যদিকে চাহিদা অনুযায়ী লোড হওয়া ফ্রেম, অডিও এবং ট্রান্সক্রিপ্টকে টুল ইউজ টোকেন ( total_tool_use_tokens ) হিসেবে গণনা করা হয়। দীর্ঘ কন্টেন্টের জন্য এজেন্টিক প্রসেসিং সাধারণত স্ট্যাটিক প্রসেসিংয়ের চেয়ে ৮৮% পর্যন্ত কম মোট টোকেন ব্যবহার করে, কারণ মডেলটি প্রম্পটের উত্তর দেওয়ার জন্য শুধুমাত্র প্রয়োজনীয় ট্রান্সক্রিপ্ট এবং/অথবা ফ্রেম এবং/অথবা অডিও লোড করে ( টোকেন গাইড দেখুন)।
  • মিডিয়া রেজোলিউশন : জেমিনি ৩, media_resolution প্যারামিটারের মাধ্যমে মাল্টিমোডাল ভিশন প্রসেসিং-এর উপর সূক্ষ্ম নিয়ন্ত্রণ নিয়ে এসেছে। media_resolution প্যারামিটারটি প্রতিটি ইনপুট ইমেজ বা ভিডিও ফ্রেমের জন্য বরাদ্দকৃত টোকেনের সর্বোচ্চ সংখ্যা নির্ধারণ করে। উচ্চতর রেজোলিউশন সূক্ষ্ম লেখা পড়া বা ছোট ছোট বিবরণ শনাক্ত করার ক্ষেত্রে মডেলের সক্ষমতা বাড়ায়, কিন্তু টোকেনের ব্যবহার এবং ল্যাটেন্সি বৃদ্ধি করে। media_resolution এবং processing প্যারামিটার দুটি স্বাধীন: আপনি একই ভিডিও ইনপুটে উভয়ই সেট করতে পারেন।

টোকেন গণনা সম্পর্কে আরও বিস্তারিত জানতে টোকেন নির্দেশিকা দেখুন।

  • টাইমস্ট্যাম্প ফরম্যাট : আপনার প্রম্পটে ভিডিওর নির্দিষ্ট মুহূর্ত উল্লেখ করার সময়, MM:SS ফরম্যাট ব্যবহার করুন (যেমন, ১ মিনিট ১৫ সেকেন্ডের জন্য 01:15 )।
  • প্রম্পটের অবস্থান : যদি টেক্সট এবং একটি ভিডিও একত্রিত করা হয়, তাহলে input অ্যারেতে ভিডিও অংশের পরে টেক্সট প্রম্পটটি রাখুন।
  • দীর্ঘ অনুরোধের জন্য টাইমআউট : যে ভিডিওগুলির জন্য দীর্ঘ প্রক্রিয়াকরণের সময় বা জটিল বহু-ধাপের যুক্তির প্রয়োজন হয়, সেগুলির জন্য স্ট্রিমিং ( stream=True ) বা ব্যাকগ্রাউন্ড এক্সিকিউশন ( background=True ) ব্যবহার করুন। উচ্চ চাহিদার কারণে সিঙ্ক্রোনাস, নন-স্ট্রিমিং অনুরোধগুলিতে ব্যাকএন্ড রিট্রাইয়ের সম্মুখীন হলে তা সংযোগ বা প্রমাণীকরণ টোকেনের বৈধতার সময়সীমা অতিক্রম করতে পারে, যা অপ্রত্যাশিত 401 Unauthorized বা টাইমআউট ত্রুটি হিসাবে দেখা দিতে পারে। স্ট্রিমিং সংযোগটি সক্রিয় রাখে এবং মধ্যবর্তী যুক্তি ও টুল কলের অগ্রগতি প্রদর্শন করে।

এরপর কী?

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