指南用一个 API Key 把商品图批量生成 15 秒视频
Makernice 团队 · ·
价格截至 2026 年 11 月 2 日(价表 v12)。
用一个 Makernice API Key 把一批商品图做成 15 秒视频:每条先报价,再带 Idempotency-Key 创建,然后轮询或接收 Webhook。图生视频模式、720p 下,wan-3.0 每条 15 秒视频 $1.18,10 条共 $11.84(价表 v12,2026 年 11 月 2 日),报价会在冻结任何金额之前给出准确金额。
批量生成商品视频前要准备什么?
- 在控制台为这批任务建一个 API Key,设好花费上限和有效期。会超出上限的创建请求在冻结任何金额之前就返回 402 key_spend_limit_reached。
- 每张商品图一个公开的 https 地址:不超过 10 MB 的静态 JPEG、PNG 或 WebP,直接在该地址返回,不跟随跳转。
- 每个商品一句描述动作的提示词,例如在桌面上缓慢转动、镜头推近标签。
wan-3.0的提示词最长 4,000 字符。 - 够付整批的余额。每次充值 $15 到 $1,000,余额不过期。
一批 15 秒商品视频要花多少钱?
视频费用 = 单价 × 请求秒数,所以一条 15 秒视频是每秒单价的 15 倍,10 条共 150 秒。下表按价表 v12(2026 年 11 月 2 日)计算;在成本计算器里选 15 秒、10 条、重新生成比例 0%,得到的是同样的数。在计算器里打开这一批 →
| `model` | 分辨率 | 每秒 | 15 秒一条 | 10 条 |
|---|---|---|---|---|
wan-3.0 | 480p | $0.0394 | $0.59 | $5.92 |
wan-3.0 | 720p | $0.0789 | $1.18 | $11.84 |
seedance-2.5 | 720p | $0.2592 | $3.89 | $38.88 |
需要指定画幅(例如竖屏信息流的 9:16)时用 seedance-2.5:图生视频模式下只有 Seedance 系列接受 aspect_ratio,其它模型会以 400 invalid_request 拒绝这个字段。只有发布新价表时价格才会变,实际扣费永远是报价金额。
第 1 步:怎么给一条商品视频报价?
curl https://api.makernice.com/v1/generations/quote \
-H "Authorization: Bearer $MAKERNICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-3.0",
"mode": "i2v",
"prompt": "The ceramic mug turns slowly on a white tabletop, soft studio light, steam rising, slow push-in",
"image_url": "https://example.com/products/sku-1042.jpg",
"duration": 15,
"resolution": "720p"
}'返回里的 amount 以 micro-USD(百万分之一美元)计,等于单价 × facts.quantity,这里是 15。报价有效 12 分钟、只能用于一次生成;报价本身不冻结也不扣费。
第 2 步:怎么创建视频而不被重复扣费?
curl https://api.makernice.com/v1/generations \
-H "Authorization: Bearer $MAKERNICE_API_KEY" \
-H "Idempotency-Key: product-video-sku-1042-v1" \
-H "Content-Type: application/json" \
-d '{
"quote_id": "qt_...",
"input": {
"model": "wan-3.0",
"mode": "i2v",
"prompt": "The ceramic mug turns slowly on a white tabletop, soft studio light, steam rising, slow push-in",
"image_url": "https://example.com/products/sku-1042.jpg",
"duration": 15,
"resolution": "720p"
}
}'带上 quote_id 和同样的输入。每个商品用一个由 SKU 拼成的 Idempotency-Key:脚本超时重试时,同一个幂等键、同一份报价和输入会以 200 返回原来那个生成,不会再扣一次。幂等键为 1 到 200 个可打印 ASCII 字符,不含空格。
第 3 步:怎么跑完整批?
import csv
import os
import time
from decimal import Decimal
import requests
API = "https://api.makernice.com/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['MAKERNICE_API_KEY']}"}
FINAL = {"succeeded", "failed", "canceled"}
def call(method, path, headers=None, **kwargs):
# Waits out 429 (rate_limited, concurrency_limit_reached) using Retry-After; raises on anything else
for _ in range(20):
r = requests.request(method, API + path, headers={**HEADERS, **(headers or {})}, timeout=30, **kwargs)
if r.status_code == 429:
time.sleep(int(r.headers.get("Retry-After", "5")))
continue
if not r.ok:
raise RuntimeError(f"{method} {path} -> {r.status_code}: {r.text}")
return r.json()
raise RuntimeError(f"{method} {path}: still rate limited")
# products.csv columns: sku,image_url,prompt
with open("products.csv", newline="") as f:
products = list(csv.DictReader(f))
for p in products:
job = {
"model": "wan-3.0",
"mode": "i2v",
"prompt": p["prompt"],
"image_url": p["image_url"],
"duration": 15,
"resolution": "720p",
}
# Quote right before creating: a quote is valid for 12 minutes and one generation
quote = call("POST", "/generations/quote", json=job)
print(p["sku"], "quoted", Decimal(quote["amount"]).scaleb(-6), "USD")
gen = call(
"POST",
"/generations",
json={"quote_id": quote["id"], "input": job},
headers={"Idempotency-Key": f"product-video-{p['sku']}-v1"},
)
while gen["status"] not in FINAL:
time.sleep(5)
gen = call("GET", f"/generations/{gen['id']}")
print(p["sku"], gen["status"], gen["billing"], gen.get("error"))脚本在创建每条之前一刻报价,遇到 429 就按 Retry-After 的秒数等待。它一次只跑一条;账户默认最多同时进行 2 个生成,所以在客服提高上限之前,最多再加一个并行进程就够了。不想轮询的话,创建时传 callback_url,生成结束后我们会把结果 POST 到你的服务器。

批量做商品视频常见哪些错误?
| 看到什么 | 原因 | 怎么办 |
|---|---|---|
failed,invalid_request,error.input: image_url | 图片跳转、超过 10 MB、是 GIF 或动态 WebP | 修好图片地址后重新创建;冻结已释放 |
报价时 400 invalid_request | 传了该模式不收的字段,如 aspect_ratio | 去掉该字段,或改用 Seedance 模型 |
410 quote_expired | 报价到创建超过 12 分钟 | 创建前一刻重新报价 |
429 concurrency_limit_reached | 已有 2 个生成在进行 | 等 Retry-After 的秒数后重试 |
402 daily_spend_limit_reached | 账户当日消费到上限 | UTC 零点后继续,或联系客服提额 |
422 idempotency_conflict | 同一个幂等键(Idempotency-Key)用于不同输入 | 新输入换一个新的幂等键 |
商品视频生成失败,钱怎么算?
创建时冻结报价金额。生成失败或超时,冻结金额全额释放;释放不是退款,钱从未离开你的余额。注:如果成品因内容违规被输出审核拦截,这次生成仍会扣费。可联系客服申请人工复核。各种情形见生成失败会扣费吗?
下一步可以看API 集成最佳实践了解重试与轮询,或看图生视频字段说明了解各模型接受哪些字段。
常见问题
能通过 Makernice API 用一张商品图生成 9:16 竖屏视频吗?
aspect_ratio。其它模型在该模式下会以 400 invalid_request 拒绝这个字段。在 Makernice 生成一条 15 秒图生视频要多少钱?
wan-3.0 720p 是 $1.18,seedance-2.5 720p 是 $3.89;每条创建前拿到的报价就是实际扣费金额。
