للتعرّف على كيفية إنشاء الفيديوهات، يُرجى الاطّلاع على دليل Gemini Omni Flash.
يمكن لنماذج Gemini معالجة الفيديوهات، ما يتيح العديد من حالات الاستخدام المتقدّمة للمطوّرين والتي كانت تتطلّب في السابق نماذج خاصة بمجال معيّن. تشمل بعض إمكانات Gemini في مجال الرؤية ما يلي: وصف الفيديوهات وتقسيمها واستخراج المعلومات منها، والإجابة عن الأسئلة حول محتوى الفيديو، والإشارة إلى طوابع زمنية محدّدة ضمن الفيديو.
يمكنكم تقديم الفيديوهات كبيانات إدخال إلى Gemini بالطرق التالية:
| طريقة الإرسال | أقصى حجم | حالة الاستخدام المقترَحة |
|---|---|---|
| File API | 20 غيغابايت (مدفوعة) / 2 غيغابايت (مجانية) | الملفات الكبيرة (أكثر من 100 ميغابايت)، والفيديوهات الطويلة (أكثر من 10 دقائق)، والملفات القابلة لإعادة الاستخدام |
| Cloud Storage Registration | 2 غيغابايت (لكل ملف، بدون حدود للتخزين) | الملفات الكبيرة (أكثر من 100 ميغابايت)، والفيديوهات الطويلة (أكثر من 10 دقائق)، والملفات الثابتة القابلة لإعادة الاستخدام |
| Inline Data | أقل من 100 ميغابايت | الملفات الصغيرة (أقل من 100 ميغابايت)، والفيديوهات القصيرة (أقل من دقيقة واحدة)، والبيانات التي يتم إدخالها مرة واحدة |
| عناوين URL على YouTube | لا ينطبق | الفيديوهات العلنية على YouTube |
ملاحظة: ننصح باستخدام File API في معظم حالات الاستخدام، لا سيما للملفات الأكبر من 100 ميغابايت أو عند الرغبة في إعادة استخدام الملف في طلبات متعددة.
للتعرّف على طرق إدخال الملفات الأخرى، مثل استخدام عناوين URL خارجية أو ملفات مخزّنة في Google Cloud، يُرجى الاطّلاع على دليل طرق إدخال الملفات.
تحميل ملف فيديو
يؤدي الرمز البرمجي التالي إلى تنزيل فيديو نموذجي وتحميله باستخدام Files API، ثم ينتظر معالجته، وبعد ذلك يستخدم مرجع الملف الذي تم تحميله لـ تلخيص الفيديو.
Python
from google import genai
client = genai.Client()
myfile = client.files.upload(file="path/to/sample.mp4")
response = client.models.generate_content(
model="gemini-3.8-flash", contents=[myfile, "Summarize this video. Then create a quiz with an answer key based on the information in this video."]
)
print(response.text)
JavaScript
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} 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" },
});
const response = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: createUserContent([
createPartFromUri(myfile.uri, myfile.mimeType),
"Summarize this video. Then create a quiz with an answer key based on the information in this video.",
]),
});
console.log(response.text);
}
await main();
انتقال
uploadedFile, _ := client.Files.UploadFromPath(ctx, "path/to/sample.mp4", nil)
parts := []*genai.Part{
genai.NewPartFromText("Summarize this video. Then create a quiz with an answer key based on the information in this video."),
genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-3.8-flash",
contents,
nil,
)
fmt.Println(result.Text())
راحة
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}&qu>ot; \
-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 "Upl>oading vide>o 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)
echo file_uri=$file_uri
echo "File uploaded successfully. File URI: ${file_uri}"
# --- 3. Generate content using the uploaded video file ---
echo "Generating content from video..."
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: applicati>on/json'>; \
-X POST \
-d '{
"contents": [{
"parts":[
{"file_data":{"mime_type": "'"${MIME_TYPE}"'", "file_uri": "'"${file_uri}"'"}},
{"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 -r ".candidates[].content.parts[].text" response.json
يجب دائمًا استخدام Files API عندما يكون إجمالي حجم الطلب (بما في ذلك الملف والطلب النصي وتعليمات النظام وما إلى ذلك) أكبر من 20 ميغابايت، أو إذا كانت مدة الفيديو كبيرة، أو إذا كنتم تعتزمون استخدام الفيديو نفسه في طلبات متعددة. تقبل File API تنسيقات ملفات الفيديو مباشرةً.
لمزيد من المعلومات حول كيفية استخدام ملفات الوسائط، يُرجى الاطّلاع على Files API.
إرسال بيانات الفيديو مضمّنة
بدلاً من تحميل ملف فيديو باستخدام File API، يمكنكم إرسال فيديوهات أصغر حجمًا مباشرةً في الطلب إلى generateContent. هذا الخيار مناسب للفيديوهات القصيرة التي يقل إجمالي حجم الطلب فيها عن 20 ميغابايت.
في ما يلي مثال على تقديم بيانات الفيديو مضمّنة:
Python
from google import genai
from google.genai import types
# Only for videos of size <20Mb
video_file_name = "/path/to/your/video.mp4"
video_bytes = open(video_file_name, 'rb').read()
client = genai.Client()
response = client.models.generate_content(
model='gemini-3.8-flash',
contents=types.Content(
parts=[
types.Part(
inline_data=types.Blob(data=video_bytes, mime_type='video/mp4')
),
types.Part(text='Please summarize the video in 3 sentences.';)
]
)
)
print(response.text)
JavaScript
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 contents = [
{
inlineData: {
mimeType: "video/mp4",
data: base64VideoFile,
},
},
{ text: "Please summarize the video in 3 sentences." }
];
const response = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: contents,
});
console.log(response.text);
راحة
VIDEO_PATH=/path/to/your/video.mp4
if [[ "$(base64 --vers>&ion 21)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{
"inline_data": {
"mime_type":"video/mp4",
"data": "'$(base64 $B64FLAGS> $VIDEO_PATH)'"
}
},
{"text": "Please summarize the video in 3 sentences."}
]
}]
}' 2 /dev/null
إرسال عناوين URL على YouTube
يمكنكم إرسال عناوين URL على YouTube مباشرةً إلى Gemini API كجزء من طلبكم على النحو التالي:
Python
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model='gemini-3.8-flash',
contents=types.Content(
parts=[
types.Part(
file_data=types.FileData(file_uri='https://www.youtube.com/watch?v=9hE5-98ZeCg')
),
types.Part(text='Please summarize the video in 3 sentences.')
]
)
)
print(response.text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
const contents = [
{
fileData: {
fileUri: "https://www.youtube.com/watch?v=9hE5-98ZeCg",
},
},
{ text: "Please summarize the video in 3 sentences." }
];
const response = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: contents,
});
console.log(response.text);
انتقال
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
parts := []*genai.Part{
genai.NewPartFromText("Please summarize the video in 3 sentences."),
genai.NewPartFromURI("https://www.youtube.com/watch?v=9hE5-98ZeCg","video/mp4"),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-3.8-flash",
contents,
nil,
)
fmt.Println(result.Text())
}
راحة
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"text": "Please summarize the video in 3 sentences."},
{
"file_data": {
"file_uri": "https>://www.youtube.com/watch?v=9hE5-98ZeCg"
}
}
]
}]
}' 2 /dev/null
القيود:
- في المستوى المجاني، لا يمكنكم تحميل أكثر من 8 ساعات من فيديوهات YouTube في اليوم.
- في المستوى المدفوع، لا توجد أي قيود استنادًا إلى مدة الفيديو.
- بالنسبة إلى النماذج التي تسبق Gemini 2.5، لا يمكنكم تحميل سوى فيديو واحد لكل طلب. بالنسبة إلى Gemini 2.5 والنماذج الأحدث، يمكنكم تحميل 10 فيديوهات بحدّ أقصى لكل طلب.
- لا يمكنكم تحميل سوى الفيديوهات العلنية (وليس الفيديوهات الخاصة أو غير المُدرَجة).
فهم الفيديوهات باستخدام الذكاء الاصطناعي الوكيل
تستخدم بيانات إدخال الفيديو بشكلٍ تلقائي المعالجة الثابتة (استخراج اللقطات بمعدّل لقطة واحدة في الثانية). تتيح نماذج Gemini 3.8 Flash و3.7 Flash و3.6 Flash و3.5 Flash Lite أيضًا فهم الفيديوهات باستخدام الذكاء الاصطناعي الوكيل، حيث يستكشف النموذج المخطط الزمني للفيديو بشكلٍ ديناميكي، ويفحص النصوص بشكلٍ انتقائي، ويعدّل معدّلات اللقطات ودرجة الدقة بشكلٍ تكيفي أثناء التنقل استنادًا إلى الطلب.
| الوضع | الوصف | النماذج المتوافقة |
|---|---|---|
| ثابت (تلقائي) | يستخرج هذا الوضع اللقطات بمعدّل ثابت (لقطة واحدة في الثانية) ويضعها في السياق في عملية واحدة. ويعمل بشكلٍ جيد مع المقاطع القصيرة. | جميع نماذج Gemini |
| حلول مستندة إلى الذكاء الاصطناعي الوكيل | يتنقّل النموذج بشكلٍ ديناميكي في المخطط الزمني للفيديو، ولا يحمّل سوى المحتوى الذي يحتاج إليه استنادًا إلى الطلب. يؤدي ذلك إلى تحسين كفاءة الرموز المميّزة بنسبة تصل إلى% 88 تقريبًا وتحسين الجودة بنسبة% 7 تقريبًا في المحتوى الطويل. | Gemini 3.8 Flash و3.7 Flash و3.6 Flash و3.5 Flash Lite |
اختيار وضع المعالجة
كإرشادات عامة، ابدأوا بالوضع حلول مستندة إلى الذكاء الاصطناعي الوكيل ، لا سيما عند تحسين جودة الردّ أو كفاءة الرموز المميّزة.
- حلول مستندة إلى الذكاء الاصطناعي الوكيل: الفيديوهات الطويلة أو طلبات البحث التي تستهدف لحظات محدّدة يتنقّل النموذج بشكلٍ ديناميكي في المخطط الزمني لاستهداف المعلومات ذات الصلة بالسياق بدون ملء قدرة الاستيعاب.
- ثابت: طلبات البحث التي تتأثر بالمدة الزمنية في المقاطع القصيرة (أقل من 5 دقائق)، أو الحالات التي تكون فيها الدقة على مستوى اللقطة مطلوبة في المقطع بأكمله
ضبط وضع المعالجة
Python
import time
from google import genai
from google.genai import types
client = genai.Client()
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)
response = client.models.generate_content(
model="gemini-3.8-flash",
contents=[
types.Part.from_uri(
file_uri=video_file.uri,
mime_type=video_file.mime_type,
media_processing="AGENTIC",
),
"What are the three main arguments presented?",
],
)
print(response.text)
JavaScript
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({});
let videoFile = await ai.files.upload({
file: "path/to/lecture.mp4",
config: { mimeType: "video/mp4" },
});
while (videoFile.state === "PROCESSING&>quot;) {
await new Promise((resolve) = setTimeout(resolve, 2000));
videoFile = await ai.files.get({ name: videoFile.name });
}
const response = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: [
{
role: "user",
parts: [
{
fileData: {
fileUri: videoFile.uri,
mimeType: videoFile.mimeType,
},
mediaProcessing: "AGENTIC",
},
{ text: "What are the three main arguments presented?" },
],
},
],
});
console.log(response.text);
انتقال
uploadedFile, _ := client.Files.UploadFromPath(ctx, "path/to/lecture.mp4", nil)
parts := []*genai.Part{
{
&FileData: genai.FileData{
FileURI: uploadedFile.URI,
MIMEType: uploadedFile.MIMEType,
},
MediaProcessing: genai.MediaProcessingAgentic,
},
genai.NewPartFromText("What are the three main arguments presented?"),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-3.8-flash",
contents,
nil,
)
fmt.Println(result.Text())
راحة
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"contents": [{
"parts": [
{
"file_data": {
"file_uri": "'${file_uri}'",
"mime_type": "video/mp4"
},
"media_processing": "AGENTIC"
},
{"text": "What are the three main arguments presented?"}
]
}]
}'
ملاحظة: للتحقّق من استخدام المعالجة المستندة إلى الذكاء الاصطناعي الوكيل، افحصوا
response.candidates[0].content.parts. يشير وجود أجزاءtool_callوtool_responseمع نوع الأداةMEDIA_PROCESSINGإلى أنّ النموذج تنقّل في الفيديو بشكلٍ ديناميكي.
ملاحظة: على عكس الأدوات الأخرى من جهة الخادم (مثل "بحث Google" أو سياق عنوان URL)، لا يتطلّب الفيديو المستند إلى الذكاء الاصطناعي الوكيل ضبط
include_server_side_tool_invocations=TrueفيToolConfigلعرض أو بثّ عمليات استدعاء الأدوات ونتائجها. يتم عرض أجزاءtool_callوtool_responseللتنقّل في الفيديو تلقائيًا عند ضبطmedia_processing="AGENTIC"على أي جزء من بيانات الإدخال.
بنية الردّ
عند تفعيل المعالجة المستندة إلى الذكاء الاصطناعي الوكيل، يتضمّن الردّ أجزاء إضافية تعرض تتبُّع التنقّل الداخلي:
tool_callأجزاء (tool_type: "MEDIA_PROCESSING"): يتم عرضها في كل مرة يطلب فيها النموذج مقطع فيديو أو نصًا صوتيًاtool_responseأجزاء (tool_type: "MEDIA_PROCESSING"): نتيجة كل عملية تحميل
لستم بحاجة إلى معالجة هذه الأجزاء أو الردّ عليها يدويًا: أرسِلوا الردّ الكامل مرة أخرى كسجلّ للمحادثة وستتم معالجتها تلقائيًا.
إذا تم ضبط include_thoughts=True في ThinkingConfig، تظهر خطوات الاستدلال كأجزاء thought: true متداخلة مع أزواج استدعاء الأداة/الردّ. عند إيقاف الأفكار، يتم حذف نص الفكرة ولكن تظل أجزاء الأداة موجودة.
يعرض المثال التالي حمولة الردّ مع أجزاء استدعاء الأداة والردّ المتداخلة:
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"thought": true,
"text": "Inspecting transcript for key discussion topics..."
},
{
"thought_signature": "sig_A",
"tool_call": {
"tool_type": "MEDIA_PROCESSING"
}
},
{
"thought_signature": "sig_B",
"tool_response": {
"tool_type": "MEDIA_PROCESSING"
}
},
{
"thought": true,
"text": "Loading visual frames to verify slide content..."
},
{
"thought_signature": "sig_C",
"tool_call": {
"tool_type": "MEDIA_PROCESSING"
}
},
{
"thought_signature": "sig_D",
"tool_response": {
"tool_type": "MEDIA_PROCESSING"
}
},
{
"thought": true,
"text": "Synthesizing answer from gathered evidence..."
},
{
"text": "The three main arguments presented in the lecture are...",
"thought_signature": "sig_E"
}
]
}
}
]
}
الجمع بين أوضاع المعالجة في الفيديوهات
يمكنكم ضبط أوضاع معالجة مختلفة لكل جزء من أجزاء الفيديو في الطلب نفسه:
Python
from google import genai
from google.genai import types
client = genai.Client()
lecture = client.files.upload(file="path/to/long-lecture.mp4")
experiment = client.files.upload(file="path/to/short-experiment.mp4")
response = client.models.generate_content(
model="gemini-3.8-flash",
contents=[
types.Part.from_uri(
file_uri=lecture.uri,
mime_type=lecture.mime_type,
media_processing="AGENTIC", # Use agentic video understanding
),
types.Part.from_uri(
file_uri=experiment.uri,
mime_type=experiment.mime_type,
media_processing="STATIC", # Use static processing
),
"Compare the lecture content with the experiment results.",
],
)
print(response.text)
JavaScript
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" },
});
const response = await ai.models.generateContent({
model: "gemini-3.8-flash",
contents: [
{
role: "user",
parts: [
{
fileData: {
fileUri: lecture.uri,
mimeType: lecture.mimeType,
},
mediaProcessing: "AGENTIC", // Use agentic video understanding
},
{
fileData: {
fileUri: experiment.uri,
mimeType: experiment.mimeType,
},
mediaProcessing: "STATIC", // Use static processing
},
{ text: "Compare the lecture content with the experiment results." },
],
},
],
});
console.log(response.text);
انتقال
lecturePart := &genai.Part{
FileData: &genai.FileData{
FileURI: lectureFile.URI,
MIMEType: lectureFile.MIMEType,
},
MediaProcessing: genai.MediaProcessingAgentic, // Use agentic
}
experimentPart := &genai.Part{
FileData: &genai.FileData{
FileURI: experimentFile.URI,
MIMEType: experimentFile.MIMEType,
},
MediaProcessing: genai.MediaProcessingStatic, // Use static
}
parts := []*genai.Part{
lecturePart,
experimentPart,
genai.NewPartFromText("Compare the lecture content with the experiment results."),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
fmt.Println(result.Text())
راحة
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.8-flash:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"contents": [{
"parts": [
{
"file_data": {
"file_uri": "'${lecture_uri}'",
"mime_type": "video/mp4"
},
"media_processing": "AGENTIC"
},
{
"file_data": {
"file_uri": "'${experiment_uri}'",
"mime_type": "video/mp4"
},
"media_processing": "STATIC"
},
{"text": "Compare the lecture content with the experiment results."}
]
}]
}'
استخدام التخزين المؤقت للسياق في الفيديوهات الطويلة
بالنسبة إلى الفيديوهات التي تزيد مدتها عن 10 دقائق، أو عندما تخططون لإجراء طلبات متعددة على ملف الفيديو نفسه، استخدِموا التخزين المؤقت للسياق لـ تقليل التكاليف وتحسين المدة الزمنية للوصول إلى أول رمز مميّز. يتيح لكم التخزين المؤقت للسياق معالجة الفيديو مرة واحدة وإعادة استخدام الرموز المميّزة لطلبات البحث اللاحقة، ما يجعله مثاليًا لجلسات المحادثة أو التحليل المتكرّر للمحتوى الطويل.
الإشارة إلى الطوابع الزمنية في المحتوى
يمكنكم طرح أسئلة حول نقاط زمنية محدّدة داخل الفيديو باستخدام طوابع زمنية بالتنسيق MM:SS.
Python
prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?" # Adjusted timestamps for the NASA video
JavaScript
const prompt = "What are the examples given at 00:05 and 00:10 supposed to show us?";
انتقال
prompt := []*genai.Part{
genai.NewPartFromURI(currentVideoFile.URI, currentVideoFile.MIMEType),
// Adjusted timestamps for the NASA video
genai.NewPartFromText("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?"
استخراج إحصاءات مفصّلة من الفيديو
توفّر نماذج Gemini إمكانات قوية لفهم محتوى الفيديو من خلال معالجة المعلومات من كل من المحتوى الصوتي والمرئي. يتيح لكم ذلك استخراج مجموعة كبيرة من التفاصيل، بما في ذلك إنشاء أوصاف لما يحدث في الفيديو والإجابة عن الأسئلة حول محتواه.
بالنسبة إلى الأوصاف المرئية، يختار النموذج عيّنات من الفيديو بمعدّل لقطة واحدة في الثانية. يعمل معدّل اختيار العيّنات التلقائي هذا بشكلٍ جيد لمعظم المحتوى، ولكن يُرجى العِلم أنّه قد لا يرصد التفاصيل في الفيديوهات التي تتضمّن حركة سريعة أو تغييرات سريعة في المشهد. بالنسبة إلى هذا المحتوى الذي يتضمّن حركة عالية، ننصحكم بـ ضبط عدد اللقطات في الثانية مخصّص.
Python
prompt = "Describe the key events in this video, providing both audio and visual details. Include timestamps for salient moments."
JavaScript
const prompt = "Describe the key events in this video, providing both audio and visual details. Include timestamps for salient moments.";
انتقال
prompt := []*genai.Part{
genai.NewPartFromURI(currentVideoFile.URI, currentVideoFile.MIMEType),
genai.NewPartFromText("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."
تخصيص معالجة الفيديو
يمكنكم تخصيص معالجة الفيديو في Gemini API من خلال ضبط فواصل الاقتطاع أو تقديم عيّنات مخصّصة لعدد اللقطات في الثانية. لا تتوفّر خيارات التخصيص هذه
إلا عند معالجة الفيديو في الوضع "static".
ضبط فواصل الاقتطاع
يمكنكم اقتطاع الفيديو من خلال تحديد videoMetadata مع إزاحتَي البدء والانتهاء.
Python
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model='models/gemini-3.8-flash',
contents=types.Content(
parts=[
types.Part(
file_data=types.FileData(file_uri='https://www.youtube.com/watch?v=XEzRZ35urlk'),
video_metadata=types.VideoMetadata(
start_offset='1250s',
end_offset='1570s'
)
),
types.Part(text='Please summarize the video in 3 sentences.')
]
)
)
JavaScript
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});
const model = 'gemini-3.8-flash';
async function main() {
const contents = [
{
role: 'user',
parts: [
{
fileData: {
fileUri: 'https://www.youtube.com/watch?v=9hE5-98ZeCg',
mimeType: 'video/*',
},
videoMetadata: {
startOffset: '40s',
endOffset: '80s',
}
},
{
text: 'Please summarize the video in 3 sentences.',
},
],
},
];
const response = await ai.models.generateContent({
model,
contents,
});
console.log(response.text)
}
await main();
ضبط عدد اللقطات في الثانية مخصّص
يمكنكم ضبط عيّنات مخصّصة لعدد اللقطات في الثانية من خلال إرسال وسيطة fps إلى videoMetadata.
Python
from google import genai
from google.genai import types
# Only for videos of size <20Mb
video_file_name = "/path/to/your/video.mp4"
video_bytes = open(video_file_name, 'rb').read()
client = genai.Client()
response = client.models.generate_content(
model='models/gemini-3.8-flash',
contents=types.Content(
parts=[
types.Part(
inline_data=types.Blob(
data=video_bytes,
mime_type='video/mp4'),
video_metadata=types.VideoMetadata(fps=5)
),
types.Part(text='Please summarize the video in 3 sentences.')
]
)
)
يتم بشكلٍ تلقائي اختيار عيّنة من الفيديو بمعدّل لقطة واحدة في الثانية. قد تحتاجون إلى ضبط معدّل لقطات منخفض (< 1) للفيديوهات الطويلة. ويفيد ذلك بشكلٍ خاص في الفيديوهات الثابتة في الغالب (مثل المحاضرات). استخدِموا معدّل لقطات أعلى للفيديوهات التي تتطلّب تحليلًا زمنيًا دقيقًا، مثل فهم الحركة السريعة أو تتبُّع الحركة عالية السرعة.
تنسيقات الفيديو المتوافقة
يتوافق Gemini مع أنواع MIME لتنسيقات الفيديو التالية:
video/mp4video/mpegvideo/quicktimevideo/avivideo/x-flvvideo/mpgvideo/webmvideo/wmvvideo/3gpp
تفاصيل فنية حول الفيديوهات
- النماذج والسياق المتوافقة: يمكن لجميع نماذج Gemini معالجة بيانات الفيديو.
- يمكن للنماذج التي تتضمّن قدرة استيعاب بسعة مليون رمز مميّز معالجة فيديوهات تصل مدتها إلى 3 ساعات بشكلٍ تلقائي (بدقة وسائط منخفضة)، أو تصل مدتها إلى ساعة واحدة بدقة وسائط عالية.
- أوضاع المع/الجة: تتيح نماذج Gemini 3.8 Flash و3.7 Flash و3.6 Flash و3.5 Flash Lite،
والنماذج الأحدث وضعَي معالجة للفيديو:
- ثابت: يتم استخراج اللقطات بمعدّل لقطة واحدة في الثانية ووضعها في السياق (تلقائي لجميع النماذج). تتم معالجة الصوت بمعدّل 1 كيلوبت في الثانية (قناة واحدة). تتم إضافة الطوابع الزمنية كل ثانية. هذا الوضع هو الأفضل للمقاطع القصيرة أو عندما تكون كل لقطة مهمة (مثل الفحص لقطة بلقطة). يُرجى العِلم أنّ تسلسلات الحركة السريعة قد تفقد التفاصيل بسبب معدّل اختيار العيّنات البالغ لقطة واحدة في الثانية.
- حلول مستندة إلى الذكاء الاصطناعي الوكيل: يتنقّل النموذج بشكلٍ ديناميكي في الفيديو، ويحمّل
النص و/أو اللقطات و/أو الصوت عند الطلب. يؤدي ذلك إلى استخدام رموز مميّزة أقل بنسبة تصل إلى %88 للمحتوى الطويل، على الرغم من أنّ التنقّل قد يزيد قليلاً من المدة الزمنية للوصول إلى أول رمز مميّز في المقاطع القصيرة (أقل من 5 دقائق) بسبب الاستدلال الداخلي وعمليات تبادل البيانات مع الأدوات قبل بدء الإنشاء.
تتضمّن الردود أجزاء استدعاء الأداة والردّ
MEDIA_PROCESSINGللحفاظ على سياق الاستدلال خلال المحادثات. هذا الوضع هو الأفضل للفيديوهات الطويلة لتحسين تكاليف الرموز المميّزة وجودة الردّ. يتوافق هذا الوضع مع Gemini 3.8 Flash و3.7 Flash و3.6 Flash و3.5 Flash Lite. يُرجى الاطّلاع على فهم الفيديوهات باستخدام الذكاء الاصطناعي الوكيل لمعرفة التفاصيل.
- احتساب الرموز المميّزة (الوضع الثابت): يتم تقسيم كل ثانية من الفيديو إلى رموز مميّزة على النحو التالي:
- اللقطات الفردية (يتم اختيار عيّنات منها بمعدّل لقطة واحدة في الثانية):
- إذا تم ضبط
media_resolutionعلى منخفض، يتم تقسيم اللقطات إلى رموز مميّزة بمعدّل 66 رمزًا مميّزًا لكل لقطة. - وإلّا، يتم تقسيم اللقطات إلى رموز مميّزة بمعدّل 258 رمزًا مميّزًا لكل لقطة.
- إذا تم ضبط
- الصوت: 32 رمزًا مميّزًا في الثانية
- يتم أيضًا تضمين البيانات الوصفية.
- الإجمالي: 100 رمز مميّز تقريبًا في الثانية من الفيديو بدقة وسائط تلقائية (منخفضة)، أو 300 رمز مميّز تقريبًا في الثانية من الفيديو بدقة وسائط عالية
- اللقطات الفردية (يتم اختيار عيّنات منها بمعدّل لقطة واحدة في الثانية):
- احتساب الرموز المميّزة (الوضع المستند إلى الذكاء الاصطناعي الوكيل): يختلف استخدام الرموز المميّزة استنادًا إلى مدى تعقيد المحتوى
واستراتيجية التنقّل في النموذج. يتم احتساب رموز الاستدلال للتنقّل
التي يتم إنشاؤها أثناء استكشاف الفيديو على أنّها رموز مميّزة للتفكير
(
thoughts_token_count)، بينما يتم احتساب اللقطات والصوت والنص الذي يتم تحميله عند الطلب على أنّه رموز مميّزة لطلب الأداة (tool_use_prompt_token_count). يستخدم النموذج المستند إلى الذكاء الاصطناعي الوكيل عادةً رموزًا مميّزة أقل بنسبة تصل إلى% 88 من إجمالي الرموز المميّزة مقارنةً بالوضع الثابت للمحتوى الطويل، لأنّ النموذج لا يحمّل سوى النص و/أو اللقطات و/أو الصوت الذي يحتاج إليه للإجابة عن الطلب (يُرجى الاطّلاع على دليل الرموز المميّزة). - دقة الوسائط: يقدّم Gemini 3 عنصر تحكّم دقيقًا في معالجة الرؤية المتعدّدة الوسائط
باستخدام المَعلمة
media_resolution. تحدّد المَعلمةmedia_resolutionالحد الأقصى لعدد الرموز المميّزة المخصّصة لكل صورة أو لقطة فيديو يتم إدخالها. تؤدي درجات الدقة الأعلى إلى تحسين قدرة النموذج على قراءة النص الدقيق أو تحديد التفاصيل الصغيرة، ولكنها تزيد من استخدام الرموز المميّزة والمدة الزمنية للوصول إلى أول رمز مميّز. المَعلمتانmedia_resolutionوmedia_processingمستقلتان: يمكنكم ضبط كلتيهما على جزء الفيديو نفسه.
لمزيد من التفاصيل حول عمليات احتساب الرموز المميّزة، يُرجى الاطّلاع على دليل الرموز المميّزة. tokens
- تنسيق الطابع الزمني: عند الإشارة إلى لحظات محدّدة في الفيديو ضمن
طلبكم، استخدِموا التنسيق
MM:SS(مثل01:15للدقيقة و15 ثانية). - موضع الطلب: عند الجمع بين النص وفيديو واحد، ضعوا الطلب النصي
بعد جزء الفيديو في مصفوفة
contents.
الخطوات التالية
- دقة الوسائط: يمكنكم التحكّم في دقة لقطات الفيديو لتحقيق التوازن بين الجودة واستخدام الرموز المميّزة.
- الرموز المميّزة: يمكنكم فهم كيفية تقسيم محتوى الفيديو إلى رموز مميّزة في كل من وضعَي المعالجة الثابت والمستند إلى الذكاء الاصطناعي الوكيل.
- تعليمات النظام: تتيح لكم تعليمات النظام توجيه سلوك النموذج استنادًا إلى احتياجاتكم وحالات استخدامكم المحدّدة.
- Files API: يمكنكم التعرّف أكثر على كيفية تحميل الملفات وإدارتها لاستخدامها مع Gemini.
- استراتيجيات إنشاء الطلبات باستخدام الملفات: تتيح Gemini API إنشاء الطلبات باستخدام بيانات نصية وصور وملفات صوتية وفيديوهات، ويُعرف ذلك أيضًا باسم إنشاء الطلبات المتعدّدة الوسائط.
- إرشادات السلامة: في بعض الأحيان، تُنتج نماذج الذكاء الاصطناعي التوليدي نتائج غير متوقّعة، مثل النتائج غير الدقيقة، أو المتحيّزة، أو المسيئة. تُعدّ المعالجة اللاحقة والتقييم البشري ضروريَين للحدّ من خطر الضرر الناتج عن هذه النتائج.