视频生成 API
通过文本提示或图片生成 AI 视频。三种输入模式:文生视频、图生视频(动画化照片)、角色一致性视频(通过 RealFace/虚拟肖像 asset_id)。模型:Seedance 2.5($0.315/秒,最长 30 秒)、Seedance 2.0($0.227/秒,最高 4K + RealFace)、Seedance 2.0 Fast($0.165/秒,支持 RealFace)、Seedance 1.5 Pro($0.070/秒,仅图生视频)、Sora 2($0.10/秒,仅 4/8/12 秒)。异步流程:提交 → 轮询 → 获取 MP4 链接。
基础 URL: https://api.jarvisclaw.ai/v1
认证
两种方式均支持:
| 方式 | Header | 描述 |
|---|---|---|
| API Key | Authorization: Bearer sk-... | 平台自动从你的 HD 钱包签名 x402 |
| 私钥 (x402) | SDK 自动处理 | Agent 直接用自己的钱包签名 x402 |
定价
视频按输出秒数计费(720p 基准),再乘以分辨率系数。把每秒单价乘以你请求的时长即为片段价格。
基础价(720p)
| 模型 | 价格/秒 | 5 秒片段 | 备注 |
|---|---|---|---|
bytedance/seedance-2.5 | $0.315 | 约 $1.58 | 最新一代,最长 30 秒,不支持 RealFace |
bytedance/seedance-2.0 | $0.227 | 约 $1.14 | 分辨率上限最高(4K),支持 RealFace |
bytedance/seedance-2.0-fast | $0.165 | 约 $0.83 | 60–80 秒出片,支持 RealFace |
bytedance/seedance-1.5-pro | $0.070 | 约 $0.35 | 仅图生视频,不支持 RealFace |
azure/sora-2 | $0.10 | 约 $0.50(4 秒) | 720p + 同步音频,仅支持 4/8/12 秒 |
xai/grok-imagine-video | $0.05 | 约 $0.25 | 快速,画质较低 |
模型 ID 是 azure/sora-2,不是 openai/sora-2。所有 Seedance 模型的图生视频与文生视频同价。
分辨率系数(Seedance)
更高分辨率消耗更多上游 token,系数大致随像素数相对 720p 缩放,并叠加在各模型自身的每秒单价上。 只有 bytedance/seedance-2.0 支持到 4K;1.5 Pro 上限 1080p;Seedance 2.5 与 2.0-fast 仅支持 480p/720p。
| 分辨率 | 系数 | 5 秒 (2.0) | 10 秒 (2.0) | 15 秒 (2.0) |
|---|---|---|---|---|
| 480p | 约 0.44× | 约 $0.50 | 约 $1.00 | 约 $1.50 |
| 720p | 1.0× | 约 $1.14 | 约 $2.27 | 约 $3.41 |
| 1080p | 约 2.25× | 约 $2.55 | 约 $5.11 | 约 $7.66 |
| 4K | 约 9.6× | 约 $10.90 | 约 $21.79 | 约 $32.69 |
360p、540p、1K、2K 任何模型都不支持,付款前即返回 400。其他模型请用基础价表里 自己的每秒单价乘以同一系数 —— 不要用 2.0 的价格换算。
公布价与实际结算金额
以上为参考价。上游按 token 计量 Seedance,实际结算按你请求的具体时长和分辨率计价, 精确金额请读响应中的 price.amount。
轮询任务状态免费 —— GET 复用原始支付。
端点
| 方法 | 端点 | 描述 |
|---|---|---|
| POST | /generations | 提交视频生成任务 |
| GET | /generations/:id | 查询任务状态/获取结果 |
| GET | /generations | 列出历史生成任务 |
POST /generations
提交视频生成任务。异步处理,返回任务 ID。
参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
model | string | 是 | 模型 ID(见定价表) |
prompt | string | 是 | 文本描述 |
duration_seconds | integer | 是 | 视频时长(秒),上限取决于模型:Seedance 2.5 最长 30 秒,Seedance 2.0 / 2.0-fast 最长 15 秒,Seedance 1.5 Pro 最长 12 秒,Sora 2 只接受 4/8/12 |
image_url | string | 否 | 图生视频:输入图片 URL |
real_face_asset_id | string | 否 | RealFace asset_id(仅 Seedance 2.0 / 2.0-fast,2.5 不支持);与 image_url 互斥 |
aspect_ratio | string | 否 | 画面比例:adaptive、16:9(默认)、9:16、1:1、4:3、3:4、21:9 |
resolution | string | 否 | 分辨率,默认 720p。各模型可选值不同:Seedance 2.5 与 2.0-fast 仅 480p/720p;1.5 Pro 另支持 1080p;2.0 另支持 1080p/4K |
响应
{
"id": "vgen_abc123def456",
"status": "processing",
"model": "azure/sora-2",
"prompt": "一只金色的鱼在珊瑚礁间游动,阳光透过水面折射",
"duration_seconds": 8,
"created_at": "2026-07-06T14:30:00Z",
"estimated_completion": "2026-07-06T14:32:00Z"
}GET /generations/:id
查询生成任务状态。完成后返回视频 URL。
响应(处理中)
{
"id": "vgen_abc123def456",
"status": "processing",
"progress": 65,
"estimated_remaining_seconds": 45
}响应(已完成)
{
"id": "vgen_abc123def456",
"status": "completed",
"url": "https://cdn.jarvisclaw.ai/videos/vgen_abc123def456.mp4",
"model": "azure/sora-2",
"prompt": "一只金色的鱼在珊瑚礁间游动,阳光透过水面折射",
"duration_seconds": 8,
"resolution": "1080p",
"aspect_ratio": "16:9",
"created_at": "2026-07-06T14:30:00Z",
"completed_at": "2026-07-06T14:32:15Z",
"cost": 0.80
}响应(失败)
{
"id": "vgen_abc123def456",
"status": "failed",
"error": {
"code": "content_policy_violation",
"message": "The prompt was rejected by the content safety filter"
}
}GET /generations
列出历史生成任务。
参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
limit | integer | 否 | 每页数量。默认:20 |
status | string | 否 | 过滤:processing、completed、failed |
代码示例
# 1. 文生视频
curl -X POST https://api.jarvisclaw.ai/v1/videos/generations \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "azure/sora-2",
"prompt": "A golden fish swimming through coral reefs with sunlight filtering through the water surface",
"duration_seconds": 8,
"resolution": "1080p"
}'
# 2. 查询状态
curl https://api.jarvisclaw.ai/v1/videos/generations/vgen_abc123def456 \
-H "Authorization: Bearer sk-your-api-key"
# 3. 图生视频
curl -X POST https://api.jarvisclaw.ai/v1/videos/generations \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-1.5-pro",
"prompt": "The person slowly turns and smiles at the camera",
"image_url": "https://example.com/portrait.jpg",
"duration_seconds": 5
}'
# 4. RealFace 视频
curl -X POST https://api.jarvisclaw.ai/v1/videos/generations \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-2.0",
"prompt": "This person is giving a presentation in a modern office",
"real_face_asset_id": "ta_real_7f8a9b2c",
"duration_seconds": 10
}'import requests
import time
BASE = "https://api.jarvisclaw.ai/v1/videos"
HEADERS = {
"Authorization": "Bearer sk-your-api-key",
"Content-Type": "application/json",
}
# 1. 提交文生视频任务
resp = requests.post(f"{BASE}/generations", headers=HEADERS, json={
"model": "azure/sora-2",
"prompt": "一只金色的鱼在珊瑚礁间游动,阳光透过水面折射",
"duration_seconds": 8,
"resolution": "1080p",
})
job = resp.json()
print(f"任务已提交: {job['id']}, 状态: {job['status']}")
# 2. 轮询直到完成
while job["status"] == "processing":
time.sleep(10)
resp = requests.get(f"{BASE}/generations/{job['id']}", headers=HEADERS)
job = resp.json()
print(f" 进度: {job.get('progress', '?')}%")
if job["status"] == "completed":
print(f"✅ 视频 URL: {job['url']}")
print(f" 费用: ${job['cost']:.2f}")
else:
print(f"❌ 失败: {job['error']['message']}")
# 3. 图生视频
resp = requests.post(f"{BASE}/generations", headers=HEADERS, json={
"model": "bytedance/seedance-1.5-pro",
"prompt": "这个人慢慢转头,对着镜头微笑",
"image_url": "https://example.com/portrait.jpg",
"duration_seconds": 5,
})
job2 = resp.json()
print(f"图生视频任务: {job2['id']}")
# 4. RealFace 角色一致性视频
resp = requests.post(f"{BASE}/generations", headers=HEADERS, json={
"model": "bytedance/seedance-2.0",
"prompt": "这个人在现代办公室里做演讲",
"real_face_asset_id": "ta_real_7f8a9b2c",
"duration_seconds": 10,
})
job3 = resp.json()
print(f"RealFace 视频: {job3['id']}")from jarvisclaw import VideoClient
import time
# x402 Agent 钱包 — 按秒自动付费
video = VideoClient(private_key="0x<evm-private-key>")
# 文生视频
job = video.generate(
"一只金色的鱼在珊瑚礁间游动,阳光透过水面折射",
model="azure/sora-2",
duration=8,
)
print(f"任务: {job.id}, 状态: {job.status}")
# 等待完成
while job.status != "completed":
time.sleep(10)
job = video.status(job.id)
print(f"视频 URL: {job.url}")
# 图生视频
job2 = video.generate(
"这个人慢慢转头微笑",
model="bytedance/seedance-1.5-pro",
image_url="https://example.com/portrait.jpg",
duration=5,
)
print(f"图生视频: {job2.id}")
# RealFace
job3 = video.generate(
"这个人在镜头前挥手打招呼",
model="bytedance/seedance-2.0",
real_face_asset_id="ta_real_7f8a9b2c",
duration=5,
)
print(f"RealFace: {job3.id}")
while job3.status != "completed":
time.sleep(10)
job3 = video.status(job3.id)
print(f"视频 URL: {job3.url}")package main
import (
"context"
"fmt"
"time"
jc "github.com/api-jarvisclaw/go-sdk/v2"
)
func main() {
ctx := context.Background()
vc, _ := jc.NewVideoClient(jc.WithAPIKey("sk-your-api-key"))
// 文生视频
job, _ := vc.Generate(ctx, &jc.VideoRequest{
Model: "azure/sora-2",
Prompt: "A golden fish swimming through coral reefs",
DurationSeconds: 8,
Resolution: "1080p",
})
fmt.Printf("任务: %s, 状态: %s\n", job.ID, job.Status)
// 轮询
for job.Status == "processing" {
time.Sleep(10 * time.Second)
job, _ = vc.Status(ctx, job.ID)
}
fmt.Printf("视频 URL: %s\n", job.URL)
}package main
import (
"context"
"fmt"
"time"
jc "github.com/api-jarvisclaw/go-sdk/v2"
)
func main() {
ctx := context.Background()
// x402 Agent 钱包 — 按秒自动付费 USDC
vc, _ := jc.NewVideoClient(jc.WithPrivateKey("0x<evm-private-key>"))
// 文生视频
job, _ := vc.Generate(ctx, &jc.VideoRequest{
Model: "azure/sora-2",
Prompt: "A golden fish swimming through coral reefs",
DurationSeconds: 8,
})
fmt.Printf("任务: %s\n", job.ID)
for job.Status == "processing" {
time.Sleep(10 * time.Second)
job, _ = vc.Status(ctx, job.ID)
}
fmt.Printf("视频 URL: %s\n", job.URL)
// 图生视频 — Go SDK 暂不支持 image_url 参数
// 请使用 cURL 或 Python SDK
}模型对比
| 特性 | azure/sora-2 | Seedance 1.5 Pro | Seedance 2.0 | Seedance 2.0 Fast | Seedance 2.5 |
|---|---|---|---|---|---|
| 文生视频 | ✅ | ❌(仅图生视频) | ✅ | ✅ | ✅ |
| 图生视频 | ✅(图中不得含人脸) | ✅ | ✅ | ✅ | ✅ |
| RealFace | ❌ | ❌ | ✅ | ✅ | ❌ |
| 时长 | 仅 4/8/12s | 最长 12s | 最长 15s | 最长 15s | 最长 30s |
| 分辨率上限 | 720p | 1080p | 4K | 720p | 720p |
| 同步音频 | ✅ | ❌ | ✅(可配置) | ✅(可配置) | ✅(可配置) |
| 生成速度 | 慢 (~2min) | 中 | 中 (~90s) | 快 (60–80s) | 中 |
| 价格/秒 | $0.10 | $0.070 | $0.227 | $0.165 | $0.315 |
限制
- 异步处理 — 所有视频生成为异步任务,需轮询获取结果
- 生成时间通常 60–180 秒 — 高分辨率需留更多余量;请轮询至
completed或failed - 内容审核 — 提示词经过安全过滤器;被拦截时任务返回
status: "failed"且retryable: false - 任务保留 48 小时 — 提交后 48 小时内可查询结果
- RealFace 仅限 Seedance 2.0 / 2.0-fast — 1.5 Pro、Sora 2 和 Seedance 2.5 都不支持
real_face_asset_id image_url与real_face_asset_id互斥 — 二者不能同时传- 时长上限按模型区分 — Seedance 2.5 最长 30 秒,2.0 / 2.0-fast 最长 15 秒,1.5 Pro 最长 12 秒
- 分辨率上限按模型区分 — 默认 720p;仅 2.0 支持 4K,1.5 Pro 上限 1080p,2.5 与 2.0-fast 上限 720p;
360p/540p/1K/2K任何模型都不支持 - Sora 2 时长离散 — 只接受 4、8、12 秒;传
duration_seconds: 5会被拒绝 - Go SDK 限制 —
Generate()目前不支持image_url和real_face_asset_id参数