HiAPI
博客

使用指南

从产品静图生成短视频:hiapi API 上的 grok-imagine/image-to-video

2026年11月3日
从产品静图生成短视频:hiapi API 上的 grok-imagine/image-to-video

短视频产品内容存在供给问题。一条可直接投放的短片过去意味着一次拍摄:棚拍时间、动效设计、剪辑师。但如果你已经在运营电商商品目录,你手上就有现成的原材料——成千上万张产品静图。grok-imagine/image-to-video(xAI 的 Grok Imagine 图生视频端点)通过一次异步 API 调用,就能把这些静图变成 6–30 秒的电影感短片,其参考图条件控制能让你的产品看起来仍然像你的产品。

本指南是 hiapi API 上的端到端工作流:让单张目录静图动起来,用多张参考图锁定主体一致性,为信息流经济性选择时长与分辨率档位,以及把整个目录批处理成一条竖屏短片队列。下面嵌入的每条短片都是来自线上 API 的真实、未经剪辑的首次输出——为本文从我们的素材库静图生成,旁边附有确切的提示词和设置。

模型、限制与价格

grok-imagine/image-to-video 运行在 hiapi 的异步任务接口(POST /v1/tasks)上。我们为本文实测验证的输入 schema:

  • image_urls(数组,必填)—— 一个或多个可公开访问的参考图 URL。私有或无法抓取的 URL 会在归一化阶段失败,而不是报 schema 错误,所以请先把参考图托管在公开位置。
  • prompt(字符串,可选)—— 运动、镜头和氛围指示。不提供提示词时模型会自由发挥;做产品内容时你总是应该提供。
  • duration(整数,6–30 秒)
  • resolution(480p 或 720p)
  • aspect_ratio(1:1、2:3、3:2、16:9、9:16)

没有 motion_mode、seed 或负向提示词字段——未知字段会被以 400 拒绝。所有运动控制都靠提示词措辞。

在为本文生成短片时我们遇到的一个行为:当 aspect_ratio 与参考图自身的宽高比不一致时,参考图往往会胜出。 下面三次运行我们都请求了 9:16;两张方形源静图返回的是方形短片(960×960 和 544×544),而第一张参考图为横版的运行则交付了真正的 720×1280 竖屏。如果你的信息流需要保证 9:16,请在提交之前把参考静图裁剪成 9:16,而不是依赖该参数。

价格按输出秒数计费,来自撰写时的 hiapi 定价页:

档位 每秒价格 6 秒短片 15 秒短片 30 秒短片
480p $0.0114 $0.068 $0.171 $0.342
720p $0.0214 $0.128 $0.321 $0.642

这个价格塑造了整个工作流:一条 6 秒 720p 主视觉短片约 13 美分,而一次 480p 草稿约只要一半。你完全负担得起反复迭代。

提交 → 轮询 → 下载

任务生命周期是提交、轮询、下载。用 curl 提交:

curl -s -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "grok-imagine/image-to-video",
    "input": {
      "prompt": "Slow cinematic orbit around the bag, studio lighting glinting off the brass zippers, background stays clean, product unchanged.",
      "image_urls": ["https://your-cdn.example.com/products/weekender.jpg"],
      "duration": 6,
      "resolution": "720p",
      "aspect_ratio": "9:16"
    }
  }'

你会立即收到一个任务 ID:

{"code": 200, "data": {"taskId": "tk-hiapi-01KX2H8WMWQG99A2F97BREDPS6"}, "message": "success"}

然后轮询 GET /v1/tasks/{taskId},直到 status 为 success,再下载 output[0].url。下面是一个完整的 Python 辅助脚本——即生成本文每条短片所用的确切模式:

import json, subprocess, time, os

API = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]

def submit(input_fields: dict) -> str:
    payload = {"model": "grok-imagine/image-to-video", "input": input_fields}
    out = subprocess.run(
        ["curl", "-s", "-X", "POST", API,
         "-H", f"Authorization: Bearer {TOKEN}",
         "-H", "Content-Type: application/json",
         "-d", json.dumps(payload)],
        capture_output=True, text=True, timeout=70).stdout
    data = json.loads(out)
    if not (data.get("data") or {}).get("taskId"):
        raise RuntimeError(f"submit failed: {out[:300]}")
    return data["data"]["taskId"]

def wait(task_id: str, timeout_s: int = 1200) -> dict:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        out = subprocess.run(
            ["curl", "-s", f"{API}/{task_id}",
             "-H", f"Authorization: Bearer {TOKEN}"],
            capture_output=True, text=True, timeout=40).stdout
        task = json.loads(out)["data"]
        if task["status"] == "success":
            return task
        if task["status"] == "fail":
            raise RuntimeError(f"task failed: {task.get('error')}")
        time.sleep(10)
    raise TimeoutError(task_id)

task_id = submit({
    "prompt": "...",
    "image_urls": ["https://your-cdn.example.com/products/weekender.jpg"],
    "duration": 6,
    "resolution": "720p",
    "aspect_ratio": "9:16",
})
task = wait(task_id)
video_url = task["output"][0]["url"]
subprocess.run(["curl", "-s", "-o", "clip.mp4", video_url], timeout=180)

生产环境中需要注意的两个运维细节:

  1. output[0].url 是有时效的签名链接(带有过期时间)。任务一成功就立刻下载字节并迁移到你自己的存储——绝不要持久保存原始任务 URL。
  2. 计费发生在任务被接受时,所以在大批量提交前先做校验。一个有用的技巧:发送一个超出范围的值,比如 "duration": 99——你会收到完整的 schema 校验错误,而不会创建可计费任务。

一张静图 → 一条主视觉短片

最常用的操作:拿目录产品图,给它一个连续的镜头运动。产品摄影本质上是静态的,所以提示词的职责是只添加一个可信的运动,并明确固定其他一切:

Slow cinematic orbit around the burnt-orange canvas weekender bag, camera
circling smoothly from front to three-quarter view, studio lighting glinting
off the brass zippers, seamless white background stays clean and shadowless,
product perfectly sharp and unchanged, subtle premium e-commerce energy.

真实输出——grok-imagine/image-to-video,6 秒 @ 720p,单张参考图。首次生成,未经剪辑。实际交付 960×960:方形源静图覆盖了我们的 9:16 请求(见上方宽高比说明)。源静图如下。

让产品短片保持真实的提示词模式:

  • 一个镜头动词(“环绕”、“推近”、“移动”)。一个提示词里两个运动会让你得到晕船般的画面。
  • 明确写出“产品不变 / 完全清晰”。图生视频模型会漂移;告诉模型主体不可改动,能显著减少 logo、缝线和五金件的形变。
  • 点出材质时刻(“黄铜拉链上闪烁”)——光斑在金属和皮革上移动,正是让静图感觉像拍摄而非扭曲的原因。
  • 固定背景(“保持干净无影”)。否则模型会自行发明布景。

多张参考图:锁定主体

image_urls 接受不止一张参考图,而这正是 grok-imagine 在产品工作中区别于单帧动画器的地方。给它你想要作为场景的生活方式图,再加上干净产品图作为身份保险,模型会协调二者——场景来自第一张图,产品的确切饰边、背带和拉链由第二张图锚定:

The same burnt-orange weekender bag rests on a weathered wooden bench in a
sunlit loft; a gentle push-in as dust motes drift through warm window light,
soft shadows slide slowly across the bench, the bag and its dark leather trim
stay exactly consistent with the reference images, calm lifestyle-catalog mood.

真实输出——grok-imagine/image-to-video,6 秒 @ 720p,9:16,两张参考图(长凳生活方式图 + 白底产品图)。首次生成,未经剪辑。

注意提示词中的“与参考图一致”这句话——使用多张参考图时,明确说出来能帮助模型把额外图片当作身份约束,而不是要混入的第二个场景。这就是品牌账号每日发帖的模式:每个 SKU 拍(或生成)一张产品图,然后在每条你要动画化的生活方式短片中复用它作为一致性锚点。

时长与草稿档经济性

时长从 6 到 30 秒,分辨率是预算杠杆所在:480p 的每秒价格约为 720p 的一半。由于信息流无论如何都会激进压缩,合理的流水线是以 480p 打草稿,把胜出者重制为 720p。更长时长也给模型留出缓慢铺陈的空间——下面是一条 12 秒 480p 草稿档短片,对茶叶罐静图做一个连续氛围运动:

Moody slow dolly-in on the matte-black tea tin standing on slate, steam curls
up lazily behind it, a soft beam of morning light sweeps across the embossed
label, tiny tea leaves tumble gently onto the slate in the final seconds, dark
premium atmosphere, label text unchanged and legible.

真实输出——grok-imagine/image-to-video,12 秒 @ 480p,单张参考图。首次生成,未经剪辑(交付为方形,与方形源静图一致)。成本:$0.137。

480p 下渲染成本为 $0.0114/秒——整条 12 秒短片只花了 13.7 美分。便宜到足以对每个产品试三个提示词变体,只为你真正发布的那一条支付 720p 费率。注意提示词中的“标签文字不变且清晰可读”:包装文字是图生视频中最先糊掉的东西,点出来是你最便宜的保护措施。

批处理目录

上述一切都可线性扩展,因为任务是异步的:先提交整批,再轮询。一个针对产品列表的最小批处理运行器:

products = [
    {"sku": "weekender-orange", "refs": ["https://cdn.example.com/weekender.jpg"],
     "prompt": "Slow cinematic orbit around the bag, studio light on the brass zippers, background clean, product unchanged."},
    {"sku": "tea-tin-black", "refs": ["https://cdn.example.com/tea-tin.jpg"],
     "prompt": "Moody slow dolly-in, steam drifting, light sweeping the embossed label, label text unchanged."},
    # ... 目录其余部分
]

jobs = []
for p in products:
    tid = submit({
        "prompt": p["prompt"],
        "image_urls": p["refs"],
        "duration": 6,
        "resolution": "480p",     # 草稿档
        "aspect_ratio": "9:16",
    })
    jobs.append((p["sku"], tid))

for sku, tid in jobs:
    task = wait(tid)
    url = task["output"][0]["url"]
    subprocess.run(["curl", "-s", "-o", f"{sku}.mp4", url], timeout=180)
    print(f"{sku}: done")

运行这条流水线的实用批处理要点:

  • 先提交,后轮询。 每次渲染需要几分钟,并在服务端并行执行;串行化“提交-等待-提交”会浪费这种并行性。
  • 每种内容类型保持一个扁平提示词模板(产品图用环绕,生活方式图用推近),再插值产品名词。整个信息流的一致性比每条短片的巧妙更重要。
  • 预算检查: 50 个 SKU 的目录以 6 秒/480p 打草稿为 50 × $0.068 ≈ $3.42。把最好的十条提升到 720p 增加十 × $0.128 ≈ $1.28。整整一个月的每日产品短片,成本低于一小时的棚拍时间。

短视频发布说明

  • 竖屏需要竖屏参考图。 如上所述,参考图的宽高比往往会覆盖 aspect_ratio——如果短片要投信息流,请在提交前把静图裁剪成 9:16。把已完成的方形渲染裁剪成竖屏会丢掉大部分像素。
  • 第一秒就是钩子——让运动立即开始的提示词(“镜头环绕”、“推近”)在完播率上优于缓慢淡入。
  • 短片自带模型生成的氛围音轨。 我们生成的每条输出都带有 AAC 流——有些短片是微妙的棚内氛围,有些则近乎无声。没有输入字段可以控制它,所以发布时请计划用自己的音乐或配音替换它,而不是把它当作完成的配乐。
  • 循环友好性: 环绕和光影扫过比以揭示结尾的短片循环效果好得多。对于自动循环的信息流(Shorts、Reels),上面的环绕模式可以无缝重播。

常见问题

渲染需要多长时间? 本文的 6 秒短片每条渲染了几分钟;12 秒短片稍长一些。把它当作异步队列,而非交互式调用——批量提交并轮询。

我可以用生成的图片作为参考图吗? 可以。参考 URL 只需可公开抓取。本文中三张源静图本身就是 API 生成的产品图(来自 seedream-5.0-lite 运行),取自我们的素材库——一个完全合成的静图到视频流水线。

1080p 或超过 30 秒呢? 此端点上限于 720p 和 30 秒。对于短视频信息流,这正是最佳区间;如果你需要更高分辨率,请在后期放大,或查看模型目录了解当前选项。

这与 grok-imagine-1.5/image-to-video 有何不同? 1.5 预览端点用范围换运动质量:1–15 秒时长,运动升级,每秒价格相同。这个 1.0 端点给你 6–30 秒。我们在另一篇详解中介绍了 1.5 的基础知识。

有文生视频版本吗? 有——grok-imagine/text-to-video,相同的任务接口,仅提示词输入。当品牌/产品一致性重要时,图生视频是正确选择;当你需要从零生成素材时,用文生视频。


如果你有产品静图和 API 密钥,你离第一条信息流短片只差一次 POST /v1/tasks:从仪表盘获取密钥,从 grok-imagine/image-to-video 模型页开始,用上面的环绕提示词动画化一张产品图——按每份草稿 13 美分计算,学习这个模型最快的方式就是运行它。

立即开始构建持久 AI 产物

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

阅读 API 文档