HiAPI
博客

使用指南

Vidu Q4 Preview 图生视频:将产品静帧变成 4K 短视频片段

2026年11月3日
Vidu Q4 Preview 图生视频:将产品静帧变成 4K 短视频片段

你已经有了静帧——一张产品图、一帧主打产品画面、一张人像。对于短视频来说,任务就是让它动起来:一个 4–6 秒的竖屏节拍,带一点镜头动态和音轨,再叠加成钩子 / 主体 / CTA 的序列。hiapi API 上的 vidu-q4-preview/image-to-video 正是为此而建。输入一张首帧,拿回一段 3–16 秒、最高 4K、带原生音轨的片段。

这是端到端的生产流水线,而不是提示词画廊:准备首帧、批量生成三个异步片段、精修 4K 节拍、导出网页用的 H.264。下面每个片段、每个数字和每个 schema 细节都来自 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. 每个片段都带音轨, 即使没有音频参考。三个输出都带有 48 kHz 的立体声 AAC 音轨,由提示词中的声音词汇驱动。计划好是保留还是在后期静音;它从来不会缺席。
  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 步——准备首帧

因为方向和短边都来自静帧,你的画面选择决定了片段。本次运行我用 gpt-image-2/text-to-image 生成了两张 9:16 静帧:一张影棚产品图,一张生活人像。这是我们开始钩子的产品图:

下面是同一画面在 4K 下动画化——缓慢推近,一道光扫过玻璃:

产生它的提示词(为本文撰写并运行):

Animate the first frame into a cinematic short-form hook: a slow push-in toward
the amber serum bottle while a soft beam of light sweeps across the glass from
left to right, catching the condensation droplets so they glint. The out-of-focus
eucalyptus leaves behind drift a few millimetres. Unhurried, premium motion.
Subtle ambient whoosh and a soft chime as the light reaches the bottle.

注意提示词只描述运动和声音——它从不重述物体是什么。静帧已经固定了主体;图生视频只需要被告知它应该如何运动、听起来如何。

第 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,所以立即把字节下载到磁盘或你自己的存储——不要把它热链接到页面里。
  • 无效值在验证时失败,在任何计费之前。 发送 "duration": 99 会返回 invalid input: duration: maximum: got 99, want 16,没有 taskId——这正是上面 3–16 边界被免费确认的方式。在客户端捕获这个 400 并暴露出来;它意味着请求被拒绝,而不是任务在渲染中途失败。

第 3 步——批量生成钩子、主体和 CTA

因为每个节拍就是一张静帧 → 一个任务,你把它们一起发射、一起轮询,而不是运行阻塞链。本次运行三个都一次性发出;720p 和 1080p 节拍在几分钟内返回,4K 钩子在那之后几分钟返回——这正是为什么你要异步提交,而不是串行调用等待。

生活主体节拍,从人像静帧以 1080p 动画化六秒:

Animate the first frame into a lifestyle short-form beat: a gentle parallax orbit
around the woman as she turns her face a few degrees toward the window light and
her soft smile widens slightly. Loose strands of hair sway in a faint breeze; the
blurred plant leaves behind shift gently. Warm, natural, editorial motion with no
jump cuts. Soft airy room tone.

CTA 尾卡节拍,回到产品静帧以 720p 四秒——小、便宜,足够做一张收尾卡:

Animate the first frame into a clean end-card beat: the serum bottle rotates slowly
and settles to a confident three-quarter angle as the light steadies. Minimal,
product-forward motion that holds on the bottle. A soft sustained ambient tone that
resolves cleanly.

一个最小的批量循环大致如下——提交所有节拍,收集任务 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 重封装,让它们在完全下载前就开始播放。保留 2160 宽的 HEVC 作为归档母版,把降采样的 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 溢价是你为一个值得的节拍——英雄揭晓——所做的选择,而 720p 的 CTA 尾卡在拇指停滑的速度下无法分辨。每个模型的完整分层在 hiapi 定价页。

常见问题

我能在请求中强制 9:16 吗? 不能——没有 aspect_ratio 字段,传了会被拒绝。方向从首帧继承,所以在调用前制作或裁剪一张竖屏静帧。

为什么我的片段有我未要求的声音? Vidu Q4 Preview 在每个片段上输出原生音轨,由提示词中的声音词汇提示。如果你想要静音,在后期静音该轨道。

我的 4K 片段不能内联播放——文件坏了吗? 它没问题;4K 返回为 HEVC/H.265,某些浏览器不会内联渲染。按第 4 步所示重编码为 H.264。

我能在一次调用中传多个产品角度吗? 不能在这个端点上——image_url 是单帧,reference_image_urls 在这里会被拒绝。多个参考(和声音)是参考生视频端点。

一个节拍能有多长? 每个片段最多 16 秒(schema 将 duration 上限设为 16)。对于更长的作品,生成多个节拍并拼接它们。

我如何控制镜头运动? 在提示词中描述它——推近、视差环绕、定格——就像上面三个提示词那样。对于更深入的运镜语言目录,请参阅我们关于AI 视频电影级镜头运动的笔记。

开始让你的静帧动起来

如果你有一张强有力的画面,你就有一个短视频片段。把 image_url 指向它,选择匹配节拍职责的分辨率,让批量运行。查看完整输入 schema 和实时示例在 Vidu Q4 Preview 图生视频模型页,或用 hiapi 快速入门把提交和轮询循环接入你自己的技术栈。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档