Переход с Sora 2 на Veo 3.1 требует переноса запросов, обработки фоновых операций и проверки готовых роликов. Замены названия модели недостаточно: собственные API OpenAI и Google используют разные методы и ответы.
По состоянию на 5 сентября 2026 года отключение Videos API, sora-2 и sora-2-pro назначено на 24 сентября 2026 года. 24 марта было датой уведомления, а не отключения. В таблице OpenAI замена не указана; Veo 3.1 — вариант для самостоятельной оценки, а не рекомендованный OpenAI преемник. Это расписание относится к API и само по себе не описывает доступность пользовательского приложения Sora. Источник: график прекращения поддержки OpenAI.
Для русскоязычной команды есть ещё одно предварительное условие: Россия отсутствует в текущем списке регионов Gemini API. Русская версия документации не подтверждает возможность прямого доступа из РФ. Примеры ниже предназначены для разрешённого доступа с настроенной оплатой; сначала проверьте регион и требования к аккаунту. Доступные регионы Gemini API.
Подойдёт ли Veo 3.1 вашему приложению
Перенос короткого ролика по текстовому описанию обычно проще, чем перенос длинной сцены с постоянным персонажем. Сначала сопоставьте функции, от которых зависит результат в вашем продукте.
| Что использует приложение | Что проверить при переходе |
|---|---|
| Короткий ролик по описанию | Veo 3.1 и Fast поддерживают 4, 6 и 8 секунд. Для 1080p и 4K требуется 8 секунд |
| Сцена на 16 или 20 секунд | Такие длительности есть в текущем руководстве Sora; в Veo нужна переработка сцены, монтаж или поддерживаемое продление |
| Вертикальная реклама | В Veo доступны 9:16 и 16:9. Выбирайте соотношение сторон отдельно от разрешения |
| Генерация из изображения | Исходное изображение задаёт первый кадр; для заданного окончания можно передать последний кадр вместе с первым |
| Постоянный предмет или персонаж | До трёх референсных изображений помогают задать содержание. Это не перенос идентификатора персонажа из Sora и не гарантия одинакового внешнего вида |
| Диалог и звуковое сопровождение | В этом интерфейсе Veo 3.1 звук генерируется вместе с видео. Русскую речь нужно оценивать отдельно |
| Выдача 60 кадров/с | В спецификации Veo 3.1 указаны 24 кадра/с; не обещайте пользователю 60 кадров/с как результат этого API |
Ограничения Google относятся к Veo 3.1 в Gemini API. Длительности Sora и работа с исходным кадром описаны в руководстве OpenAI по генерации видео. Наличие параметров по отдельности не означает, что их можно произвольно сочетать: например, референсные изображения в Veo требуют восьмисекундного ролика.
У Sora 2 Pro есть режимы 1920 × 1080 и 1080 × 1920. Поэтому сравнение «Sora ограничена 720p, а Veo даёт 4K» вводит в заблуждение. Практический вопрос другой: какое разрешение нужно на выходе, сколько длится сцена и сколько попыток потребуется, чтобы получить подходящий материал. Спецификации не определяют победителя по физике движения, работе камеры или стабильности персонажа.
Для миграции базовым вариантом может служить veo-3.1-generate-preview; для сравнения затрат — veo-3.1-fast-generate-preview. Названия содержат preview, и их следует хранить в конфигурации приложения, чтобы последующая смена версии не требовала переписывать бизнес-логику. Текущий статус модели приведён в руководстве Gemini API.
Что переносить из старой интеграции
Сохраните описание сцены, исходные изображения, требования к звуку и критерии приёмки. Идентификаторы заданий и служебные объекты остаются у прежнего провайдера.
Текстовое описание. Начните с прежнего задания и явно выделите действие, движение камеры, нужные звуки и реплики. Не меняйте одновременно модель и весь творческий замысел: иначе будет трудно понять причину отличий. Для сцены длиннее восьми секунд заранее определите, что должно происходить в каждом фрагменте.
Исходный кадр и референсы. В Sora поле input_reference задаёт начальный кадр. В Python SDK Google исходное изображение передаётся аргументом image, а конечный кадр — через last_frame в конфигурации. Для референсов используется отдельное поле reference_images. Это разные способы управления роликом, а не взаимозаменяемые названия одного поля. Примеры Google для изображений и кадров.
Готовые видео. Скачайте нужные результаты Sora в своё хранилище. Они останутся монтажными материалами, но обычный MP4 из Sora нельзя считать допустимым входом для функции продления Veo. Документированный режим работает с видео, сгенерированным Veo, добавляет по 7 секунд до 20 раз и ограничен 720p. Правила продления видео.
Учёт заданий. В собственной базе полезно оставить единый идентификатор пользовательской заявки и отдельно записывать провайдера, модель, идентификатор его операции, параметры, время отправки и путь к сохранённому файлу. Тогда повторная проверка состояния не создаст новую пользовательскую заявку, а смена провайдера не потеряет связь между заказом и результатом.
Вместо одного ответа — создание, ожидание и скачивание
В OpenAI запрос POST /v1/videos создаёт задание. Его состояния — queued, in_progress, completed, failed; состояние запрашивается через GET /v1/videos/{id}, а готовый MP4 скачивается через GET /v1/videos/{id}/content. Для уведомлений предусмотрены события video.completed и video.failed. Это отдельный видеоинтерфейс, а не chat.completions. Жизненный цикл задания OpenAI.
В Gemini API создание видео через REST выполняется методом predictLongRunning, а ответ содержит name — идентификатор операции. Приложение опрашивает эту операцию, проверяет завершение и ошибки, затем скачивает видео. В Python SDK соответствующие вызовы — models.generate_videos, operations.get и files.download. Асинхронные операции Veo.
При переносе удобно различать три события:
- Запрос принят: получен и сохранён идентификатор операции. Видео ещё нет.
- Генерация завершена: операция закончилась без ошибки и содержит видео. Файл ещё нужно получить.
- Результат доставлен: файл сохранён у вас, открывается и доступен пользователю.
HTTP 200 при создании операции не подтверждает доставку ролика. Аналогично done=True означает завершение операции, после которого всё ещё нужно проверить ошибку и наличие результата.

Пример на Python с повторным опросом той же операции
Ниже пример на основе официального SDK google-genai. Он создаёт восьмисекундный ролик 720p или продолжает опрос по сохранённому имени операции. Ключ GEMINI_API_KEY задайте через переменную окружения. Для Veo нужен платный уровень Gemini API; подписка в пользовательском приложении не заменяет настройку оплаты API. Тарифы Veo в Gemini API.
bashpython -m pip install -U google-genai
Сохраните код как migrate_veo.py. Пример использует вызовы из документации Google; пригодность ролика для вашей задачи проверяется после скачивания.
pythonimport argparse import time from pathlib import Path from google import genai from google.genai import types parser = argparse.ArgumentParser() mode = parser.add_mutually_exclusive_group(required=True) mode.add_argument("--create", action="store_true") mode.add_argument("--resume", metavar="OPERATION_NAME") args = parser.parse_args() client = genai.Client() if args.resume: operation = types.GenerateVideosOperation(name=args.resume) operation = client.operations.get(operation) else: operation = client.models.generate_videos( model="veo-3.1-fast-generate-preview", prompt=( "A ceramic teapot on a wooden table. " "The camera slowly moves closer as steam rises. " "Quiet room ambience, no dialogue." ), config=types.GenerateVideosConfig( aspect_ratio="16:9", resolution="720p", duration_seconds=8, ), ) print("Операция:", operation.name, flush=True) Path("veo-operation.txt").write_text( operation.name, encoding="utf-8" ) # Это предел ожидания данного процесса, а не отмена генерации. deadline = time.monotonic() + 20 * 60 while not operation.done: if time.monotonic() >= deadline: raise TimeoutError( f"Продолжите опрос с --resume {operation.name}" ) time.sleep(10) operation = client.operations.get(operation) if operation.error: raise RuntimeError(f"Ошибка генерации: {operation.error}") response = operation.response if not response or not response.generated_videos: raise RuntimeError("Операция завершена, но видео не получено") video = response.generated_videos[0].video output = Path("veo-result.mp4") client.files.download(file=video, destination=str(output)) if not output.is_file() or output.stat().st_size == 0: raise RuntimeError("Видеофайл не сохранён или пуст") print("Файл сохранён:", output.resolve())
Первый запуск: python migrate_veo.py --create. Если ожидание прервалось, используйте python migrate_veo.py --resume 'ИМЯ_ОПЕРАЦИИ', подставив значение из veo-operation.txt. Повторный --create отправит новое платное задание. Лимит в 20 минут в примере выбран для локального процесса и не является обещанием времени генерации.
Для сервера замените один текстовый файл записью в базе для каждой заявки, а опрос вынесите в фоновый обработчик. Если ответ на создание потерян до получения идентификатора, не отправляйте автоматически такой же запрос: неизвестно, было ли первое задание принято. Если временная ошибка возникла при опросе уже известной операции, повторяйте опрос этой операции с паузой, а не создание видео.
Проверка размера файла в примере отсеивает пустой результат, но не доказывает, что MP4 воспроизводится. До выдачи пользователю проверьте его медиапарсером и проигрывателем. Видео на серверах Google хранится два дня, поэтому ссылку на результат нельзя использовать как постоянное хранилище. Ограничения и срок хранения Veo.
Сравнение стоимости: считайте подходящие ролики
Тарифы ниже проверены 5 сентября 2026 года и указаны в долларах США за генерацию через собственные API провайдеров. Это не цены подписок, Vertex AI или посредников. Стоимость восьмисекундного ролика рассчитана умножением тарифа на 8.
| Модель и разрешение | За секунду | За 8 секунд |
|---|---|---|
| Sora 2, 1280 × 720 или 720 × 1280 | 0,10 $ | 0,80 $ |
| Sora 2 Pro, 1280 × 720 или 720 × 1280 | 0,30 $ | 2,40 $ |
| Sora 2 Pro, 1792 × 1024 или 1024 × 1792 | 0,50 $ | 4,00 $ |
| Sora 2 Pro, 1920 × 1080 или 1080 × 1920 | 0,70 $ | 5,60 $ |
| Veo 3.1, 720p или 1080p | 0,40 $ | 3,20 $ |
| Veo 3.1, 4K | 0,60 $ | 4,80 $ |
| Veo 3.1 Fast, 720p | 0,10 $ | 0,80 $ |
| Veo 3.1 Fast, 1080p | 0,12 $ | 0,96 $ |
| Veo 3.1 Fast, 4K | 0,30 $ | 2,40 $ |
Источники тарифов: Sora 2, Sora 2 Pro, Veo 3.1 и Fast. Тариф Pro 0,50 $ относится к указанным промежуточным размерам, а не к полному 1920 × 1080. Все перечисленные варианты Veo включают звук.
При одинаковой длительности Veo 3.1 Fast 720p стоит столько же, сколько базовая Sora 2. Стандартная Veo 3.1 720p стоит вчетверо дороже базовой Sora 2 за секунду. При этом сравнительно низкая цена Fast 1080p ещё не доказывает экономию для конкретной команды: если результат чаще приходится переделывать, преимущество уменьшается.
В тарифах Google указана оплата только успешных генераций. Успешно созданный ролик, который не понравился редактору или заказчику, всё равно относится к расходам. Поэтому для сравнения используйте формулу:
“Стоимость подходящего ролика = расходы на генерацию всех вариантов / число принятых роликов.
Например, 100 успешно созданных восьмисекундных роликов Fast 720p стоят 80 $. Если пригодны 40 из них, генерация одного принятого ролика обходится в 2 $. Это расчёт с условной долей приёмки, а не измеренный результат Veo. Для бюджета готового продукта отдельно добавьте хранение, передачу файлов, монтаж и работу с озвучкой.

Как проверить перенос перед переключением пользователей
Соберите небольшой набор реальных задач из своего приложения: типичный удачный запрос, сложное движение, исходный кадр с важными деталями, вертикальный ролик, сцена с репликой. Для каждого заранее запишите, что делает результат пригодным: нужное действие, сохранённый предмет, разборчивая речь, длительность и формат файла.
Проверять следует два независимых результата. Техническая проверка отвечает на вопрос, дошёл ли запрос до воспроизводимого файла, в том числе после перезапуска фонового обработчика. Проверка содержания отвечает на вопрос, подходит ли ролик пользователю. Смешав их, легко принять рост количества завершённых операций за улучшение качества.
Для русской речи отдельно прослушайте произношение, ударения, имена, числа и соответствие реплик. Google указывает полную поддержку английского, а для других языков — отсутствие оценки и возможные различия в результатах. Фильтрация аудио также может помешать выдаче видео. Поэтому русская озвучка не должна проходить приёмку только на основании наличия звуковой дорожки. Языковые и аудиоограничения Veo.
Практический порядок переключения:
- Добавьте обработчик Veo за конфигурационным переключателем и проверьте сохранение идентификаторов операций.
- Выполните выбранные задания и сравните пригодность, время до сохранённого файла и расходы на принятый результат.
- Направьте на Veo ограниченную часть новых заявок, сохранив наблюдение за ошибками и скачиванием.
- Прекратите создавать новые задания Sora с запасом до 24 сентября; завершите обработку оставшихся и сохраните нужные материалы.
- Уберите зависимость от Sora из обязательного пути. Возврат к ней после даты отключения не может служить планом восстановления.
Если требования к длине сцены, доступу или содержанию не выполняются, сохраните конкретную причину отказа и предусмотрите другой способ выполнения заказа. Перенос закончен тогда, когда приложение стабильно выдаёт подходящие файлы с понятной стоимостью, а оставшиеся ограничения учтены в его интерфейсе.
А если Sora вызывалась через посредника
Сначала установите, чей API использует приложение. Собственный /v1/videos OpenAI, интерфейс Google и видеоинтерфейс посредника могут иметь разные поля, состояния, способы загрузки и условия оплаты. Совпадающее имя модели или похожая авторизация не подтверждают совместимость.
В документации LaoZhang описан асинхронный Video Generation API с Veo 3.1. При выборе этого способа подключения сверяйте создание задания, проверку состояния и получение файла с документацией самого сервиса. Тарифы Google из таблицы выше не подтверждают цену посредника, а пример для Gemini API не следует переносить туда простой заменой адреса.
Если требуется отдельное описание сроков и затронутых интерфейсов OpenAI, оно вынесено в материал о прекращении поддержки Sora 2 API. Для практического перехода начните с одного типичного задания: перенесите его параметры, дождитесь завершения, сохраните MP4 и оцените пригодность результата до расширения нагрузки.



