视频生成接口进中转:三种形态、四个计量陷阱,以及一份验收清单

教程 发布于 2026-10-19 45 次阅读 API指南针
视频生成没有统一协议,每家厂商一套异步任务流。三种形态决定了你该怎么接,四个计量陷阱决定了你会不会被多扣钱。文末附六步验收清单。

为什么视频是最不整齐的一类

文本接口有事实标准 POST /v1/chat/completions,图片接口有 POST /v1/images/generations。视频没有。

到今天为止,视频生成没有形成统一协议:每家厂商一套提交方式、一套任务状态机、一套结果获取路径。中转站夹在中间,只能一家一家透传,于是同一个站点上,不同视频模型的调用方式可能完全不同。

这一条直接决定了三件事:你的代码没法写一套通用封装、计费没法用统一倍率、失败重试没法用统一策略。

三种接口形态

形态一:OpenAI 风格异步任务

提交返回任务对象,再按 id 轮询:

# 提交
curl -s https://<base_url>/v1/videos \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"model":"<video-model>","prompt":"a cat walking on a beach","seconds":"8","size":"1280x720"}'

# 轮询
curl -s https://<base_url>/v1/videos/<video_id> -H "Authorization: Bearer $KEY"

判据:提交响应里必须有 id 和 status;轮询到 status 变成 completed 之后,响应里才会出现可下载的地址。

形态二:提交、轮询、取结果

国内厂商更常见:任务 id 叫 task_id,状态接口是单独的路径,结果 URL 有效期有限。

curl -s https://<base_url>/v1/video/generations \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"model":"<model>","prompt":"...","duration":5}'
# => {"task_id":"..."}

curl -s https://<base_url>/v1/video/generations/<task_id> -H "Authorization: Bearer $KEY"
# => {"status":"succeed","data":{"url":"https://.../xxx.mp4"}}

形态三:同步返回(少见)

提交即返回 URL,或直接返回 base64。只适合极短、极低分辨率的场景,因为 HTTP 连接要挂几十秒,任何一层代理超时都会把连接掐断。

三种形态对照:

维度形态一形态二形态三
提交路径/v1/videos/v1/video/generations与提交同路径
关键字段id / statustask_id / statusurl
典型耗时30~180 秒20~300 秒5~20 秒
超时风险低(轮询是短连接)低高
结果保留常见 24 小时常见 1~24 小时可能立即过期

如果你的客户端或网关不擅长长连接,一律走形态一或形态二,不要碰形态三。

四个计量陷阱

陷阱一:按秒、按次、按 token,三种口径混在同一个站里

同一个站点上,模型 A 按「生成秒数 × 单价」计费,模型 B 按「每次调用固定价」计费,模型 C 按输入 token 加输出视频 token 计费。你在后台看到的「消耗」是一个混算后的数字,无法反推单价。

做法:给每个视频模型单独做一次「最小请求」记录 —— 同样的 prompt、最短时长、最低分辨率,记下扣费金额。这就是你的基准单价,后面所有异常都以它为参照。

陷阱二:分辨率和时长会改变单价,而倍率表只对文本定义

中转站的「倍率」通常按文本 token 定义。视频的 720p 与 1080p、5 秒与 10 秒,单价可能差 2~3 倍,而倍率表上只写一个数。

判据:同一 prompt 分别用 720p/5 秒和 1080p/10 秒各跑一次,比较扣费。如果倍数关系与厂商官方价目表不一致,说明中转站自己加了档位系数 —— 这时它欠你一份说明。

陷阱三:失败也扣费

生成失败(内容审核拒绝、上游超时、任务卡在 processing)之后扣费是否退回,各家不一致,而这一条几乎从不写在价目表上。

做法:故意提交一个必然被拒的 prompt,然后看扣费记录。这一条比读十页条款有效。

陷阱四:结果 URL 会过期

返回的 url 通常是对象存储的预签名地址,有效期从几分钟到 24 小时不等。过期之后,你既取不回这个视频,中转站通常也不提供「重新签发」接口。

唯一正确的做法是拿到 URL 后立刻下载落地,不要把它存进数据库当永久链接。

六步验收清单

步骤动作判据
1提交最小请求拿到 id 或 task_id,HTTP 200
2轮询到终态状态从 processing 变为 completed,且终态明确(不能永远停在 processing)
3立即下载curl -o out.mp4 之后 [ -s out.mp4 ] 为真,且大小 > 100KB
4校验媒体参数ffprobe 读出的时长、分辨率与请求一致
5核对扣费后台消耗等于第 1 步记下的基准价
6重试一次同一请求再提交一次,确认不会「重复扣两次、只成功一次」

第 4 步是最容易省掉、也最容易暴露问题的一步。请求 10 秒、实际只给 5 秒这种事在中转站上真实发生过 —— 上游按档位取整,网关没有校验。

ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height,duration \
  -of csv=s=x:p=0 out.mp4
# 期望输出形如 1280x720x8.000000

什么时候值得走中转

视频生成走中转,只在两种情况下划算:

  1. 你需要多家视频模型做对比,又不想为每家单独开户、单独充值;
  2. 你的业务在国内,而厂商只接受境外支付,中转是唯一现实的结算方式。

反过来说,如果你用量稳定、只用一个模型,直接对接厂商更便宜也更好排查 —— 视频这类接口的中间层并没有带来协议统一的好处,只多了一个可能出错的环节。

小结

  1. 视频没有统一协议,三种形态决定了你的代码怎么写;
  2. 单价必须自己测,按秒、按次、按 token 三种口径不能混算;
  3. 分辨率与时长会改变单价,而倍率表通常不覆盖;
  4. 失败是否退费,用一个必然失败的请求去测;
  5. 结果 URL 会过期,拿到就落地;
  6. 一次成功生成不等于验收通过,要用 ffprobe 量出来的参数说话。

这篇文章对你有帮助吗?如果你在实际使用中发现了文中没提到的情况,欢迎 提交纠错或补充,我们会核验后更新到正文里。

相关文章

MCP 经中转站:哪些能通、哪些一定不通,以及怎么在十分钟内测出来

2026-10-19

中转站选型决策树:从你的场景倒推到站点

2026-10-07

日志与对账:把 token 消耗算到项目维度

2026-10-06

灰度切换供应商:不中断业务地换掉一家 API 站

2026-10-06

自建探针:二十行脚本监控你的 API 供应商

2026-10-06

IP 白名单、子账号、权限分级:中转站的治理能力盘点

2026-10-06

顺着看下去:本站收录的部分中转站

本文没有指向特定模型系列,下面是本站收录站点中综合评分靠前的几家,供你顺着看下去。排序依据是评分与可用率,不构成推荐。

完整清单见 中转站导航,或按 模型系列 浏览。