Gemini Omni Flash ( gemini-omni-1.1-flash ) — это высокопроизводительная многомодальная модель, разработанная для высокоскоростной генерации видео, редактирования и кинематографического управления. Gemini Omni построена на следующих ключевых возможностях, которые отличают её от предыдущих моделей видео:
- Встроенная мультимодальность: она обрабатывает текст, изображения, аудио и видео одновременно, обеспечивая более согласованный, последовательный и контролируемый результат.
- Редактирование в диалоговом режиме: благодаря API взаимодействия , оно позволяет итеративно дорабатывать и редактировать видео с помощью естественного языкового диалога. Опишите, что вы хотите изменить, и модель применит изменения, сохранив при этом нужные вам части видео.
- Мировые знания: Gemini Omni сочетает понимание физики со знаниями Gemini в области истории, науки и культурного контекста, преодолевая разрыв между фотореализмом и содержательным повествованием.
Преобразование текста в видео
Создайте видео на основе текстовой подсказки. Модель создаст видео со звуком на основе вашего текстового описания. Для достижения наилучших результатов указывайте в подсказках такие детали, как описание сцены, движение камеры, освещение и настроение.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A marble rolling fast on a chain reaction style track, continuous smooth shot."
)
with open("marble.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A marble rolling fast on a chain reaction style track, continuous smooth shot.',
});
if (interaction.output_video?.data) {
fs.writeFileSync('marble.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A marble rolling fast on a chain reaction style track, continuous smooth shot."
}'
Схема REST-ответа
Поле interaction.output_video доступно только в SDK . При прямом использовании REST API видеовыход можно получить из массива steps .
Исходная структура REST JSON:
{
"steps": [
{ "type": "user_input", "content": [{"type": "text", "text": "..."}] },
{ "type": "thought", "content": [{"text": "...", "type": "thought"}] },
{
"type": "model_output",
"content": [
{
"type": "video",
"mime_type": "video/mp4",
"data": "AAAAIGZ0eXBpc29t..." // Base64 encoded video data
}
]
}
],
"id": "v1_...",
"status": "completed",
"model": "gemini-omni-1.1-flash",
"object": "interaction"
}
Соотношение сторон управления
Установите aspect_ratio на "9:16" , чтобы создавать видео в портретном режиме. По умолчанию используется альбомный режим (16:9).
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A futuristic city with neon lights and flying cars, cyberpunk style",
response_format={
"type": "video", # optional
"aspect_ratio": "9:16" # Supported values: "9:16", "16:9"
}
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A futuristic city with neon lights and flying cars, cyberpunk style',
response_format: {
type: 'video', // optional
aspect_ratio: '9:16' // Supported values: '9:16', '16:9'
},
});
if (interaction.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A futuristic city with neon lights and flying cars, cyberpunk style",
"response_format": {
"type": "video",
"aspect_ratio": "9:16"
}
}'
Разрешение выходного сигнала
Управляйте разрешением выходного видео, используя параметр resolution в response_format . Разрешение по умолчанию — 720p.
| Ценить | Описание |
|---|---|
360p | Разрешение вывода 360p |
720p | Разрешение вывода 720p (по умолчанию) |
1080p | Вывод в разрешении 1080p (масштабированное изображение) |
4k | Вывод в формате 4K (масштабированный). |
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A drone shot of a mountain landscape at sunrise.",
response_format={
"type": "video",
"resolution": "1080p",
},
)
with open("hires.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A drone shot of a mountain landscape at sunrise.',
response_format: {
type: 'video',
resolution: '1080p',
},
});
if (interaction.output_video?.data) {
fs.writeFileSync('hires.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A drone shot of a mountain landscape at sunrise.",
"response_format": {
"type": "video",
"resolution": "1080p"
}
}'
Преобразование изображения в видео
Вы можете приложить к тексту подсказку эталонное изображение. В зависимости от подсказки, модель сама решит, как использовать это изображение. Это полезно для того, чтобы оживить фотографии товаров, иллюстрации или снимки.
В следующем примере показано, как использовать в качестве эталонного изображения рисунок рыбы, выпрыгивающей из воды:

При следующей подсказке:
turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video
Создать реалистичное видео процесса рисования.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": base64_image, "mime_type": "image/jpeg"},
{"type": "text", "text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"}
],
)
with open("clownfish.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: base64Image, mime_type: 'image/jpeg' },
{ type: 'text', text: 'turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video' }
]
});
if (interaction.output_video?.data) {
fs.writeFileSync('clownfish.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "image", "data": "'"$BASE64_IMAGE"'", "mime_type": "image/jpeg"},
{"type": "text", "text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"}
]
}'
Интерполяция первого и последнего кадра
Gemini Omni Flash поддерживает интерполяцию видео, что позволяет создавать видео с плавным переходом между начальным изображением (первым кадром) и конечным изображением (последним кадром).
Вставьте два изображения в список input и опишите желаемый переход в подсказке. Модель анимирует сцену от первого кадра до конечного.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": first_frame_b64, "mime_type": "image/jpeg"},
{"type": "image", "data": last_frame_b64, "mime_type": "image/jpeg"},
{"type": "text", "text": "A smooth cinematic transition from a lush green forest at sunrise to a snowy forest under a starry night sky."}
],
)
with open("interpolation.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: firstFrameB64, mime_type: 'image/jpeg' },
{ type: 'image', data: lastFrameB64, mime_type: 'image/jpeg' },
{ type: 'text', text: 'A smooth cinematic transition from a lush green forest at sunrise to a snowy forest under a starry night sky.' }
]
});
if (interaction.output_video?.data) {
fs.writeFileSync('interpolation.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "image", "data": "'"$FIRST_FRAME_B64"'", "mime_type": "image/jpeg"},
{"type": "image", "data": "'"$LAST_FRAME_B64"'", "mime_type": "image/jpeg"},
{"type": "text", "text": "A smooth cinematic transition from a lush green forest at sunrise to a snowy forest under a starry night sky."}
]
}'
Справочная информация по предмету
Вы можете создать видео, используя определенные объекты, предоставленные в качестве эталонных изображений. Например, следующий код показывает, как, предоставив 2 изображения кошки и пряжи, создать видео, где кошка играет с пряжей.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": cat_b64, "mime_type": "image/png"},
{"type": "image", "data": yarn_b64, "mime_type": "image/png"},
{"type": "text", "text": "A cat playfully batting at a ball of yarn."}
],
)
with open("cat.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: catData, mime_type: 'image/png' },
{ type: 'image', data: yarnData, mime_type: 'image/png' },
{ type: 'text', text: 'A cat playfully batting at a ball of yarn.' }
]
});
if (interaction.output_video?.data) {
fs.writeFileSync('cat.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "image", "data": "'"$CAT_B64"'", "mime_type": "image/png"},
{"type": "image", "data": "'"$YARN_B64"'", "mime_type": "image/png"},
{"type": "text", "text": "A cat playfully batting at a ball of yarn."}
]
}'
Параметр задач
Используйте параметр task в файле video_config , чтобы явно указать желаемое поведение. Например, если вы хотите, чтобы модель генерировала видео из изображения, вы можете установить параметр в значение image_to_video . Если он не установлен, модель определит желаемое поведение на основе запроса.
Допустимые значения следующие:
-
text_to_video -
image_to_video -
reference_to_video -
edit -
extend
В следующем примере показано, как это настроить для ранее показанного примера преобразования изображения в видео.
Python
import base64
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": base64_image, "mime_type": "image/jpeg"},
{"type": "text", "text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"}
],
generation_config={
"video_config": {
"task": "image_to_video",
}
},
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from "@google/genai";
import * as fs from 'fs';
const ai = new GoogleGenAI({});
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'image', data: base64Image, mime_type: 'image/jpeg' },
{ type: 'text', text: 'turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video' }
],
generationConfig: {
videoConfig: {
task: 'image_to_video',
}
}
});
if (interaction.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": [
{
"type": "image",
"data": "'"$BASE64_IMAGE"'",
"mime_type": "image/jpeg"
},
{
"type": "text",
"text": "turn this into realistic footage, using the drawing only as a guide for movement, do not show the drawing in the final video"
}
],
"generation_config": {
"video_config": {
"task": "image_to_video"
}
}
}'
Видеомонтаж с сохранением состояния
Создайте видео и редактируйте его итеративно, используя последующие подсказки. Каждый шаг основывается на предыдущем результате. Модель запоминает контекст видео, применяя ваши изменения, но сохраняя элементы, которые вы не упомянули. Используйте previous_interaction_id для отслеживания истории разговора и состояния созданного видео без повторной загрузки предыдущего видео.
Следующий пример демонстрирует, как создать первое видео, а затем отредактировать его:
Python
import base64
from google import genai
client = genai.Client()
# Turn 1: Generate initial video
res1 = client.interactions.create(model="gemini-omni-1.1-flash", input="A woman playing violin outdoors.")
# Turn 2: Edit the previous video
res2 = client.interactions.create(
model="gemini-omni-1.1-flash",
previous_interaction_id=res1.id,
input="Make the violin invisible."
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(res2.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Turn 1: Generate initial video
const res1 = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A woman playing violin outdoors.',
});
// Turn 2: Edit the previous video
const res2 = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
previous_interaction_id: res1.id,
input: 'Make the violin invisible.',
});
if (res2.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(res2.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"previous_interaction_id": "'"$PREVIOUS_ID"'",
"input": "Make the violin invisible."
}'
Пример исходного видео:
Пример отредактированного видео:
Каждый ход в разговоре приводит к созданию нового видео. Модель понимает контекст предыдущих ходов, позволяя вносить постепенные изменения, такие как регулировка освещения и смена фона, без необходимости переописывать всю сцену заново.
Редактируйте свои собственные видео
Загрузите свои видео, используя Files API , чтобы редактировать их с помощью Gemini Omni Flash.
В следующем примере показано, как отредактировать следующее исходное видео:
Python
import time
import base64
from google import genai
client = genai.Client()
# Upload video using the file API
video_file = client.files.upload(file="Video.mp4")
while video_file.state == "PROCESSING":
print('Waiting for video to be processed.')
time.sleep(10)
video_file = client.files.get(name=video_file.name)
if video_file.state == "FAILED":
raise ValueError(video_file.state)
print(f'Video processing complete: ' + video_file.uri)
# Edit your video
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "document", "uri": video_file.uri},
{"type": "text", "text": "When the person touches the mirror, make the mirror ripple beautifully like liquid, and the person's arm turns into reflective mirror material"}
],
)
with open("example.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Upload video using the file API
let videoFile = await ai.files.upload({
file: 'Video.mp4',
});
while (videoFile.state === 'PROCESSING') {
console.log('Waiting for video to be processed.');
await new Promise(r => setTimeout(r, 10000));
videoFile = await ai.files.get({ name: videoFile.name });
}
if (videoFile.state === 'FAILED') {
throw new Error(videoFile.state);
}
console.log('Video processing complete: ' + videoFile.uri);
// Edit your video
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'document', uri: videoFile.uri },
{ type: 'text', text: "When the person touches the mirror, make the mirror ripple beautifully like liquid, and the person's arm turns into reflective mirror material" }
],
});
if (interaction.output_video?.data) {
fs.writeFileSync('example.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
#!/bin/bash
VIDEO_B64=$(encode_file "$VIDEO_FILE")
curl -sS -w "\n[HTTP %{http_code}]\n" "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: ${API_KEY}" \
-H "Content-Type: application/json" \
-d @- <<EOF > video_editing_response.json
{
"model": "gemini-omni-1.1-flash",
"input": [
{
"type": "user_input",
"content": [
{
"type": "video",
"mime_type": "video/mp4",
"data": "$VIDEO_B64"
},
{
"type": "text",
"text": "When the person touches the mirror, make the mirror ripple beautifully like liquid, and the person's arm turns into reflective mirror material"
}
]
}
],
"response_format": { "type": "video" }
}
EOF
Пример отредактированного видео:
Получение видео с помощью URI
Используйте параметр delivery="uri" в response_format , чтобы получить сгенерированные видеофайлы размером более 4 МБ. Это вернет URI, размещенный на сервере Google, который вы можете опрашивать до тех пор, пока видео не станет ACTIVE прежде чем загружать его.
Python
import time
from google import genai
client = genai.Client()
# 1. Request video via URI delivery
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input="A beautiful sunset.",
response_format={"type": "video", "delivery": "uri"}
)
# 2. Extract file name and poll for ACTIVE state
video_output = interaction.output_video
file_name = video_output.uri.split("/")[-1] # Extract ID
print("Waiting for video processing...")
while True:
f_info = client.files.get(name=f"files/{file_name}")
if f_info.state.name == "ACTIVE":
break
elif f_info.state.name == "FAILED":
raise RuntimeError("Generation failed.")
time.sleep(5)
# 3. Download the final video
video_bytes = client.files.download(file=video_output.uri)
with open("output.mp4", "wb") as f:
f.write(video_bytes)
JavaScript
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({});
// 1. Request video via URI delivery
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: 'A beautiful sunset.',
response_format: { type: 'video', delivery: 'uri' },
});
// 2. Extract file name and poll for ACTIVE state
const videoOutput = interaction.output_video;
const fileId = videoOutput.uri.match(/files\/([a-zA-Z0-9]+)/)[1];
const name = `files/${fileId}`;
console.log("Waiting for video processing...");
while (true) {
const fInfo = await ai.files.get({ name });
if (fInfo.state.name === 'ACTIVE') break;
if (fInfo.state.name === 'FAILED') throw new Error("Generation failed.");
await new Promise(r => setTimeout(r, 5000));
}
// 3. Download the final video
await ai.files.download({
file: videoOutput,
downloadPath: 'output.mp4',
});
console.log("💾 Saved video to output.mp4");
ОТДЫХ
#!/bin/bash
# 1. Initial request to generate the video
RESPONSE=$(curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-omni-1.1-flash",
"input": "A beautiful sunset over a calm ocean.",
"response_format": {"type": "video", "delivery": "uri"}
}')
# Extract FILE_ID from the URI (e.g., "files/abc-123" -> "abc-123")
FILE_URI=$(echo $RESPONSE | jq -r '.output_video.uri')
FILE_ID=$(echo $FILE_URI | cut -d'/' -f2)
echo "Video requested (ID: $FILE_ID). Waiting for processing..."
# 2. Polling loop
while true; do
# Get current file status
STATUS_JSON=$(curl -s -X GET "https://generativelanguage.googleapis.com/v1beta/files/$FILE_ID?key=$API_KEY")
STATE=$(echo $STATUS_JSON | jq -r '.state')
if [ "$STATE" == "ACTIVE" ]; then
echo "Processing complete! Downloading..."
break
elif [ "$STATE" == "FAILED" ]; then
echo "Error: Generation failed."
exit 1
else
echo "Current state: $STATE... (waiting 5s)"
sleep 5
fi
done
# 3. Final download
curl -L -X GET "https://generativelanguage.googleapis.com/v1beta/files/$FILE_ID:download?alt=media&key=$API_KEY" \
--output "output.mp4"
echo "Done! Video saved to output.mp4"
Исходная структура REST JSON (URI):
{
"steps": [
{ "type": "user_input", "content": [{"type": "text", "text": "..."}] },
{ "type": "thought", "content": [{"text": "...", "type": "thought"}] },
{
"type": "model_output",
"content": [
{
"type": "video",
"mime_type": "video/mp4",
"uri": "https://generativelanguage.googleapis.com/v1beta/files/...:download?alt=media"
}
]
}
],
"id": "v1_...",
"status": "completed",
"model": "gemini-omni-1.1-flash",
"object": "interaction"
}
Видеорасширение
Продлите существующее видео, создав плавное продолжение в конце клипа. Опишите, как вы хотите продолжить видео, например, "Extend this video" или "Continue the scene: the camera pans across the mountains" . Модель анализирует входное видео и создает продолжение продолжительностью от 3 до 10 секунд.
Вы можете расширить:
- Видео, сгенерированные моделью (многоходовые) : Расширьте ранее сгенерированное видео, сославшись на его
previous_interaction_id. Загруженные видео : Предоставьте загруженный видеофайл (через Files API) вместе с запросом на добавление расширения.
Python
import base64
from google import genai
client = genai.Client()
# Upload your video using the Files API
video_file = client.files.upload(file="my_video.mp4")
# Extend the video using prompt-based extension
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "document", "uri": video_file.uri},
{"type": "text", "text": "Continue the scene."}
],
)
with open("extended.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Upload your video using the Files API
let videoFile = await ai.files.upload({
file: 'my_video.mp4',
});
while (videoFile.state === 'PROCESSING') {
await new Promise(r => setTimeout(r, 10000));
videoFile = await ai.files.get({ name: videoFile.name });
}
// Extend the video using prompt-based extension
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'document', uri: videoFile.uri },
{ type: 'text', text: 'Continue the scene.' }
],
});
if (interaction.output_video?.data) {
fs.writeFileSync('extended.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" -H "Content-Type: application/json" -d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "document", "uri": "'"$VIDEO_URI"'"},
{"type": "text", "text": "Continue the scene."}
]
}'
Расширение с использованием справочных материалов
В массиве input вы можете указать эталонные изображения вместе с подсказкой для добавления новых персонажей или элементов в расширенное видео:
Python
import base64
from google import genai
client = genai.Client()
# Upload base video and reference image using the Files API
video_file = client.files.upload(file="my_video.mp4")
character_img = client.files.upload(file="character.png")
# Extend the video while introducing the reference character
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "document", "uri": video_file.uri},
{"type": "document", "uri": character_img.uri},
{"type": "text", "text": "Extend this video: have the character shown in <IMAGE_REF_0> enter the scene and wave."}
],
)
with open("extended_with_character.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
JavaScript
import { GoogleGenAI } from '@google/genai';
import * as fs from 'fs';
const ai = new GoogleGenAI({});
// Upload base video and reference image using the Files API
let videoFile = await ai.files.upload({ file: 'my_video.mp4' });
let characterImg = await ai.files.upload({ file: 'character.png' });
while (videoFile.state === 'PROCESSING' || characterImg.state === 'PROCESSING') {
await new Promise(r => setTimeout(r, 10000));
videoFile = await ai.files.get({ name: videoFile.name });
characterImg = await ai.files.get({ name: characterImg.name });
}
// Extend the video while introducing the reference character
const interaction = await ai.interactions.create({
model: 'gemini-omni-1.1-flash',
input: [
{ type: 'document', uri: videoFile.uri },
{ type: 'document', uri: characterImg.uri },
{ type: 'text', text: 'Extend this video: have the character shown in <IMAGE_REF_0> enter the scene and wave.' }
],
});
if (interaction.output_video?.data) {
fs.writeFileSync('extended_with_character.mp4', Buffer.from(interaction.output_video.data, 'base64'));
}
ОТДЫХ
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$API_KEY" -H "Content-Type: application/json" -d '{
"model": "gemini-omni-1.1-flash",
"input": [
{"type": "document", "uri": "'$VIDEO_URI'"},
{"type": "document", "uri": "'$CHARACTER_IMG_URI'"},
{"type": "text", "text": "Extend this video: have the character shown in <IMAGE_REF_0> enter the scene and wave."}
]
}'
Ограничения и рекомендации по расширению
При расширении видеоматериалов следует учитывать следующие правила и ограничения:
- Диалоги в загруженных видео : В настоящее время нельзя продлить загруженное видео, в котором кто-то говорит, чтобы добавить дополнительные диалоги (это поддерживается, если персонаж молчит или если подсказка не добавляет диалоги).
- Многоходовое голосовое расширение : генерация диалогов или речи поддерживается при расширении ранее сгенерированных видеороликов с помощью многоходового расширения (
previous_interaction_id). - Расширение возможно только в конце клипа : добавление контента в конец видео ограничено только этим. Нельзя добавлять контент в начало клипа или расширять его середину.
- Ограничение по продолжительности : Длительность загружаемых видеороликов для расширения не должна превышать 10 секунд (за исключением случаев использования многоходового воспроизведения).
- Региональная доступность : В настоящее время функция расширения загруженных видеороликов недоступна для пользователей в Европейской экономической зоне (ЕЭЗ), Швейцарии и Великобритании (расширение видеороликов, созданных с помощью данной модели, поддерживается во всех доступных регионах).
Передовые методы
- Для больших видеофайлов используйте доставку по URI: для видео размером более 4 МБ (>720p, если доступно) используйте
delivery="uri"вresponse_format, чтобы избежать ограничений на размер полезной нагрузки. - Оптимизированная производительность: установите
background=false,store=falseиstream=falseдля более быстрой синхронной генерации унарных данных. Обратите внимание, что установкаstore=falseозначает, что сгенерированное видео не будет доступно для редактирования в последующих ходах с использованиемprevious_interaction_id. - Точность подсказок: подробности см. в разделе «Рекомендации по использованию подсказок» .
Ограничения
- Загрузка и редактирование изображений, содержащих изображения несовершеннолетних, не поддерживается в Европейской экономической зоне, Швейцарии и Соединенном Королевстве.
- Загрузка и редактирование изображений, содержащих изображения узнаваемых людей, не поддерживается.
- В настоящее время редактирование или расширение загруженных видеороликов недоступно для пользователей из Европейской экономической зоны (ЕЭЗ), Швейцарии и Великобритании (редактирование или расширение видеороликов, созданных с помощью модели, поддерживается).
- Видеоматериалы, используемые для редактирования и расширения, при загрузке должны быть не более 10 секунд (за исключением случаев расширения видео, созданных моделью в несколько этапов).
- Расширение видеофайла ограничивается добавлением его в конец; добавление в начало или расширение середины клипа не поддерживается.
- Нельзя продлить загруженное видео, в котором кто-то говорит, чтобы добавить дополнительные диалоги (персонажи могут оставаться безмолвными, или можно использовать многоходовое продление с помощью
previous_interaction_id). - Редактирование голоса не поддерживается.
- В текущей версии API загрузка аудиофайлов не поддерживается.
- Видеоролики лучше всего работают с изображениями; любой звук в видеоролике игнорируется. Видеоролики поддерживают максимум 3 клипа, каждый продолжительностью до 3 секунд.
- Использование ссылок или логических рассуждений на основе нескольких видеороликов не поддерживается. Попытка использования нескольких видеороликов может привести к снижению производительности модели или получению неожиданных результатов.
- Выделенная пропускная способность не поддерживается.
- Системные инструкции, температура,
top_p, стоп-последовательности и отрицательные подсказки не поддерживаются (вы можете вводить свои отрицания в обычную подсказку: например, "Не делайте X"). - Использование видео с YouTube в качестве источника медиаконтента не поддерживается.
Технические характеристики
- Все сгенерированные видеоролики содержат водяной знак SynthID, который невидим для зрителей, но может быть обнаружен программным способом для проверки происхождения.
- Время генерации видео зависит от его продолжительности, разрешения и текущей загрузки API. Более длинные видео с более высоким разрешением требуют больше времени для генерации.
- Omni применяет фильтры безопасности контента как к запросам ввода, так и к сгенерированному видео (которые различаются в зависимости от региона). Запросы, нарушающие правила использования, блокируются.
- Английский язык (EN) полностью поддерживается, но другие языки не тестировались, поэтому они могут работать, но результаты могут различаться.
Руководство по использованию подсказок Gemini Omni Flash
В этом разделе приведены советы и примеры того, как эффективно запускать функцию Gemini Omni Flash.
Отдельная сцена
По умолчанию Omni Flash попытается создать видео из нескольких разных кадров. Он попытается выстроить интересный сюжет на основе заданного задания.
Если вам необходимо, чтобы выходное видео содержало одну сцену, вы должны запросить это:
- В единой непрерывной сцене
- В одном непрерывном кадре
- Без монтажных склеек
Например:
Continuous, unbroken handheld shot of a fluffy tabby cat sitting on a sunny windowsill, looking out into a leafy garden. The cat's tail twitches slowly, and its ears rotate slightly toward ambient noises. Sunbeams illuminate dust motes in the air. Sound design: Gentle breeze, distant bird chirps. No dialogue.
Удаление нежелательных элементов
Если сгенерированное видео содержит нежелательные элементы, добавьте простые негативные подсказки, чтобы их избежать:
- Диалог отсутствует
- Без украшений
- Без дополнительных звуковых эффектов
Подсказки для редактирования
Для видеомонтажа лучше всего подходят простые подсказки. Слишком подробные подсказки могут привести к непреднамеренным изменениям.
Ниже приведены еще несколько примеров простых подсказок для редактирования:
- Сделайте это видео аниме
- Наденьте на этого человека модную шляпу.
- Измените освещение, чтобы оно стало более драматичным.
- Измените текст на вывеске на "Omni Flash".
При редактировании определенного элемента видео добавьте фразу "Keep everything else the same" чтобы сохранить визуальную согласованность.
Ниже приведены несколько примеров, демонстрирующих применение этой техники:
- Избегайте:
In the video of the man sitting on the sofa, please add a small black cat that runs from the right side of the screen, jumps onto his lap, and then he starts to stroke its head while looking down.- Упростите:
Add a cat that jumps onto his lap, he begins to pet it. Keep everything else the same.
- Упростите:
- Избегайте:
Please remove the cell phone that the person is holding in their hand and fill in the background so it looks like they are just holding their hand empty.- Упростите:
Make the phone invisible. Keep everything else the same.
- Упростите:
Ввод аудиосообщения
По умолчанию модель попытается сгенерировать подходящую звуковую дорожку для видео. Это не всегда может соответствовать вашим потребностям. Вы можете использовать подсказку, чтобы описать тип нужного вам звука. Это особенно важно, если вы хотите добавить музыку в видео:
- Включите спокойную фоновую музыку.
- Видеоклип отличается энергичным техно-ритмом.
- Звук представляет собой тихую, дребезжащую радиопередачу на заднем плане, в которой играет песня.
Временные события
Вы можете задавать события в определенные моменты видео, точный синтаксис не требуется, и вы можете использовать естественный язык. Это особенно полезно при создании собственных монтажных склеек, ритмичных или быстрых последовательностей. Примеры смотрите ниже:
- Через 3 секунды на сцену выходит женщина.
- На 5-й секунде в фоновом режиме начинает звучать припев.
- Каждые 2 секунды происходит перерисовка на новый кадр.
- В режиме быстрой съемки каждые полсекунды (12 кадров при 24 кадрах в секунду) происходит смена локации.
Также можно использовать синтаксис временного кода:
[0-3s] A person is walking
[3-6s] They stop and turn around
[6-10s] They start running
Мета-подсказка
Вы можете попросить Gemini Omni Flash обратить внимание на общие качества или принципы создания видео:
- Уделите внимание мельчайшим деталям, выражению лица и моменту, чтобы создать очень насыщенную, детализированную, но при этом совершенно естественную сцену.
- Будьте предельно внимательны в описании персонажей и обстановки. Применяйте принципы дизайна костюмов к персонажам. Подробно описывайте людей, предметы и объекты в сцене.
- Включите в фон множество подходящих деталей, чтобы сцена выглядела реалистично и естественно.
- Создайте видеоролик в быстром темпе, в котором каждые 1 секунду будет демонстрироваться новый редкий
[thing], используйте бодрую музыку и добавьте текстовое описание предмета.
Текст в видео
Вы можете запросить добавление текста в видео, и Gemini Omni отобразит его корректно и читаемо. Если в вашем видео будет присутствовать текст, даже в фоновых элементах, это поможет определить, что именно он должен говорить.
- На экране по одному слову: «did, you, know, that, Omni, can, do, awesome, text?» Каждое слово появляется на 1 секунду с разным стилем анимации. Без диалога.
- На улице висит табличка с надписью: «Это поколение ИИ от Omni», на витрине магазина написано: «Всё, что вам нужно в ИИ», а рядом стоит машина с номерным знаком: «OMNI1.1».
Подсказки для продления видео
С помощью Gemini Omni 1.1 Flash вы можете продлевать видео с помощью подсказок типа "Extend this video" или "The scene continues" . Вы можете продлевать видео на 10 секунд, до общей продолжительности в 40 секунд.
Omni создает расширение, которое обеспечивает согласованность видео, движения, персонажей и звука, используя последние 10 секунд исходного видео в качестве контекста. Некоторые из последних кадров входного видео будут отредактированы для обеспечения плавного перехода.
При расширении все советы по использованию Omni, приведенные в этом руководстве, остаются в силе:
- Опишите звуковое сопровождение в вашей расширенной сцене, особенно если вам нужно его изменить:
"The music continues into the chorus" - Опишите, продолжается ли сцена или происходит переход к новой сцене (возможно, с теми же персонажами):
"Show the same characters in the next scene" - При расширении кода используйте изображения и видео в качестве справочных материалов, чтобы обеспечить точность результатов или ввести новых персонажей:
"The person shown in the reference image enters the scene","The dog in the reference video <VIDEO_REF_0> jumps onto the sofa" - При использовании временных меток или синтаксиса таймкода 0s обозначает начало расширенной части видео. При расширении 10-секундного видео, сцена, обрезанная в этом запросе, произойдет через 12 секунд:
"After 2s cut to a new scene with the same characters"
Использование тегов в подсказках для установки ролей изображений и видео.
Вы можете использовать теги для привязки загруженных медиафайлов к определенным ролям генерации. Это позволяет указать, является ли каждое изображение или видео начальным кадром, конечным кадром или эталонным.
1. Простые теги (рекомендуется)
В простых случаях, когда роли медиаконтента ясны из подсказки, вы можете напрямую привязать изображения и видео к ролям:
-
<FIRST_FRAME>: используйте изображение в качестве начального кадра видео, например:<FIRST_FRAME> a woman is walking -
<LAST_FRAME>: используйте изображение в качестве последнего кадра видео для перехода. Необходимо использовать с<FIRST_FRAME>, например:<FIRST_FRAME> <LAST_FRAME> a woman is walking -
<IMAGE_REF_N>: используйте изображение в качестве эталона, например:in the style of <IMAGE_REF_0> a woman <IMAGE_REF_1> is walking(объединяет эталон стиля с первого изображения и эталон объекта со второго изображения). Ссылки на изображения начинаются с 0. -
<VIDEO_REF_N>: используйте видео в качестве ссылки на персонажа или объект, например:the person in <VIDEO_REF_0> is playing the violin. Ссылки на видео также начинаются с 0.
Ниже приведён пример с 6 эталонными изображениями:
[0-3s] A studio fashion sequence. Starting with woman <IMAGE_REF_0>, she is holding <IMAGE_REF_1>
[3-6s] Then we see the man <IMAGE_REF_2> holding <IMAGE_REF_3>
[6-10s] And finally another woman <IMAGE_REF_4> who is holding <IMAGE_REF_5> while walking.
2. Указание источников и ссылок.
В более сложных случаях с несколькими источниками мультимедиа и несколькими ролями можно использовать явные префиксные теги в сочетании с инструкциями на естественном языке. Эти источники и ссылки следует указывать в начале командной строки.
-
[# Sources <FIRST_FRAME>@Image1]будут использовать первое изображение в качестве начального кадра. -
[# Sources <FIRST_FRAME>@Image1 <LAST_FRAME>@Image2]будут использовать первое изображение в качестве начального кадра, а второе — в качестве конечного. -
[# Sources <FIRST_FRAME>@Image1 <LAST_FRAME>@Image1]будет использовать первое изображение как в качестве первого, так и в качестве последнего кадра, создавая зацикленное видео. -
[# Sources <FIRST_FRAME>@Image1] [# References <IMAGE_REF_0>@Image2]будут использовать первое изображение в качестве начального кадра, а второе — в качестве эталонного. -
[# Sources <VIDEO_0>@Video1]будут использовать это видео в качестве основного исходного видео для редактирования или изменения. -
[# Sources <PREVIOUS_VIDEO>@Video1]будут использовать видео из предыдущего хода для расширения. -
[# References <IMAGE_REF_0>@Image1]будет использовать первое изображение в качестве эталонного. -
[# References <IMAGE_REF_1>@Image2]будет использовать второе изображение в качестве эталона. -
[# References <IMAGE_REF_0>@Image1 <IMAGE_REF_1>@Image2]будет использовать оба изображения в качестве ссылок. -
[# References <VIDEO_REF_0>@Video1]будет использовать первое видео в качестве эталона. -
[# References <IMAGE_REF_0>@Image1 <VIDEO_REF_0>@Video1]будет использовать в качестве ссылки как изображение, так и видео.
Добавьте пояснительные указания в конце вашего задания:
- В качестве отправной точки:
"Use this image as the starting frame." - Для зацикленного видео с начальными и конечными кадрами:
"Use this image as the first frame and the last frame." - Для эталонных изображений:
"Use the given image(s) as references for video generation. The images should not be used as literal initial frames." - Для использования в качестве справочных материалов:
"Use the given video(s) as references. Do not use them as a source for video editing."
Несколько примеров запросов с объявлениями источника и ссылок:
Исходный кадр в сочетании с эталонным изображением:
[# Sources <FIRST_FRAME>@Image1] [# References <IMAGE_REF_0>@Image2] a woman <IMAGE_REF_0> is walking. Use Image1 as the starting frame. Use Image2 as a reference for the video generation.
Видеоролик с изображением персонажа в сочетании с эталонным изображением объекта:
[# References <IMAGE_REF_0>@Image1 <VIDEO_REF_0>@Video1] The woman in <VIDEO_REF_0> is playing the violin shown in <IMAGE_REF_0>. Use Video1 as a character reference and Image1 as an object reference.
Что дальше?
- Начните работу с Gemini Omni Flash, поэкспериментировав в Omni Quickstart Colab .
- Узнайте, как писать еще более качественные задания для подготовки к экзамену, с помощью нашего вводного курса по разработке заданий .