HiAPI
Блог

Руководство по использованию

Vidu Q4 Preview изображение-в-видео: превратите стоп-кадр продукта в короткий 4K-видеоролик

Oct 19, 2026
Vidu Q4 Preview изображение-в-видео: превратите стоп-кадр продукта в короткий 4K-видеоролик

У вас уже есть стоп-кадр — изображение продукта, ключевой кадр товара или портрет. Для короткого видео задача — заставить его двигаться: вертикальный ритм на 4–6 секунд с небольшим движением камеры и звуковой дорожкой, затем собранный в последовательность «хук / основной блок / CTA». vidu-q4-preview/image-to-video на hiapi API создан именно для этого. На входе — один первый кадр, на выходе — фрагмент длиной 3–16 секунд, вплоть до 4K, с нативной звуковой дорожкой.

Это сквозной производственный конвейер, а не галерея промптов: подготовка первых кадров, пакетная генерация трёх асинхронных фрагментов, доработка 4K-ритма, экспорт H.264 для веба. Каждый фрагмент, каждая цифра и каждая деталь схемы ниже взяты из реального запуска 2026-10-19 — три фрагмента сгенерированы и встроены, вы можете смотреть их напрямую.

Если вам нужны только готовые к копированию промпты для кадров, прочитайте рецепты промптов для Vidu Q4 Preview изображение-в-видео. Если ваш материал — это бренд-кит (несколько референсных изображений плюс образец голоса), то это референс-в-видео — другая задача, использующая другой эндпоинт. Эта страница посвящена случаю с одним стоп-кадром.

Что на самом деле принимает эндпоинт изображение-в-видео

Ниже приведён входной контракт, заново проверенный вживую во время этого запуска (использовались только недопустимые значения, поэтому проверка не стоила ни копейки):

Поле Обязательно Значения
model Да vidu-q4-preview/image-to-video
prompt Да Описание движения
image_url Да URL одного изображения первого кадра
resolution Нет 540p · 720p · 1080p · 2k · 4k
duration Нет Целое число секунд, 3–16

Четыре особенности определяют, как вы строите конвейер, и все четыре легко перепутать:

  1. Нет поля aspect_ratio. Если передать его, запрос будет отклонён напрямую (invalid input: <root>: additional properties 'aspect_ratio' not allowed). Фрагмент наследует ориентацию от первого кадра — стоп-кадр 9:16 даёт фрагмент 9:16. Ориентация определяется в момент создания стоп-кадра, а не при вызове, поэтому для короткого видео вам нужно с самого начала делать вертикальный кадр.
  2. resolution задаёт короткую сторону, а не длинную. На вертикальном кадре 1080p возвращает 1080×1918, 720p возвращает 720×1278. 4k для вертикального стоп-кадра — это гигант шириной 2160 (здесь 2160×3836) — планируйте бюджет и кодирование соответственно.
  3. Каждый фрагмент содержит звуковую дорожку, даже без аудиореференса. Все три выхода содержат стереофоническую дорожку AAC с частотой 48 кГц, управляемую звуковыми словами в промпте. Заранее решите, оставлять её или заглушать на постобработке; она никогда не отсутствует.
  4. image_url — в единственном числе. Передача reference_image_urls будет отклонена (additional properties 'reference_image_urls' not allowed) — этот массив относится к референс-в-видео. Один стоп-кадр на входе, один фрагмент на выходе.

Последний пункт — настоящая развилка: если вам нужно зафиксировать несколько ракурсов продукта вместе, вам нужен референс-в-видео. Если у вас есть хороший кадр, изображение-в-видео проще и дешевле.

Обзор конвейера

Последовательность для короткого видео — это не что иное, как N независимых анимаций одного кадра, поэтому всё легко распараллеливается:

  1. Подготовьте по одному первому кадру на каждый ритм — вертикальный (9:16) для короткого видео, поскольку ориентация фиксируется в изображении.
  2. Отправьте каждый ритм как отдельную асинхронную задачу — по одному POST /v1/tasks на каждый; не блокируйте остальные, пока не завершится первый.
  3. Опрашивайте каждый taskId до статуса success, скачайте mp4 (с выходного URL).
  4. Доработайте 4K-ритм, перекодируйте HEVC→H.264, склейте или оставьте раздельно, экспортируйте.

Шаг 1 — подготовьте первый кадр

Поскольку ориентация и короткая сторона берутся из стоп-кадра, ваш выбор изображения определяет фрагмент. В этом запуске я сгенерировал два стоп-кадра 9:16 с помощью gpt-image-2/text-to-image: студийное изображение продукта и лайфстайл-портрет. Вот наше изображение продукта, с которого мы начинаем хук:

Ниже тот же кадр, анимированный в 4K — медленный наезд, луч света скользит по стеклу:

Промпт, который его создал (написан и запущен для этой статьи):

Анимируйте первый кадр в кинематографичный хук для короткого видео: медленный наезд камеры к янтарному флакону сыворотки, пока мягкий луч света скользит по стеклу слева направо, ловя капли конденсата так, что они бликуют. Размытые листья эвкалипта на заднем плане смещаются на несколько миллиметров. Неторопливое, премиальное движение. Лёгкий окружающий свист и мягкий звон, когда свет достигает флакона.

Заметьте, что промпт описывает только движение и звук — он никогда не пересказывает, что это за объект. Стоп-кадр уже зафиксировал субъект; изображению-в-видео нужно только сообщить, как оно должно двигаться и звучать.

Шаг 2 — отправка, опрос, скачивание одного ритма

Вызов — это одна асинхронная задача. Отправка:

curl -s -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "vidu-q4-preview/image-to-video",
    "input": {
      "prompt": "Animate the first frame into a cinematic short-form hook ...",
      "image_url": "https://your-storage.example.com/still-product.jpg",
      "resolution": "4k",
      "duration": 4
    }
  }'
# -> {"data": {"taskId": "tk-hiapi-01M597ARAKTTJ9YWRPEXPBAYHJ"}}

Затем опрашивайте задачу до терминального состояния и скачивайте результат:

curl -s https://api.hiapi.ai/v1/tasks/$TASK_ID \
  -H "Authorization: Bearer $HIAPI_TOKEN"
# in progress -> {"data": {"status": "processing"}}
# done        -> {"data": {"status": "success",
#                          "output": [{"url": "https://.../out.mp4", "expireAt": ...}]}}

Из реального ответа стоит знать две вещи:

  • Выходной URL временный. Он содержит expireAt, поэтому сразу скачивайте байты на диск или в собственное хранилище — не встраивайте его hotlink'ом на страницу.
  • Недопустимые значения отказывают при валидации, до любого списания. Отправка "duration": 99 возвращает invalid input: duration: maximum: got 99, want 16, без taskId — именно так граница 3–16 выше была подтверждена бесплатно. Перехватывайте этот 400 на клиенте и показывайте его; он означает, что запрос отклонён, а не что задача упала в процессе рендеринга.

Шаг 3 — пакетная генерация хука, основного блока и CTA

Поскольку каждый ритм — это один стоп-кадр → одна задача, вы запускаете их вместе и опрашиваете вместе, а не выполняете блокирующую цепочку. В этом запуске все три были отправлены разом; ритмы 720p и 1080p вернулись за несколько минут, 4K-хук вернулся через несколько минут после них — именно поэтому вы отправляете асинхронно, а не вызываете последовательно с ожиданием.

Ритм лайфстайл-основного блока, анимированный из портретного стоп-кадра в 1080p на шесть секунд:

Анимируйте первый кадр в лайфстайл-ритм для короткого видео: лёгкий параллакс-облёт вокруг женщины, пока она поворачивает лицо на несколько градусов к свету из окна и её мягкая улыбка слегка расширяется. Отдельные пряди волос колышутся от лёгкого ветерка; размытые листья растения на заднем плане мягко смещаются. Тёплое, естественное, редакционное движение без резких склеек. Мягкий воздушный комнатный фон.

Ритм финальной карточки CTA, возвращение к стоп-кадру продукта в 720p на четыре секунды — маленький, дешёвый, достаточный для завершающей карточки:

Анимируйте первый кадр в чистый ритм финальной карточки: флакон сыворотки медленно вращается и останавливается в уверенном ракурсе три четверти, пока свет стабилизируется. Минимальное движение в пользу продукта, удерживающееся на флаконе. Мягкий продолжительный окружающий тон, который чисто разрешается.

Минимальный пакетный цикл выглядит примерно так — отправьте все ритмы, соберите ID задач, затем опрашивайте:

import requests, time

BEATS = [
    {"name": "hook", "image_url": PRODUCT_STILL,  "resolution": "4k",    "duration": 4, "prompt": HOOK},
    {"name": "body", "image_url": PORTRAIT_STILL, "resolution": "1080p", "duration": 6, "prompt": BODY},
    {"name": "cta",  "image_url": PRODUCT_STILL,  "resolution": "720p",  "duration": 4, "prompt": CTA},
]
H = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

# submit all at once -- do not block between beats
tasks = {}
for b in BEATS:
    r = requests.post("https://api.hiapi.ai/v1/tasks",
                      headers=H, json={"model": "vidu-q4-preview/image-to-video",
                      "input": {k: b[k] for k in ("prompt", "image_url", "resolution", "duration")}})
    tasks[b["name"]] = r.json()["data"]["taskId"]

# poll each saved taskId to a terminal state; never resubmit
done = {}
while len(done) < len(tasks):
    for name, tid in tasks.items():
        if name in done:
            continue
        t = requests.get(f"https://api.hiapi.ai/v1/tasks/{tid}", headers=H).json()["data"]
        if t["status"] == "success":
            done[name] = t["output"][0]["url"]
        elif t["status"] == "fail":
            raise RuntimeError(f"{name} failed: {t.get('error')}")
    time.sleep(15)

Сохраняйте ID задач. Если сеть мигнёт посреди опроса, повторно опрашивайте сохранённый ID — никогда не отправляйте заново, иначе вы заплатите за один и тот же ритм дважды.

Шаг 4 — доработка 4K, экспорт H.264 для веба

4K-хук возвращается как HEVC (H.265), Main 10, 2160×3836 — настоящий вертикальный 4K-мастер. HEVC не воспроизводится надёжно инлайн в браузерах, поэтому перекодируйте в H.264 для веб-доставки:

# 4K HEVC master -> H.264 web export (downscaled to a 1080-wide delivery copy)
ffmpeg -i hook_4k.mp4 -vf "scale=1080:-2" \
  -c:v libx264 -preset medium -crf 20 -pix_fmt yuv420p \
  -c:a aac -b:a 128k -movflags +faststart hook_web.mp4

Ритмы 1080p и 720p уже возвращаются в H.264, поэтому перекодирование им не нужно — только ремультиплексирование с -movflags +faststart, чтобы они начинали воспроизводиться до полной загрузки. Сохраняйте HEVC шириной 2160 как архивный мастер, а на страницу отдавайте пониженный H.264; это и есть хук-фрагмент, который воспроизводится в верхней части шага 1.

Отсюда либо объедините три ритма через concat в один вертикальный короткий ролик, либо оставьте их отдельными материалами, если ваша платформа хочет загружать хук, основной блок и CTA по отдельности.

Сколько на самом деле стоит трёхритмовый короткий ролик

Ценообразование по секундам, оплачивается по коэффициенту duration и определяется resolution (в этом запуске проверено по живому /api/pricing):

Разрешение Цена / секунда
540p $0.0515
720p $0.109
1080p $0.1375
2K $0.2175
4K $0.446

Для того самого трёхритмового короткого ролика выше:

Ритм Разрешение Длительность Стоимость
Хук 4K 4s $1.784
Основной блок 1080p 6s $0.825
CTA 720p 4s $0.436
Итого видео 14s $3.045

Добавьте два первых кадра gpt-image-2 по $0.03 каждый, и готовый короткий ролик стоит около $3.11 на генерацию. 4K-хук в одиночку составляет 59% счёта. Снизьте хук до 1080p, и три ритма вместе будут стоить около $1.81; 4K-наценка — это выбор, который вы делаете ради достойного ритма — геройского раскрытия, — а карточка CTA в 720p неразличима на скорости свайпа большим пальцем. Полная разбивка по каждому модели на странице цен hiapi.

Часто задаваемые вопросы

Могу ли я принудительно задать 9:16 в запросе? Нет — поля aspect_ratio нет, и передача его будет отклонена. Ориентация наследуется от первого кадра, поэтому создайте или обрежьте вертикальный стоп-кадр перед вызовом.

Почему в моём фрагменте есть звук, который я не просил? Vidu Q4 Preview выводит нативную звуковую дорожку на каждом фрагменте, подсказанную звуковыми словами в промпте. Если хотите тишину, заглушите эту дорожку на постобработке.

Мой 4K-фрагмент не воспроизводится инлайн — файл повреждён? Он в порядке; 4K возвращается как HEVC/H.265, который некоторые браузеры не рендерят инлайн. Перекодируйте в H.264, как показано в шаге 4.

Могу ли я передать несколько ракурсов продукта в одном вызове? Не на этом эндпоинте — image_url это один кадр, reference_image_urls здесь будет отклонён. Несколько референсов (и звук) — это эндпоинт референс-в-видео.

Насколько длинным может быть один ритм? Каждый фрагмент до 16 секунд (схема ограничивает duration значением 16). Для более длинных произведений сгенерируйте несколько ритмов и склейте их.

Как мне управлять движением камеры? Опишите его в промпте — наезд, параллакс-облёт, статичный кадр — как в трёх промптах выше. Для более глубокого каталога языка движений камеры смотрите наши заметки о кинематографичных движениях камеры в AI-видео.

Начните оживлять свои стоп-кадры

Если у вас есть сильное изображение, у вас есть фрагмент короткого видео. Укажите на него image_url, выберите разрешение, соответствующее роли ритма, и запускайте пакетно. Посмотрите полную входную схему и живой пример на странице модели Vidu Q4 Preview изображение-в-видео или подключите цикл отправки и опроса к своему стеку с помощью быстрого старта hiapi.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API