Gemini API を使用して動画ファイルを分析する

Gemini モデルに、 インライン(base64 エンコード)または URL で指定した動画ファイルを分析させることができます。Firebase AI Logic を使用すると、 アプリから直接このリクエストを行うことができます。

この機能を使用すると、次のようなことができます。

  • 動画のキャプションを作成し、動画に関する質問に回答する
  • タイムスタンプを使用して動画の特定のセグメントを分析する
  • 音声トラックとビジュアル フレームの両方を処理して動画コンテンツを文字起こしする
  • 音声トラックとビジュアル フレームの両方を含む動画の説明、セグメント化、情報の抽出を行う

このガイドでは、動画入力からテキストを生成する方法について説明しますが、動画入力から 画像を生成することもできます

コードサンプルに移動 ストリーミング レスポンスのコードに移動


動画を操作するためのその他のオプションについては、他のガイドをご覧ください
構造化出力を生成する マルチターン チャット 画像を生成する

始める前に

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

まだ行っていない場合は、 スタートガイドに沿って、記載されている手順( Firebase プロジェクトの設定、アプリと Firebase の連携、SDK の追加、 選択した Gemini API プロバイダのバックエンド サービスの初期化、 GenerativeModel インスタンスの作成)を完了します。

プロンプトのテストと反復処理には、 Google AI Studioを使用することをおすすめします。

この機能をサポートするモデル

このガイドでは、動画入力からテキストを生成する方法について説明します。これは、 次の Gemini モデルに適用されます。

  • gemini-3.1-pro-preview
  • gemini-3.6-flash(および古い gemini-3.5-flash
  • gemini-3.5-flash-lite(および古い gemini-3.1-flash-lite
  • gemini-2.5-pro
  • gemini-2.5-flash
  • gemini-2.5-flash-lite

動画ファイル(base64 エンコード)からテキストを生成する

このサンプルを試す前に、このガイドの 始める前にのセクションを完了して、プロジェクトとアプリを設定してください。
このセクションでは、選択した Gemini API プロバイダのボタンをクリックして、このページにプロバイダ固有のコンテンツを表示します

Gemini モデルに テキストを生成させるには、テキストと動画でプロンプトを表示し、各 入力ファイルの mimeType とファイル自体を指定します。入力ファイルの 要件と推奨事項 については、このページの後半をご覧ください。

この例では、ファイルをインラインで指定していますが、SDK では YouTube URL を指定することもできます

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.6-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 のメソッドは suspend 関数であり、 Coroutine スコープから呼び出す必要があります。

// 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.6-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.6-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.6-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-3.6-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.6-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
  • MPG - video/mpg
  • MP4 - video/mp4
  • WEBM - video/webm
  • WMV - video/wmv
  • 3GPP - video/3gpp

リクエストあたりの上限

リクエストあたりの最大ファイル数: 動画ファイル 10 個



Google アシスタントの機能

その他の機能を試す

コンテンツ生成を制御する方法を確認する

  • プロンプト設計について、 ベスト プラクティス、戦略、プロンプトの例など を理解する。
  • モデル パラメータを構成する( 最大出力トークン数、出力トークンの繰り返し確率など )。
  • 安全性設定を使用して、 有害とみなされる可能性のあるレスポンスを取得する可能性を 調整する。
Google AI Studio を使用して、プロンプトとモデル構成を試したり、 生成されたコード スニペットを取得したりすることもできます Google AI Studio

サポートされているモデルの詳細

さまざまなユースケースで利用できる モデル とその 割り当て料金について確認する。


フィードバックを送信する Firebase AI Logicの使用に関する