Как анализировать видеофайлы с помощью Gemini API

Вы можете попросить модель Gemini проанализировать видеофайлы, которые вы предоставляете в виде встроенного кода (в кодировке base64) или по URL. Если вы используете Firebase AI Logic, то можете отправить запрос прямо из приложения.

Вот что можно делать с помощью этой функции:

  • Создание субтитров и ответы на вопросы о видео
  • Анализировать определенные фрагменты видео с помощью временных меток.
  • расшифровывать видеоконтент, обрабатывая как аудиодорожку, так и визуальные кадры;
  • Описывать, сегментировать и извлекать информацию из видео, включая аудиодорожку и визуальные кадры.

В этом руководстве рассказывается о том, как генерировать текст на основе видео, но вы также можете генерировать изображения на основе видео.

Перейти к примерам кода Перейти к коду для потоковых ответов


Другие руководства по работе с видео
Генерация структурированных выходных данных Многоэтапный чат Генерация изображений

Подготовка

Нажмите на название своего поставщика Gemini API, чтобы посмотреть контент и код, относящиеся к нему.

Если вы ещё этого не сделали, ознакомьтесь с кратким руководством, в котором рассказывается, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать бэкенд-службу для выбранного поставщика Gemini API и создать экземпляр GenerativeModel.

Для тестирования и доработки запросов рекомендуем использовать Google AI Studio.

Модели, поддерживающие эту функцию

В этом руководстве рассказывается, как генерировать текст на основе видео. Оно применимо к следующим моделям Gemini:

  • gemini-4-argon
  • gemini-3.8-flash (и более старые gemini-3.7-flash, gemini-3.6-flash и gemini-3.5-flash)
  • gemini-3.5-flash-lite (и более старая версия gemini-3.1-flash-lite)

Эта возможность также поддерживается в моделях gemini-3.1-pro-preview и Gemini 2.5 (которые больше не поддерживаются).

Генерировать текст из видеофайлов (в кодировке base64)

Прежде чем использовать этот пример, выполните инструкции из раздела Подготовка этого руководства, чтобы настроить проект и приложение.
В этом разделе также нужно нажать кнопку для выбранного поставщика Gemini API, чтобы на этой странице показывался контент, относящийся к нему.

Вы можете попросить модель Gemini сгенерировать текст, используя текстовый и видеозапрос. Для этого нужно предоставить mimeType каждого входного файла и сам файл. Ознакомьтесь с требованиями и рекомендациями для входных файлов.

Обратите внимание, что в этом примере файл предоставляется в коде, но SDK также поддерживают указание URL YouTube.

Swift

Вы можете вызвать generateContent(), чтобы сгенерировать текст на основе мультимодальных входных данных из текста и видеофайлов.


import FirebaseAILogic

// 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-3.8-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-3.8-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 = model.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-3.8-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-3.8-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 {
    type: "inlineData",
    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-3.8-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-3.8-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.

Подробную информацию по следующим темам вы найдете на странице "Поддерживаемые входные файлы и требования":

Поддерживаемые MIME-типы видео

Мультимодальные модели Gemini поддерживают следующие MIME-типы видео:

  • FLV – video/x-flv
  • MOV – video/quicktime
  • MPEG – video/mpeg
  • MPEGPS – video/mpegps
  • Расход топлива – video/mpg
  • MP4 – video/mp4
  • WEBM – video/webm
  • WMV – video/wmv
  • 3GPP – video/3gpp

Ограничения на запрос

Максимальное количество файлов в запросе: 10 видеофайлов.



Что ещё ты умеешь делать?

Попробуйте другие возможности

Как управлять созданием контента

Вы также можете экспериментировать с запросами и конфигурациями моделей и даже получить сгенерированный фрагмент кода с помощью Google AI Studio.

Подробнее о поддерживаемых моделях

Узнайте, какие модели доступны для разных вариантов использования, а также ознакомьтесь с их квотами и ценами.


Оставить отзыв о работе с Firebase AI Logic