Руководство по использованию
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 |
Четыре особенности определяют, как вы строите конвейер, и все четыре легко перепутать:
- Нет поля
aspect_ratio. Если передать его, запрос будет отклонён напрямую (invalid input: <root>: additional properties 'aspect_ratio' not allowed). Фрагмент наследует ориентацию от первого кадра — стоп-кадр 9:16 даёт фрагмент 9:16. Ориентация определяется в момент создания стоп-кадра, а не при вызове, поэтому для короткого видео вам нужно с самого начала делать вертикальный кадр. resolutionзадаёт короткую сторону, а не длинную. На вертикальном кадре1080pвозвращает 1080×1918,720pвозвращает 720×1278.4kдля вертикального стоп-кадра — это гигант шириной 2160 (здесь 2160×3836) — планируйте бюджет и кодирование соответственно.- Каждый фрагмент содержит звуковую дорожку, даже без аудиореференса. Все три выхода содержат стереофоническую дорожку AAC с частотой 48 кГц, управляемую звуковыми словами в промпте. Заранее решите, оставлять её или заглушать на постобработке; она никогда не отсутствует.
image_url— в единственном числе. Передачаreference_image_urlsбудет отклонена (additional properties 'reference_image_urls' not allowed) — этот массив относится к референс-в-видео. Один стоп-кадр на входе, один фрагмент на выходе.
Последний пункт — настоящая развилка: если вам нужно зафиксировать несколько ракурсов продукта вместе, вам нужен референс-в-видео. Если у вас есть хороший кадр, изображение-в-видео проще и дешевле.
Обзор конвейера
Последовательность для короткого видео — это не что иное, как N независимых анимаций одного кадра, поэтому всё легко распараллеливается:
- Подготовьте по одному первому кадру на каждый ритм — вертикальный (9:16) для короткого видео, поскольку ориентация фиксируется в изображении.
- Отправьте каждый ритм как отдельную асинхронную задачу — по одному
POST /v1/tasksна каждый; не блокируйте остальные, пока не завершится первый. - Опрашивайте каждый
taskIdдо статусаsuccess, скачайте mp4 (с выходного URL). - Доработайте 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.
Похожие статьи
Все статьи →-
Руководство по использованию
Руководство по началу работы с seedream-5.0-pro/image-to-image: возможности, цены и ключевые моменты интеграции
Границы возможностей модели редактирования изображений ByteDance, принципы тарификации и практика инженерной интеграции
-
Руководство по использованию
Руководство по использованию seedream-5.0-pro text-to-image: границы возможностей, интеграция API и контроль затрат
Практический взгляд для разработчиков: от ключевых параметров до оценки стоимости $0.05 за изображение
-
Руководство по использованию
Руководство по началу работы с Hailuo 2.3 Fast для генерации видео из изображений: границы возможностей, цены и практика интеграции
Ключевые моменты выбора и интеграции модели MiniMax для генерации видео из изображений для разработчиков