วิเคราะห์ไฟล์วิดีโอโดยใช้ 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 นี้เป็นฟังก์ชันระงับและต้องเรียกจากขอบเขต 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.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.");

ดูวิธีเลือกโมเดล ที่เหมาะกับ Use Case และแอปของคุณ

สตรีมคำตอบ

ก่อนลองใช้ตัวอย่างนี้ ให้ทำตามส่วนก่อนเริ่มต้นของคู่มือนี้เพื่อตั้งค่าโปรเจ็กต์และแอป
ในส่วนนั้น คุณจะต้องคลิกปุ่มสำหรับผู้ให้บริการGemini APIที่เลือกด้วย เพื่อให้เห็นเนื้อหาเฉพาะของผู้ให้บริการในหน้านี้

คุณสามารถโต้ตอบได้เร็วขึ้นโดยไม่ต้องรอผลลัพธ์ทั้งหมดจากการสร้างโมเดล แต่ใช้สตรีมมิงเพื่อจัดการผลลัพธ์บางส่วนแทน หากต้องการสตรีมคำตอบ ให้เรียกใช้ generateContentStream



ข้อกำหนดและคำแนะนำสำหรับไฟล์วิดีโออินพุต

โปรดทราบว่าไฟล์ที่ระบุเป็นข้อมูลในบรรทัดจะได้รับการเข้ารหัสเป็น Base64 ระหว่างการส่ง ซึ่งจะเพิ่มขนาดของคำขอ คุณจะได้รับข้อผิดพลาด HTTP 413 หากคำขอมีขนาดใหญ่เกินไป

ดูข้อมูลโดยละเอียดเกี่ยวกับสิ่งต่อไปนี้ได้ที่หน้า "ไฟล์อินพุตและข้อกำหนดที่รองรับ"

ประเภท MIME ของวิดีโอที่รองรับ

โมเดลหลายรูปแบบของ Gemini รองรับประเภท MIME ของวิดีโอต่อไปนี้

  • FLV - video/x-flv
  • MOV - video/quicktime
  • video/mpeg MPEG
  • MPEGPS - video/mpegps
  • MPG - video/mpg
  • MP4 - video/mp4
  • WEBM - video/webm
  • WMV - video/wmv
  • 3GPP - video/3gpp

ขีดจำกัดต่อคำขอ

จำนวนไฟล์สูงสุดต่อคำขอ: ไฟล์วิดีโอ 10 ไฟล์



คุณทำอะไรได้อีกบ้าง

  • ดูวิธีนับโทเค็นก่อนส่งพรอมต์ที่ยาวไปยังโมเดล
  • ตั้งค่า Cloud Storage for Firebase เพื่อให้คุณรวมไฟล์ขนาดใหญ่ไว้ในคำขอแบบหลายโมดัลได้ และมีโซลูชันที่มีการจัดการมากขึ้นสำหรับการระบุไฟล์ในพรอมต์ ไฟล์อาจรวมถึงรูปภาพ, PDF, วิดีโอ และเสียง
  • เริ่มคิดเกี่ยวกับการเตรียมพร้อมสำหรับเวอร์ชันที่ใช้งานจริง (ดูรายการตรวจสอบเวอร์ชันที่ใช้งานจริง)
    • บังคับใช้ Firebase App Check โดยเร็วที่สุดเพื่อช่วยปกป้อง Gemini API จาก การละเมิดโดยไคลเอ็นต์ที่ไม่ได้รับอนุญาต
    • ใช้ Firebase Remote Config หรือเทมเพลตพรอมต์เซิร์ฟเวอร์เพื่อให้คุณทำการเปลี่ยนแปลงการกำหนดค่าสำหรับฟีเจอร์ AI (เช่น ชื่อโมเดล) ได้ตามต้องการโดยไม่ต้องเผยแพร่แอปเวอร์ชันใหม่

ลองใช้ความสามารถอื่นๆ

ดูวิธีควบคุมการสร้างเนื้อหา

นอกจากนี้ คุณยังทดลองใช้พรอมต์และการกำหนดค่าโมเดล รวมถึงรับข้อมูลโค้ดที่สร้างขึ้นโดยใช้ Google AI Studio ได้ด้วย

ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่รองรับ

ดูข้อมูลเกี่ยวกับโมเดลที่พร้อมใช้งานสำหรับ Use Case ต่างๆ รวมถึงโควต้าและราคาของโมเดลเหล่านั้น


แสดงความคิดเห็นเกี่ยวกับประสบการณ์การใช้งาน Firebase AI Logic