ভিডিও বোঝা

ভিডিও জেনারেশন সম্পর্কে জানতে, Gemini Omni Flash গাইড দেখুন।

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

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

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

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

অন্যান্য ফাইল ইনপুট পদ্ধতি সম্পর্কে জানতে, যেমন এক্সটার্নাল URL বা Google Cloud-এ সেভ করা ফাইল ব্যবহার করা ফাইল ইনপুট পদ্ধতি গাইড দেখুন।

ভিডিও ফাইল আপলোড করা

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

Python

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

Java

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 com.google.genai.types.File;
import com.google.genai.types.FileState;
import com.google.genai.types.UploadFileConfig;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

File myfile =
    client.files.upload(
        "path/to/sample.mp4", UploadFileConfig.builder().mimeType("video/mp4").build());

while (!myfile.state().isPresent()
    || myfile.state().get().knownEnum() != FileState.Known.ACTIVE) {
  System.out.println("Processing video...");
  Thread.sleep(5000);
  myfile = client.files.get(myfile.name().get(), null);
}

Content videoContent =
    VideoContent.builder()
        .uri(myfile.uri().get())
        .mimeType(VideoContentMimeType.of(myfile.mimeType().get()))
        .build();
Content textContent =
    TextContent.builder()
        .text(
            "Summarize this video. Then create a quiz with an answer key based on the information in this video.")
        .build();

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

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

খুলুন

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    myfile, err := client.Files.UploadFromPath(ctx, "path/to/sample.mp4", &genai.UploadFileConfig{
        MIMEType: "video/mp4",
    })
    if err != nil {
        log.Fatal(err)
    }

    for myfile.State != genai.FileStateActive {
        fmt.Println("Processing video...")
        time.Sleep(5 * time.Second)
        myfile, err = client.Files.Get(ctx, myfile.Name, nil)
        if err != nil {
            log.Fatal(err)
        }
    }

    contents := []interactions.Content{
        interactions.NewContent(interactions.VideoContent{
            URI:      genai.Ptr(myfile.URI),
            MimeType: interactions.VideoContentMimeType(myfile.MIMEType).ToPointer(),
        }),
        interactions.NewContent(interactions.TextContent{
            Text: "Summarize this video. Then create a quiz with an answer key based on the information in this video.",
        }),
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.8-flash"),
            Input: interactions.NewInteractionsInput(contents),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

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)
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 ব্যবহার করুন। File API সরাসরি ভিডিও ফাইল ফর্ম্যাট গ্রহণ করে।

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

ইনলাইন ভিডিও ডেটা পাস করা

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

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

Python

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

Java

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.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64;
import java.util.List;

String videoFileName = "/path/to/your/video.mp4";
byte[] videoBytes = Files.readAllBytes(Paths.get(videoFileName));
String base64Video = Base64.getEncoder().encodeToString(videoBytes);

Client client = new Client();

Content textContent =
    TextContent.builder().text("Please summarize the video in 3 sentences.").build();
Content videoContent =
    VideoContent.builder()
        .data(base64Video)
        .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(""));

খুলুন

package main

import (
    "context"
    "encoding/base64"
    "fmt"
    "log"
    "os"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    videoFileName := "/path/to/your/video.mp4"
    videoBytes, err := os.ReadFile(videoFileName)
    if err != nil {
        log.Fatal(err)
    }
    base64Video := base64.StdEncoding.EncodeToString(videoBytes)

    contents := []interactions.Content{
        interactions.NewContent(interactions.TextContent{
            Text: "Please summarize the video in 3 sentences.",
        }),
        interactions.NewContent(interactions.VideoContent{
            Data:     genai.Ptr(base64Video),
            MimeType: interactions.VideoContentMimeTypeVideoMp4.ToPointer(),
        }),
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.8-flash"),
            Input: interactions.NewInteractionsInput(contents),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

REST

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

YouTube URL পাস করা

আপনি নিজের অনুরোধের অংশ হিসেবে YouTube URL সরাসরি Gemini API-তে পাস করতে পারেন, যেমন:

Python

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

Java

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.operations.CreateInteractionRequestBody;
import java.util.Arrays;
import java.util.List;

Client client = new Client();

Content textContent =
    TextContent.builder().text("Please summarize the video in 3 sentences.").build();
Content videoContent =
    VideoContent.builder()
        .uri("https://www.youtube.com/watch?v=9hE5-98ZeCg")
        .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(""));

খুলুন

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
    "google.golang.org/genai/interactions/models/interactions"
    "google.golang.org/genai/interactions/models/operations"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    contents := []interactions.Content{
        interactions.NewContent(interactions.TextContent{
            Text: "Please summarize the video in 3 sentences.",
        }),
        interactions.NewContent(interactions.VideoContent{
            URI: genai.Ptr("https://www.youtube.com/watch?v=9hE5-98ZeCg"),
        }),
    }

    res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
        Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
            Model: interactions.Model("gemini-3.8-flash"),
            Input: interactions.NewInteractionsInput(contents),
        }),
    })
    if err != nil {
        log.Fatal(err)
    }

    if res.Interaction.OutputText != nil {
        fmt.Println(*res.Interaction.OutputText)
    }
}

REST

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

সীমাবদ্ধতা:

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

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

ডিফল্ট হিসেবে, ভিডিও ইনপুট স্ট্যাটিক প্রসেসিং ব্যবহার করে (১ FPS-এ ফ্রেম এক্সট্র্যাক্ট করে)। এছাড়াও, Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash ও 3.5 Flash Lite মডেলগুলি এজেন্টিক ভিডিও বোঝার ক্ষেত্রে কাজ করে, যেখানে মডেলটি ভিডিওর টাইমলাইন ডায়নামিক এক্সপ্লোর করে, বেছে বেছে ট্রান্সক্রিপ্ট চেক করে এবং প্রম্পটের উপর ভিত্তি করে ফ্রেম রেট ও রেজোলিউশন অ্যাডজাস্ট করে।

মোড বিবরণ যেসব মডেলে কাজ করে
স্ট্যাটিক (ডিফল্ট) একটি নির্দিষ্ট রেটে (১ FPS) ফ্রেম এক্সট্র্যাক্ট করে এবং সেগুলি একটি সিঙ্গেল পাসে প্রাসঙ্গিক জায়গায় প্লেস করে। ছোট ক্লিপের জন্য ভালো কাজ করে। সব Gemini মডেল
এজেন্টিক প্রম্পটের উপর ভিত্তি করে মডেলটি ভিডিও টাইমলাইন ডায়নামিক নেভিগেট করে এবং শুধুমাত্র প্রয়োজনীয় কন্টেন্ট লোড করে। ৮৮% পর্যন্ত বেশি টোকেন-দক্ষ এবং বড়-ফর্মের কন্টেন্টে ~৭% বেশি কোয়ালিটি। Gemini 3.8 Flash, 3.7 Flash, 3.6 Flash, 3.5 Flash Lite

প্রসেসিং মোড বেছে নিন

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

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

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

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

এজেন্টিক ভিডিও বোঝার ক্ষমতা ব্যবহার করতে, input অ্যারের মধ্যে থাকা ভিডিও পার্টে "processing": "agentic" সেট করুন।

বড় ভিডিওর ক্ষেত্রে এজেন্টিক ভিডিও প্রসেসিংয়ে বেশি সময় লাগতে পারে কারণ টাইমলাইন নেভিগেট করার জন্য মডেলটি একাধিকবার পরিদর্শন করে। নেটওয়ার্ক কানেকশন বিচ্ছিন্ন হয়ে গেলে যাতে প্রগ্রেস হারিয়ে না যায়, তার জন্য এই উদাহরণে background=True ব্যবহার করে সার্ভারে অ্যাসিঙ্ক্রোনাস টাস্ক চালানো হয়েছে। এছাড়াও, আপনি background প্যারামিটার বাদ দিয়ে ব্যাকগ্রাউন্ড এক্সিকিউশন ছাড়াই সিঙ্ক্রোনাসভাবে অনুরোধ চালাতে পারেন, যা ছোট ভিডিওর জন্য ভাল কাজ করে।

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

Python

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 with background execution
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?"}
    ],
    background=True,
)

while interaction.status == "in_progress":
    time.sleep(5)
    interaction = client.interactions.get(interaction.id)

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 with background execution
let 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?" }
  ],
  background: true,
});

while (interaction.status === "in_progress") {
  await new Promise((resolve) => setTimeout(resolve, 5000));
  interaction = await ai.interactions.get(interaction.id);
}

console.log(interaction.output_text);

REST

# 1. Start the interaction in the background
interaction=$(curl -s -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?"}
    ],
    "background": true
  }')

id=$(echo "$interaction" | jq -r '.id')

# 2. Poll until the interaction finishes
while [ "$(echo "$interaction" | jq -r '.status')" = "in_progress" ]; do
  sleep 5
  interaction=$(curl -s "https://generativelanguage.googleapis.com/v1beta/interactions/$id" \
    -H "x-goog-api-key: $GEMINI_API_KEY")
done

echo "$interaction" | jq '.'

মনে রাখবেন: এজেন্টিক প্রসেসিং ব্যবহার করা হয়েছে কিনা তা যাচাই করতে, 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..."
        }
      ]
    }
  ]
}

বিভিন্ন ভিডিওতে প্রসেসিং মোড মিক্স করা

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

Python

import time
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")

# Use agentic processing with background execution
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."}
    ],
    background=True,
)

while interaction.status == "in_progress":
    time.sleep(5)
    interaction = client.interactions.get(interaction.id)

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

// Use agentic processing with background execution
let 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." }
  ],
  background: true,
});

while (interaction.status === "in_progress") {
  await new Promise((resolve) => setTimeout(resolve, 5000));
  interaction = await ai.interactions.get(interaction.id);
}

console.log(interaction.output_text);

REST

# 1. Start the interaction in the background
interaction=$(curl -s -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."}
    ],
    "background": true
  }')

id=$(echo "$interaction" | jq -r '.id')

# 2. Poll until the interaction finishes
while [ "$(echo "$interaction" | jq -r '.status')" = "in_progress" ]; do
  sleep 5
  interaction=$(curl -s "https://generativelanguage.googleapis.com/v1beta/interactions/$id" \
    -H "x-goog-api-key: $GEMINI_API_KEY")
done

echo "$interaction" | jq '.'

ভিডিও কথোপকথন একাধিকবার চলতে পারে

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

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

কন্টেন্টে টাইমস্ট্যাম্পের উল্লেখ করুন

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

Python

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

Java

String prompt = "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?"

REST

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

ভিডিও থেকে বিস্তারিত ইনসাইট এক্সট্র্যাক্ট করা

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

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

Python

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

Java

String prompt =
    "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."

REST

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

ভিডিও প্রসেসিং কাস্টমাইজ করা

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

ক্লিপিং ইন্টারভ্যাল সেট করা

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

Python

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

REST

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

Python

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

REST

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

কাজ করে এমন ভিডিও ফর্ম্যাট

Gemini-তে নিম্নলিখিত ভিডিও ফর্ম্যাট MIME ধরন কাজ করে:

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

ভিডিও সম্পর্কে টেকনিক্যাল বিবরণ

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

টোকেন গণনা সম্পর্কে আরও বিবরণের জন্য, টোকেন গাইড দেখুন।

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

এর পরে কী করতে হবে

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