Обзор Sora AI
Sora — это революционная модель искусственного интеллекта от OpenAI, способная создавать реалистичные и творческие видео по текстовому описанию. Модель понимает не только объекты и действия, но и физические законы, эмоции и сложные сцены.
Реалистичная генерация
Создание видео длительностью до 60 секунд с высокой детализацией и физической правдоподобностью.
Расширение видео
Продление существующих видео или создание бесшовных продолжений.
Стилизация
Создание видео в различных стилях: от фотореализма до анимации и художественных фильмов.
Возможности модели
Технические характеристики
- Длительность видео — до 60 секунд
- Разрешение — до 1920x1080 (Full HD)
- Частота кадров — 24, 30 или 60 FPS
- Форматы вывода — MP4, WebM, GIF
- Поддержка звука — генерация синхронизированного аудио
- Мультиязычность — понимание промптов на 50+ языках
Типы поддерживаемого контента
| Тип контента | Примеры | Сложность |
|---|---|---|
| Простые сцены | Летящая птица, идущий человек | Низкая |
| Сложные сцены | Городской трафик, природные явления | Средняя |
| Художественные стили | Мультфильм, масляная живопись | Высокая |
| Эмоциональные сцены | Встреча друзей, драматический момент | Очень высокая |
Быстрый старт
Получение доступа
Зарегистрируйтесь на OpenAI Platform и подайте заявку на доступ к Sora API в разделе Beta Features.
Установка OpenAI SDK
Установите официальный клиент OpenAI:
pip install openai
npm install openai
Создание первого видео
Сгенерируйте ваше первое видео с помощью Sora API:
from openai import OpenAI
import os
# Инициализация клиента
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Генерация видео
response = client.video.generations.create(
model="sora-1.0",
prompt="Красивый закат над океаном, волны мягко накатывают на берег, в небе летают чайки, кинематографичное качество",
duration_seconds=10,
resolution="1080p",
fps=30,
style="cinematic"
)
# Сохранение видео
video_url = response.data[0].url
print(f"Видео создано: {video_url}")
# Скачивание видео
import requests
video_data = requests.get(video_url).content
with open("sunset_ocean.mp4", "wb") as f:
f.write(video_data)
import OpenAI from 'openai';
import fs from 'fs';
import fetch from 'node-fetch';
// Инициализация клиента
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
// Генерация видео
async function generateVideo() {
try {
const response = await openai.video.generations.create({
model: "sora-1.0",
prompt: "Красивый закат над океаном, волны мягко накатывают на берег",
duration_seconds: 10,
resolution: "1080p",
fps: 30,
style: "cinematic"
});
const videoUrl = response.data[0].url;
console.log(`Видео создано: ${videoUrl}`);
// Скачивание видео
const videoResponse = await fetch(videoUrl);
const buffer = await videoResponse.arrayBuffer();
fs.writeFileSync("sunset_ocean.mp4", Buffer.from(buffer));
} catch (error) {
console.error("Ошибка:", error);
}
}
generateVideo();
API Reference
Создание видео
POST https://api.openai.com/v1/video/generations
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| model | string | Да | Идентификатор модели (sora-1.0) |
| prompt | string | Да | Текстовое описание видео (до 4000 символов) |
| duration_seconds | integer | Нет | Длительность видео в секундах (1-60) |
| resolution | string | Нет | Разрешение (360p, 720p, 1080p) |
| fps | integer | Нет | Частота кадров (24, 30, 60) |
| style | string | Нет | Стиль видео (реалистичный, анимация и т.д.) |
| aspect_ratio | string | Нет | Соотношение сторон (16:9, 9:16, 1:1, 4:3) |
| seed | integer | Нет | Seed для воспроизводимости результата |
Пример ответа
{
"id": "vid_abc123",
"object": "video",
"created": 1677652288,
"model": "sora-1.0",
"data": [
{
"url": "https://cdn.openai.com/video/vid_abc123.mp4",
"duration_seconds": 10,
"resolution": "1080p",
"fps": 30,
"size_bytes": 5242880,
"prompt": "Красивый закат над океаном..."
}
],
"usage": {
"prompt_tokens": 45,
"total_tokens": 45,
"video_seconds": 10
}
}
Параметры генерации
Разрешение
Доступные значения: 360p, 720p, 1080p
По умолчанию: 720p
Рекомендации: Используйте 360p для быстрого прототипирования, 1080p для финального качества.
Частота кадров
Доступные значения: 24, 30, 60 FPS
По умолчанию: 30
Рекомендации: 24 FPS для кинематографичного вида, 60 FPS для плавного движения.
Соотношение сторон
Доступные значения: 16:9, 9:16, 1:1, 4:3
По умолчанию: 16:9
Рекомендации: 9:16 для вертикального видео (Stories/Reels), 1:1 для квадратного.
Стиль
Доступные значения: realistic, cinematic, animated, oil-painting, watercolor, pixel-art
По умолчанию: realistic
Рекомендации: Указывайте стиль явно для более предсказуемых результатов.
Продвинутые параметры
response = client.video.generations.create(
model="sora-1.0",
prompt="Робот читает книгу в библиотеке будущего, мягкий свет из окна",
duration_seconds=15,
resolution="1080p",
fps=24,
aspect_ratio="16:9",
style="cinematic",
negative_prompt="размыто, низкое качество, артефакты",
guidance_scale=7.5,
seed=42,
num_inference_steps=50
)
Продвинутые параметры:
- negative_prompt — что исключить из видео
- guidance_scale — как сильно следовать промпту (3-15)
- num_inference_steps — количество шагов генерации (20-100)
- temperature — случайность результата (0.1-2.0)
Примеры кода
Пример 1: Создание анимированного видео
from openai import OpenAI
import os
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def generate_animated_scene():
"""Генерация анимированной сцены"""
prompt = """
Мультфильм стиля Studio Ghibli:
Маленький лесной дух летает через волшебный лес,
светлячки светятся вокруг, магические растения шевелятся,
мягкие пастельные цвета, сказочная атмосфера.
"""
response = client.video.generations.create(
model="sora-1.0",
prompt=prompt.strip(),
duration_seconds=8,
resolution="720p",
fps=24,
style="animated",
aspect_ratio="16:9",
guidance_scale=8.0
)
return response.data[0].url
# Использование
video_url = generate_animated_scene()
print(f"Анимированное видео создано: {video_url}")
Пример 2: Пакетная генерация видео
import asyncio
from openai import AsyncOpenAI
import os
client = AsyncOpenAI(api_key=os.getenv("OPENAI_API_KEY"))
async def generate_multiple_videos(prompts):
"""Параллельная генерация нескольких видео"""
tasks = []
for prompt in prompts:
task = client.video.generations.create(
model="sora-1.0",
prompt=prompt,
duration_seconds=5,
resolution="720p"
)
tasks.append(task)
# Параллельное выполнение
results = await asyncio.gather(*tasks, return_exceptions=True)
urls = []
for i, result in enumerate(results):
if isinstance(result, Exception):
print(f"Ошибка для промпта {i}: {result}")
else:
urls.append(result.data[0].url)
print(f"Видео {i} создано")
return urls
# Пример использования
prompts = [
"Кошка играет с клубком ниток в солнечной комнате",
"Дождь на оконном стекле, капли стекают",
"Город ночью с высоты птичьего полета, огни машин"
]
# Запуск асинхронной функции
urls = asyncio.run(generate_multiple_videos(prompts))
print(f"Создано видео: {len(urls)}")
Пример 3: Расширение существующего видео
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
async function extendVideo(videoFile, direction, seconds) {
/**
* Расширение существующего видео
* @param {File} videoFile - Исходное видео
* @param {string} direction - Направление (start/end)
* @param {number} seconds - Сколько секунд добавить
*/
// Загрузка видео
const videoData = await videoFile.arrayBuffer();
const response = await openai.video.edits.create({
model: "sora-1.0",
video: videoData,
direction: direction,
extend_seconds: seconds,
prompt: "Плавное продолжение сцены, сохранение стиля и контекста"
});
return response.data[0].url;
}
// Пример использования
const videoInput = document.getElementById('video-input');
videoInput.addEventListener('change', async (e) => {
const file = e.target.files[0];
if (file) {
try {
const extendedUrl = await extendVideo(file, 'end', 5);
console.log('Расширенное видео:', extendedUrl);
} catch (error) {
console.error('Ошибка расширения видео:', error);
}
}
});
Лучшие практики
Оптимизация промптов
- Будьте конкретны — "человек в красной куртке идет по улице" лучше чем "человек идет"
- Указывайте стиль — "в стиле киберпанк", "как аниме Studio Ghibli"
- Добавляйте детали — освещение, время суток, погода, эмоции
- Используйте negative_prompt — исключайте нежелательные элементы
- Тестируйте с короткими видео — начинайте с 3-5 секунд для отладки
Обработка ошибок и повторные попытки
import time
from openai import OpenAI, RateLimitError, APIError
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def generate_video_with_retry(prompt, max_retries=3):
"""Генерация видео с повторными попытками"""
for attempt in range(max_retries):
try:
response = client.video.generations.create(
model="sora-1.0",
prompt=prompt,
duration_seconds=10,
resolution="720p"
)
return response.data[0].url
except RateLimitError:
wait_time = 2 ** attempt # Экспоненциальная задержка
print(f"Лимит запросов. Ждем {wait_time} секунд...")
time.sleep(wait_time)
except APIError as e:
if e.status_code == 500:
print("Ошибка сервера. Повторяем...")
time.sleep(1)
continue
else:
raise e
except Exception as e:
print(f"Неожиданная ошибка: {e}")
if attempt == max_retries - 1:
raise e
raise Exception("Не удалось создать видео после всех попыток")
# Использование
try:
video_url = generate_video_with_retry(
"Тигр идет по снежному лесу, красивые снежинки падают, зима"
)
print(f"Успешно создано: {video_url}")
except Exception as e:
print(f"Ошибка создания видео: {e}")
Стоимость и оптимизация
| Разрешение | Стоимость за секунду | 10 секунд | 60 секунд |
|---|---|---|---|
| 360p | $0.002 | $0.02 | $0.12 |
| 720p | $0.005 | $0.05 | $0.30 |
| 1080p | $0.01 | $0.10 | $0.60 |
Частые вопросы (FAQ)
Вопрос: Сколько времени занимает генерация видео?
Ответ: Время генерации зависит от длины видео и разрешения. 10-секундное видео в 720p обычно генерируется за 1-2 минуты.
Вопрос: Можно ли коммерчески использовать сгенерированные видео?
Ответ: Да, согласно условиям использования OpenAI, вы можете коммерчески использовать сгенерированный контент, но должны соблюдать политику допустимого использования.
Вопрос: Как контролировать последовательность кадров?
Ответ: Используйте параметр seed для воспроизводимости результатов. Одинаковый seed и промпт дадут одинаковое видео.
Вопрос: Поддерживает ли Sora генерацию лиц известных людей?
Ответ: Нет, Sora имеет ограничения на генерацию узнаваемых лиц известных людей для предотвращения misuse.
Вопрос: Можно ли генерировать видео с текстом или логотипами?
Ответ: Да, но для лучших результатов явно указывайте это в промпте: "видео с текстом 'Открытие' в центре экрана" или "логотип компании в правом нижнем углу".
Вопрос: Есть ли ограничения на контент?
Ответ: Да, Sora следует политике допустимого использования OpenAI, запрещающей генерацию насильственного, взрослого, вредоносного или дезинформационного контента.