# Генерация видео Veo

Источник: https://docs.aicentos.com/ru/veo-video

Language: ru

> Вызов моделей генерации видео Google Veo через aicentos — текст→видео, изображение→видео, первый и последний кадр, референс-изображения

Статья для разработчиков: как вызывать модели генерации видео Google Veo через aicentos. API совместим с OpenAI Videos API, поэтому при подключении канала достаточно указать тип `openai`.

## Возможности моделей

Тарификация — по длительности сгенерированного видео (в секундах). Актуальные цены смотрите в консоли aicentos; итоговое списание определяется фактическими записями системы.

### Официальные возможности и поддержка в aicentos

| Модель                          | Длительность (с) | Разрешения      | Соотношение сторон | Аудио          | Примечания                                                                                                                                         |
| ------------------------------- | ---------------- | --------------- | ------------------ | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `veo-3.1-generate-preview`      | 4, 6, 8          | 720p, 1080p, 4k | 16:9, 9:16         | нативное аудио | Для 1080p и 4k — только 8 секунд; при использовании референс-изображений, первого/последнего кадра и других картинок также рекомендуется 8 секунд. |
| `veo-3.1-fast-generate-preview` | 4, 6, 8          | 720p, 1080p, 4k | 16:9, 9:16         | нативное аудио | Для 1080p и 4k — только 8 секунд; при использовании референс-изображений, первого/последнего кадра и других картинок также рекомендуется 8 секунд. |

Документация:

* [Генерация видео Veo в Google Gemini API](https://ai.google.dev/gemini-api/video)
* [Референс-изображения в Veo](https://ai.google.dev/gemini-api/video#reference_images)
* [Первый и последний кадр в Veo](https://ai.google.dev/gemini-api/video#first_and_last_frame)
* [Соотношение сторон в Veo](https://ai.google.dev/gemini-api/video#aspect_ratio)

### Соотношение сторон

| Модель                          | 16:9 альбомное | 9:16 портретное | По умолчанию | Рекомендации                                                |
| ------------------------------- | -------------- | --------------- | ------------ | ----------------------------------------------------------- |
| `veo-3.1-generate-preview`      | поддерживается | поддерживается  | 16:9         | Для 4K — только 8 секунд; расширение видео пока недоступно. |
| `veo-3.1-fast-generate-preview` | поддерживается | поддерживается  | 16:9         | Для 4K — только 8 секунд; расширение видео пока недоступно. |

Соотношение сторон можно задать в запросе через `metadata.aspectRatio` или поле формы `aspectRatio`:

```bash
{
  "metadata": {
    "aspectRatio": "9:16"
  }
}
```

Если `aspectRatio` не передан явно, система сначала выводит его из `size`: например, `1280x720` → 16:9, `720x1280` → 9:16. Если не передан и `size`, апстрим по умолчанию использует 16:9.

### Аудио

| Модель                          | Аудио (официально) | Поддержка generateAudio | Рекомендации                                                   |
| ------------------------------- | ------------------ | ----------------------- | -------------------------------------------------------------- |
| `veo-3.1-generate-preview`      | нативное аудио     | не поддерживается       | Не передавайте `generateAudio`; нужные звуки опишите в prompt. |
| `veo-3.1-fast-generate-preview` | нативное аудио     | не поддерживается       | Не передавайте `generateAudio`; нужные звуки опишите в prompt. |

Модели серии Veo 3.1 генерируют звук нативно, но в текущей спецификации Veo в Gemini API параметр `generateAudio` не вынесен в управляемые. Если передать это поле, апстрим может вернуть `INVALID_ARGUMENT`.

Чтобы управлять аудиосодержимым, опишите в prompt диалоги, окружающие звуки, эффекты или стиль музыки, например:

```bash
Маяк на морском берегу в сумерках, волны бьются о камни, вдали глухой шум ветра и крики чаек, кинематографичный свет, стабильная камера
```

## Работа с изображениями на входе

| Возможность                                 | Официально в Google Veo                                       | Поддержка в aicentos   | Примечания                                                                                                                            |
| ------------------------------------------- | ------------------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Видео из одного начального изображения      | поддерживается                                                | поддерживается         | Загрузите 1 изображение через `input_reference` — оно станет стартовым кадром видео.                                                  |
| Первый/последний кадр / промежуточные кадры | в серии Veo 3.1 поддерживаются image + lastFrame              | поддерживается         | Первый кадр — `input_reference`, последний — `last_frame` или `lastFrame`. Рекомендуется серия Veo 3.1 и 8 секунд.                    |
| Несколько референс-изображений              | в серии Veo 3.1 — до 3 referenceImages                        | поддерживается         | Загрузка через `reference_image`, `reference_images` или `referenceImages`; `referenceType` — только `asset`. Рекомендуется 8 секунд. |
| Расширение видео                            | Veo 3.1 / Fast поддерживают расширение существующих видео Veo | пока не поддерживается | В текущем API aicentos официальный вход video не открыт.                                                                              |

* Поддерживаются MIME-типы изображений `image/jpeg`, `image/png`, `image/webp`. Рекомендуется передавать файл или Base64, а не URL удалённого изображения.
* Внимание для режима референсов: апстрим в этом сценарии не поддерживает `negativePrompt` и может вернуть `Negative prompt is not supported in your use case`. Не передавайте `negativePrompt` в запросах с референсами.
* Техническая деталь: в Veo `predictLongRunning` в Gemini API изображения передаются через `bytesBase64Encoded` + `mimeType`, а не через `inlineData`, как в обычном `generateContent`. aicentos конвертирует изображения из multipart в формат, нужный апстриму.

## Правила тарификации

* Тарификация — по длительности видео, в секундах. Используйте значения из таблицы выше; произвольные значения передавать не рекомендуется.
* Если длительность видео в запросе не указана, по умолчанию тарифицируется 8 секунд.
* Приоритет определения длительности: `metadata.durationSeconds` > `duration` > `seconds` > 8 секунд по умолчанию.
* Приоритет определения разрешения: `metadata.resolution` > `size` > 720p по умолчанию.
* 720p / 1080p / 4K тарифицируются по одинаковым правилам, надбавки за разрешение нет.
* `aspectRatio` влияет только на ориентацию кадра и не тарифицируется отдельно.
* Для 4K доступно только 8 секунд.
* Актуальные цены — в консоли aicentos.

## Эндпоинты

Сейчас рекомендуются эти 3 эндпоинта:

| Назначение            | Метод | Путь                           |
| --------------------- | ----- | ------------------------------ |
| Создание задачи       | POST  | `/v1/videos`                   |
| Запрос статуса        | GET   | `/v1/videos/{task_id}`         |
| Скачивание результата | GET   | `/v1/videos/{task_id}/content` |

Если при запросе статуса нужна сразу и ссылка на результат, можно использовать:

| Назначение                           | Метод | Путь                              |
| ------------------------------------ | ----- | --------------------------------- |
| Запрос статуса и ссылки на результат | GET   | `/v1/video/generations/{task_id}` |

### Аутентификация

```bash
export BASE_URL="https://aicentos.com"
export AICENTOS_API_KEY="sk-xxxxxx"
```

Все запросы включают:

```bash
-H "Authorization: Bearer $AICENTOS_API_KEY"
```

### Создание задачи «текст → видео»

```bash
curl -X POST "$BASE_URL/v1/videos" \
  -H "Authorization: Bearer $AICENTOS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1-generate-preview",
    "prompt": "Маяк на морском берегу в сумерках, камера медленно наезжает, волны бьются о камни, кинематографичный свет, стабильная камера",
    "seconds": "8",
    "size": "1280x720",
    "metadata": {
      "negativePrompt": "blurry, watermark, distorted, low quality",
      "resolution": "720p",
      "aspectRatio": "16:9",
      "seed": 20260401
    }
  }'
```

Типичный ответ:

```bash
{
  "id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "veo-3.1-generate-preview",
  "status": "queued",
  "progress": 0,
  "created_at": 1775025000
}
```

### Создание задачи «изображение → видео» с первым кадром

Для image-to-video сейчас рекомендуется `multipart/form-data`; поле с первым кадром должно называться `input_reference`.

```bash
curl -X POST "$BASE_URL/v1/videos" \
  -H "Authorization: Bearer $AICENTOS_API_KEY" \
  -H "Accept: application/json" \
  -F "model=veo-3.1-generate-preview" \
  -F "prompt=Девушка на кадре поворачивает голову к камере, лёгкий ветер шевелит волосы, городские огни на фоне мягко размыты, камера плавно наезжает" \
  -F "input_reference=@./first-frame.png;type=image/png" \
  -F "seconds=8" \
  -F "size=1280x720" \
  -F "resolution=720p" \
  -F "aspectRatio=16:9" \
  -F "negativePrompt=blurry, watermark, deformed hands" \
  -F "seed=20260401"
```

### Создание задачи с первым и последним кадром

Для такой задачи нужны оба изображения: первый кадр — `input_reference`, последний — `last_frame` или `lastFrame`.

```bash
curl -X POST "$BASE_URL/v1/videos" \
  -H "Authorization: Bearer $AICENTOS_API_KEY" \
  -H "Accept: application/json" \
  -F "model=veo-3.1-generate-preview" \
  -F "prompt=Естественный переход от первого кадра с девушкой к последнему кадру с юношей, камера плавно движется, городские огни размыты, волосы и одежда слегка колышутся на ветру, переход выглядит натурально" \
  -F "input_reference=@./first-frame.png;type=image/png" \
  -F "last_frame=@./last-frame.png;type=image/png" \
  -F "seconds=8" \
  -F "size=1280x720" \
  -F "resolution=720p" \
  -F "aspectRatio=16:9" \
  -F "negativePrompt=blurry, watermark, distorted face, deformed hands" \
  -F "seed=20260402"
```

### Создание задачи с референс-изображениями

Задачи с референсами поддерживаются только в серии Veo 3.1, максимум 3 изображения, `referenceType` — только `asset`. Поля могут называться `reference_image`, `reference_images` или `referenceImages`. Не передавайте `negativePrompt` в таких задачах.

```bash
curl -X POST "$BASE_URL/v1/videos" \
  -H "Authorization: Bearer $AICENTOS_API_KEY" \
  -H "Accept: application/json" \
  -F "model=veo-3.1-generate-preview" \
  -F "prompt=Опираясь на внешность персонажей с двух картинок и атмосферу ночного города, сгенерируй кинематографичный уличный кадр с двумя людьми: камера плавно движется, фонари на фоне мягко размыты, герои естественно смотрят в объектив" \
  -F "reference_image=@./ref-1.png;type=image/png" \
  -F "reference_image=@./ref-2.png;type=image/png" \
  -F "reference_type=asset" \
  -F "seconds=8" \
  -F "size=1280x720" \
  -F "resolution=720p" \
  -F "aspectRatio=16:9" \
  -F "seed=20260403"
```

Поддерживается также JSON / Base64:

```bash
{
  "model": "veo-3.1-generate-preview",
  "prompt": "Сгенерируй рекламный кадр, используя внешний вид продукта с референс-изображения",
  "duration": 8,
  "metadata": {
    "resolution": "720p",
    "aspectRatio": "16:9",
    "referenceImages": [
      {
        "image": {
          "bytesBase64Encoded": "BASE64_IMAGE",
          "mimeType": "image/png"
        },
        "referenceType": "asset"
      }
    ]
  }
}
```

### Запрос статуса задачи

Сначала сохраните `id` или `task_id`, возвращённые при создании задачи:

```bash
export TASK_ID="task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
```

Затем запросите статус:

```bash
curl -X GET "$BASE_URL/v1/videos/$TASK_ID" \
  -H "Authorization: Bearer $AICENTOS_API_KEY"
```

Во время обработки типичный ответ:

```bash
{
  "id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "veo-3.1-generate-preview",
  "status": "in_progress",
  "progress": 50,
  "created_at": 1775025000
}
```

По завершении типичный ответ:

```bash
{
  "id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "video",
  "model": "veo-3.1-generate-preview",
  "status": "completed",
  "progress": 100,
  "created_at": 1775025000,
  "completed_at": 1775025068
}
```

### Запрос статуса и ссылки на результат

Если при опросе сразу нужна ссылка для скачивания, вызовите:

```bash
curl -X GET "$BASE_URL/v1/video/generations/$TASK_ID" \
  -H "Authorization: Bearer $AICENTOS_API_KEY"
```

Типичный ответ:

```bash
{
  "code": "success",
  "message": "",
  "data": {
    "error": null,
    "format": "mp4",
    "metadata": null,
    "status": "succeeded",
    "task_id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "url": "https://aicentos.com/v1/videos/task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/content"
  }
}
```

### Скачивание видео

После завершения задачи скачайте файл напрямую:

```bash
curl -L "$BASE_URL/v1/videos/$TASK_ID/content" \
  -H "Authorization: Bearer $AICENTOS_API_KEY" \
  -o veo-result.mp4
```

## Значения статусов

`GET /v1/videos/{task_id}` возвращает в основном такие статусы:

| Статус        | Значение  |
| ------------- | --------- |
| `queued`      | в очереди |
| `in_progress` | генерация |
| `completed`   | завершено |
| `failed`      | ошибка    |

`GET /v1/video/generations/{task_id}` возвращает в основном такие статусы:

| Статус       | Значение  |
| ------------ | --------- |
| `queued`     | в очереди |
| `processing` | генерация |
| `succeeded`  | успешно   |
| `failed`     | ошибка    |

## Важные замечания

* `prompt` обязателен.
* Для image-to-video поле с изображением должно называться `input_reference`.
* В задачах с первым и последним кадром нужны оба изображения: первый — `input_reference`, последний — `last_frame` или `lastFrame`.
* Задачи с референсами поддерживаются только в серии Veo 3.1, максимум 3 изображения и обязательно 8 секунд.
* В задачах с референсами не передавайте `negativePrompt`.
* Для image-to-video в Gemini не рекомендуется передавать URL удалённых изображений — лучше файл или Base64.
* Опрашивайте `GET /v1/videos/{task_id}` и скачивайте результат только после `status=completed`.
* В серии Veo 3.1 можно передавать 4, 6 или 8 секунд; для 1080p и 4k — только 8 секунд. - Альбомное видео — `aspectRatio=16:9`, портретное — `aspectRatio=9:16`; если не передать, по умолчанию берётся 16:9.
* Не передавайте параметр `generateAudio`. Модели Veo 3.1 генерируют звук нативно, но текущий Gemini API не позволяет включать/выключать звук через `generateAudio`; за передачу этого поля апстрим может вернуть `INVALID_ARGUMENT`.
* Чтобы управлять аудиосодержимым, опишите в prompt диалоги, окружение, эффекты или стиль музыки.
* Официальный Veo 3.1 поддерживает расширение видео, но в текущем API aicentos вход video пока не открыт.