تحليل ملفات الفيديو باستخدام Gemini API

يمكنك أن تطلب من نموذج Gemini تحليل ملفات الفيديو التي تقدّمها إما بشكل مضمّن (بتشفير base64) أو من خلال عنوان URL. عند استخدام Firebase AI Logic، يمكنك تقديم هذا الطلب مباشرةً من تطبيقك.

باستخدام هذه الإمكانية، يمكنك تنفيذ إجراءات مثل:

  • إضافة ترجمة وشرح والإجابة عن أسئلة حول الفيديوهات
  • تحليل مقاطع معيّنة من فيديو باستخدام الطوابع الزمنية
  • تحويل محتوى الفيديو إلى نص من خلال معالجة المقطع الصوتي والإطارات المرئية
  • وصف الفيديوهات وتقسيمها واستخراج المعلومات منها، بما في ذلك المقطع الصوتي والإطارات المرئية

الانتقال إلى عيّنات التعليمات البرمجية الانتقال إلى التعليمات البرمجية للاستجابات المتدفّقة


الاطّلاع على أدلة أخرى تتضمّن خيارات إضافية للتعامل مع الفيديو
إنشاء ناتج منظَّم محادثة متعدّدة الجولات

قبل البدء

انقر على مزوّد Gemini API لعرض المحتوى والرمز الخاصين بالمزوّد على هذه الصفحة.

إذا لم يسبق لك إجراء ذلك، أكمل دليل بدء الاستخدام الذي يوضّح كيفية إعداد مشروعك على Firebase وربط تطبيقك بـ Firebase وإضافة حزمة تطوير البرامج (SDK) وتهيئة خدمة الخلفية لمقدّم خدمة Gemini API الذي اخترته وإنشاء مثيل GenerativeModel.

لاختبار طلباتك وتكرارها، وحتى للحصول على مقتطف رمز برمجي من إنشاء الذكاء الاصطناعي، ننصحك باستخدام Google AI Studio.

إنشاء نص من ملفات الفيديو (بتشفير base64)

قبل تجربة هذا النموذج، أكمل القسم قبل البدء من هذا الدليل لإعداد مشروعك وتطبيقك.
في هذا القسم، ستنقر أيضًا على زر لمقدّم الخدمة الذي اخترته Gemini API حتى يظهر لك محتوى خاص بمقدّم الخدمة في هذه الصفحة.

يمكنك أن تطلب من نموذج Gemini إنشاء نص من خلال تقديم نص وفيديو، مع توفير mimeType لكل ملف إدخال والملف نفسه. يمكنك الاطّلاع على المتطلبات والاقتراحات المتعلقة بملفات الإدخال لاحقًا في هذه الصفحة.

يُرجى العِلم أنّ هذا المثال يعرض كيفية توفير الملف مضمّنًا، ولكن حِزم SDK تتيح أيضًا توفير عنوان URL على YouTube.

Swift

يمكنك استدعاء generateContent() لإنشاء نص من إدخال متعدّد الوسائط يتضمّن ملفات نصية وملفات فيديو.


import FirebaseAI

// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-2.5-flash")


// Provide the video as `Data` with the appropriate MIME type.
let video = InlineDataPart(data: try Data(contentsOf: videoURL), mimeType: "video/mp4")

// Provide a text prompt to include with the video
let prompt = "What is in the video?"

// To generate text output, call generateContent with the text and video
let response = try await model.generateContent(video, prompt)
print(response.text ?? "No text in response.")

Kotlin

يمكنك استدعاء generateContent() لإنشاء نص من إدخال متعدّد الوسائط يتضمّن ملفات نصية وملفات فيديو.

في Kotlin، تكون الطرق في حزمة تطوير البرامج (SDK) هذه عبارة عن دوال معلّقة ويجب استدعاؤها من نطاق روتين فرعي.

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
                        .generativeModel("gemini-2.5-flash")


val contentResolver = applicationContext.contentResolver
contentResolver.openInputStream(videoUri).use { stream ->
  stream?.let {
    val bytes = stream.readBytes()

    // Provide a prompt that includes the video specified above and text
    val prompt = content {
        inlineData(bytes, "video/mp4")
        text("What is in the video?")
    }

    // To generate text output, call generateContent with the prompt
    val response = generativeModel.generateContent(prompt)
    Log.d(TAG, response.text ?: "")
  }
}

Java

يمكنك استدعاء generateContent() لإنشاء نص من إدخال متعدّد الوسائط يتضمّن ملفات نصية وملفات فيديو.

بالنسبة إلى Java، تعرض الطرق في حزمة تطوير البرامج (SDK) هذه ListenableFuture.

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel("gemini-2.5-flash");

// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);


ContentResolver resolver = getApplicationContext().getContentResolver();
try (InputStream stream = resolver.openInputStream(videoUri)) {
    File videoFile = new File(new URI(videoUri.toString()));
    int videoSize = (int) videoFile.length();
    byte[] videoBytes = new byte[videoSize];
    if (stream != null) {
        stream.read(videoBytes, 0, videoBytes.length);
        stream.close();

        // Provide a prompt that includes the video specified above and text
        Content prompt = new Content.Builder()
                .addInlineData(videoBytes, "video/mp4")
                .addText("What is in the video?")
                .build();

        // To generate text output, call generateContent with the prompt
        ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
        Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
            @Override
            public void onSuccess(GenerateContentResponse result) {
                String resultText = result.getText();
                System.out.println(resultText);
            }

            @Override
            public void onFailure(Throwable t) {
                t.printStackTrace();
            }
        }, executor);
    }
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}

Web

يمكنك استدعاء generateContent() لإنشاء نص من إدخال متعدّد الوسائط يتضمّن ملفات نصية وملفات فيديو.


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case
const model = getGenerativeModel(ai, { model: "gemini-2.5-flash" });


// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
  const base64EncodedDataPromise = new Promise((resolve) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
    reader.readAsDataURL(file);
  });
  return {
    inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
  };
}

async function run() {
  // Provide a text prompt to include with the video
  const prompt = "What do you see?";

  const fileInputEl = document.querySelector("input[type=file]");
  const videoPart = await fileToGenerativePart(fileInputEl.files[0]);

  // To generate text output, call generateContent with the text and video
  const result = await model.generateContent([prompt, videoPart]);

  const response = result.response;
  const text = response.text();
  console.log(text);
}

run();

Dart

يمكنك استدعاء generateContent() لإنشاء نص من إدخال متعدّد الوسائط يتضمّن ملفات نصية وملفات فيديو.


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
      FirebaseAI.googleAI().generativeModel(model: 'gemini-2.5-flash');


// Provide a text prompt to include with the video
final prompt = TextPart("What's in the video?");

// Prepare video for input
final video = await File('video0.mp4').readAsBytes();

// Provide the video as `Data` with the appropriate mimetype
final videoPart = InlineDataPart('video/mp4', video);

// To generate text output, call generateContent with the text and images
final response = await model.generateContent([
  Content.multi([prompt, ...videoPart])
]);
print(response.text);

Unity

يمكنك استدعاء GenerateContentAsync() لإنشاء نص من إدخال متعدّد الوسائط يتضمّن ملفات نصية وملفات فيديو.


using Firebase;
using Firebase.AI;

// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` instance with a model that supports your use case
var model = ai.GetGenerativeModel(modelName: "gemini-2.5-flash");


// Provide the video as `data` with the appropriate MIME type.
var video = ModelContent.InlineData("video/mp4",
      System.IO.File.ReadAllBytes(System.IO.Path.Combine(
          UnityEngine.Application.streamingAssetsPath, "yourVideo.mp4")));

// Provide a text prompt to include with the video
var prompt = ModelContent.Text("What is in the video?");

// To generate text output, call GenerateContentAsync with the text and video
var response = await model.GenerateContentAsync(new [] { video, prompt });
UnityEngine.Debug.Log(response.Text ?? "No text in response.");

تعرَّف على كيفية اختيار نموذج اختياري مناسبَين لحالة الاستخدام والتطبيق.

عرض الرد تدريجيًا

قبل تجربة هذا النموذج، أكمل القسم قبل البدء من هذا الدليل لإعداد مشروعك وتطبيقك.
في هذا القسم، ستنقر أيضًا على زر لمقدّم الخدمة الذي اخترته Gemini API حتى يظهر لك محتوى خاص بمقدّم الخدمة في هذه الصفحة.

يمكنك تحقيق تفاعلات أسرع من خلال عدم انتظار النتيجة الكاملة من إنشاء النموذج، واستخدام البث بدلاً من ذلك للتعامل مع النتائج الجزئية. لبث الرد، اتّصِل بالرقم generateContentStream.



المتطلبات والاقتراحات المتعلقة بملفات الفيديو المصدر

يُرجى العِلم أنّ الملف المقدَّم كبيانات مضمّنة يتم ترميزه إلى base64 أثناء نقله، ما يؤدي إلى زيادة حجم الطلب. يظهر لك الخطأ HTTP 413 إذا كان الطلب كبيرًا جدًا.

اطّلِع على "ملفات الإدخال المتوافقة ومتطلبات Vertex AI Gemini API" للحصول على معلومات مفصّلة حول ما يلي:

أنواع MIME المتوافقة للفيديوهات

تتوافق النماذج المتعدّدة الوسائط مع أنواع MIME التالية للفيديوهات: Gemini

نوع MIME للفيديو Gemini 2.0 Flash Gemini 2.0 Flash‑Lite
FLV - video/x-flv
MOV - video/quicktime
MPEG - video/mpeg
MPEGPS - video/mpegps
MPG - video/mpg
MP4 - video/mp4
WEBM - video/webm
WMV - video/wmv
‫3GPP - video/3gpp

الحدود القصوى لكل طلب

في ما يلي الحدّ الأقصى لعدد ملفات الفيديو المسموح بها في طلب موجّه:

  • Gemini 2.0 Flash وGemini 2.0 Flash‑Lite: 10 ملفات فيديو



ما هي الإجراءات الأخرى التي يمكنك تنفيذها؟

  • تعرَّف على كيفية احتساب الرموز المميزة قبل إرسال طلبات طويلة إلى النموذج.
  • إعداد Cloud Storage for Firebase لتتمكّن من تضمين ملفات كبيرة في طلباتك المتعددة الوسائط والحصول على حلّ أكثر إدارةً لتوفير الملفات في الطلبات يمكن أن تتضمّن الملفات صورًا وملفات PDF وفيديوهات وملفات صوتية.
  • ابدأ التفكير في الاستعداد للإنتاج (راجِع قائمة المهام لعملية الإنتاج)، بما في ذلك:
    • إعداد Firebase App Check لحماية Gemini API من إساءة الاستخدام من قِبل العملاء غير المصرَّح لهم
    • دمج Firebase Remote Config لتعديل القيم في تطبيقك (مثل اسم النموذج) بدون طرح إصدار جديد من التطبيق.

تجربة إمكانات أخرى

كيفية التحكّم في إنشاء المحتوى

يمكنك أيضًا تجربة الطلبات وإعدادات النماذج، ويمكنك حتى الحصول على مقتطف رمز برمجي من إنشاء الذكاء الاصطناعي باستخدام Google AI Studio.

مزيد من المعلومات عن النماذج المتاحة

يمكنك الاطّلاع على النماذج المتاحة لمختلف حالات الاستخدام والحصص والأسعار الخاصة بها.


تقديم ملاحظات حول تجربتك مع Firebase AI Logic