Seedance 视频生成(按次 / 按秒)
seedance 是 API Key 使用的分组。当前开放 Fast / Mini 两个系列,共 4 个固定时长按次模型和 2 个可变时长按秒模型,输出均为 720p。固定档生成 10 秒或 15 秒;按秒档支持 5–15 秒的整数时长。调用采用异步任务方式:提交任务、保存任务 ID、轮询状态,完成后下载视频。
已上线模型与计费
| 模型 ID | 时长 | 清晰度 | 计费方式 | 标准售价 |
|---|---|---|---|---|
sd2.0-933-720p-fast-x10s | 固定 10 秒 | 720p | 按次 | 2.50 元/次 |
sd2.0-933-720p-fast-x15s | 固定 15 秒 | 720p | 按次 | 3.75 元/次 |
sd2.0-933-720p-fast-x5-15s | 5–15 秒整数,默认 5 秒 | 720p | 按秒 | 0.25 元/秒 |
sd2.0-mini933-720p-x10s | 固定 10 秒 | 720p | 按次 | 1.50 元/次 |
sd2.0-mini933-720p-x15s | 固定 15 秒 | 720p | 按次 | 2.25 元/次 |
sd2.0-mini933-720p-x5-15s | 5–15 秒整数,默认 5 秒 | 720p | 按秒 | 0.15 元/秒 |
以上为 2026-09-17 核对的 seedance 标准分组售价。bubu12key 采用 1 元 = 1 美元显示额度的站内计价口径,界面显示美元符号时保持相同数值,不再按外汇汇率换算。账户优惠及最终费用以控制台为准,最新价格可查看 公开价格接口。
按模型档位选择时长
固定档 x10s / x15s 无需传 seconds 或 duration,价格已包含整段视频,不再乘秒数。按秒档必须使用完整的 x5-15s 模型 ID,通过 seconds 指定 5–15 的整数,省略时默认 5 秒;也可用 duration,两个字段同时传入时必须一致。
所有档位输出均为 720p,无需传 resolution / size。实际可用模型以当前 Key 调用 GET /v1/models 的返回为准。
按秒档费用按每秒售价乘计费秒数计算:Fast 8 秒为 0.25 × 8 = 2.00 元,Mini 8 秒为 0.15 × 8 = 1.20 元。省略时长使用默认 5 秒时,分别为 1.25 元和 0.75 元。完整规则见 视频按秒计费。
鉴权与接口
API 根地址为 https://bubu12key.top,提交与查询请求使用:
Authorization: Bearer sk-你的APIKey
| 方法 | 路径 | 说明 |
|---|---|---|
GET | /v1/models | 查看当前 Key 可用模型 |
POST | /v1/videos | 提交任务,推荐使用 |
POST | /v1/videos/generations | 提交任务的兼容别名 |
GET | /v1/videos/{task_id} | 查询进度和结果地址 |
GET | /v1/videos/{task_id}/content | 通过 API 域名下载已完成的视频 |
快速开始:Mini 固定 10 秒
下面使用 Mini 固定 10 秒模型,标准售价为 1.50 元/次。示例为 Bash,需要安装 curl 和 jq;把 Key 替换为你自己的 Key。
BASE="https://bubu12key.top"
KEY="sk-你的APIKey"
# 确认可用模型
curl --fail-with-body -sS --max-time 30 "$BASE/v1/models" \
-H "Authorization: Bearer $KEY"
# 提交固定 10 秒任务;只需 model + prompt
R=$(curl --fail-with-body -sS --max-time 180 "$BASE/v1/videos" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2.0-mini933-720p-x10s",
"prompt": "一只纸飞机掠过安静的蓝色湖面,远景,柔和晨光,无文字,无人物"
}') || exit 1
ID=$(printf '%s' "$R" | jq -er '.id // .task_id') || exit 1
echo "任务 ID:$ID"
将模型改为 sd2.0-mini933-720p-x15s 即为 Mini 15 秒;Fast 系列同样按模型名选择 10 秒或 15 秒。拿到任务 ID 后使用下方轮询示例继续查询,不要反复提交同一个生成请求。
按秒调用:Mini 8 秒与 Fast 12 秒
两个按秒模型使用同一个提交接口。先设置环境变量 BUBU12KEY_API_KEY,下例生成 8 秒 Mini 视频,标准费用为 1.20 元:
export BUBU12KEY_API_KEY="sk-你的APIKey"
curl --fail-with-body -sS --max-time 180 https://bubu12key.top/v1/videos \
-H "Authorization: Bearer $BUBU12KEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sd2.0-mini933-720p-x5-15s",
"prompt": "一只纸飞机掠过安静的蓝色湖面,镜头平稳跟随,柔和晨光",
"seconds": 8,
"aspect_ratio": "16:9"
}'
生成 Fast 12 秒视频时,将请求体改为下面的 JSON,标准费用为 0.25 × 12 = 3.00 元:
{
"model": "sd2.0-933-720p-fast-x5-15s",
"prompt": "傍晚的城市街道,镜头跟随骑行者缓缓前进,暖色灯光,动作自然连贯",
"seconds": 12,
"aspect_ratio": "16:9"
}
seconds 使用整数,不填小数、"8s" 等带单位的文字,也不要超出 5–15 秒范围。duration 是同等约束的别名,建议每次请求只传一个时长字段。不要把按秒参数加到固定档上来改变时长。
提交后保存响应中的 id(为空时读取 task_id),再调用 GET /v1/videos/{task_id} 查询;与固定档共用下方状态说明和轮询下载示例。
六档共用参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 表中六个完整模型 ID 之一 |
prompt | string | 是 | 视频描述,支持中文长文本,包括 3700 余汉字的提示词;这不是精确的最大长度限制 |
seconds | integer | 否 | 仅 x5-15s 按秒档:5–15 秒,默认 5;固定档省略 |
duration | integer | 否 | seconds 的别名,范围和默认值相同;同时传入时必须一致 |
aspect_ratio | string | 否 | 支持 16:9、9:16、1:1、4:3、3:4、21:9、3:2、2:3;需要特定画幅时显式填写 |
images | string[] | 否 | 参考图片,最多 9 张,支持公网 URL 或 base64,也支持 4K 高分辨率参考图 |
metadata.video_urls | string[] | 否 | 参考视频公网 URL,最多 3 段,每段不超过 15 秒;可用 metadata.videos 作为别名,同类字段二选一 |
metadata.audio_urls | string[] | 否 | 参考音频公网 URL,最多 3 段,每段不超过 15 秒;可用 metadata.audios 作为别名,同类字段二选一 |
图片、视频、音频混合总数最多 15 个,同时满足各类数量上限。图片使用 images,视频和音频放在 metadata 中。提示词可用 @图片1、@视频1、@音频1 引用相应素材。
输出固定为 720p:例如 16:9 为 1280×720,9:16 为 720×1280。需要具体比例时请显式传入 aspect_ratio,不要把像素尺寸填入该字段。
参考素材字段和编号
图片、视频、音频各自从 1 编号,对应各自数组顺序。例如 @图片2 对应 images[1];@视频1 对应 metadata.video_urls[0]。先上传素材,再在提示词中说明它的用途。别名字段仍使用相同的引用标签。
9 张图片+3 段视频+3 段音频恰好达到 15 个上限。每段参考视频和音频的 15 秒限制是输入素材限制,输出时长由所选档位决定:固定档为 10 秒或 15 秒,按秒档由时长参数指定 5–15 秒。参考图片可以使用 4K 素材;公网地址需要直接返回文件,并在生成过程中保持可访问,不要使用需要登录的分享页或本地路径。
建议从少量明确分工的素材开始:1–2 张角色图、1 张场景图、1 段运镜视频及 1 段音频。多张素材应尽量保持风格一致,数量达到上限并不一定提高效果。
Fast 15 秒:图片、视频与音频混合参考
以下为 JSON 请求体示例。将示例素材地址替换为可由公网访问的真实文件;纯文生视频可省略 images 和 metadata。
{
"model": "sd2.0-933-720p-fast-x15s",
"prompt": "@图片1 保持角色外观,@视频1 参考动作节奏,@音频1 作为声音参考,在海边奔跑,阳光明媚",
"aspect_ratio": "16:9",
"images": ["https://example.com/reference.jpg"],
"metadata": {
"video_urls": ["https://example.com/motion.mp4"],
"audio_urls": ["https://example.com/sound.mp3"]
}
}
提示词与分镜写法
先指定主角、场景与素材用途,再按镜头顺序描述动作、景别、运镜和声音。长提示词可用自然段分开镜头,避免让同一个时刻发生互相矛盾的动作;台词尽量统一语言。
示例一:咖啡店对话
素材准备:@图片1 为主角,@图片2 为咖啡店场景,@视频1 为平稳推镜,@音频1 为轻柔环境声。选择任意一个已开放的固定 15 秒模型,将下面文字作为 prompt,并上传对应素材:
@图片1 是主角,场景采用 @图片2 的布置,运镜参考 @视频1,背景氛围参考 @音频1。
镜头一:从窗外缓慢推进到咖啡店内,主角捧着杯子坐在窗边,午后阳光落在桌面。
镜头二:切到主角半身近景,他望向门口,微笑着说“你终于来了”,保持人物外观一致。
镜头三:镜头拉回双人中景,朋友放下雨伞落座,两人自然交谈,杯中热气缓缓升起。
全片色调温暖,动作连贯,对话清晰,环境声轻柔。
示例二:山间动作氛围
素材准备:两张角色图、一张山路场景图、一段运动镜头参考和一段鼓点音频。把人物关系和镜头变化说清楚,动作复杂时减少镜头数量。
@图片1 的旅人是主角,@图片2 的同伴跟随,山路环境参考 @图片3,镜头运动参考 @视频1,节奏参考 @音频1。
镜头一:低机位跟随两人快步穿过竹林,衣摆随山风摆动,远处雾气缓缓流动。
镜头二:切到山路转弯处的远景,两人停下观察前方,主角示意同伴放慢脚步。
镜头三:缓慢推近主角的侧脸,再移向雾中的石桥,鼓点渐弱,以安静的远景结束。
冷色调,光影自然,人物比例稳定,镜头平稳,不出现突兀转场。
文字、对白和较长内容
- 需要字幕或广告语时,明确文字内容、颜色、位置和出现时机,优先使用常用字;生成后逐帧检查文字正确性。
- 连续对话可保持同一场景和缓慢运镜;追逐、打斗或场景跳转可拆成多个片段生成后剪辑。
- 固定档单次为 10 秒或 15 秒,按秒档单次为 5–15 秒;参考视频不会自动让输出时长增加。较长成片应分段制作。
任务状态与响应
提交响应示意:
{
"id": "task_xxx",
"task_id": "task_xxx",
"object": "video",
"model": "sd2.0-mini933-720p-x10s",
"status": "queued",
"progress": 0
}
完成响应示意。请读取实际返回的下载地址,不要自行拼接日期或文件路径:
{
"id": "task_xxx",
"task_id": "task_xxx",
"object": "video",
"model": "sd2.0-mini933-720p-x10s",
"status": "completed",
"progress": 100,
"url": "https://videos.bubu12key.top/videos/2026/09/13/task_xxx.mp4",
"result_url": "https://videos.bubu12key.top/videos/2026/09/13/task_xxx.mp4",
"metadata": {
"url": "https://videos.bubu12key.top/videos/2026/09/13/task_xxx.mp4"
}
}
| status | 处理方式 |
|---|---|
queued | 等待队列,继续轮询 |
in_progress / processing | 生成或转存中,继续轮询 |
completed / succeeded | 任务完成,读取结果地址下载 |
failed | 任务失败,读取错误信息 |
只根据 status 判断是否结束。progress 可能停留或回退,不能只看到 100 就开始下载。
响应字段说明
| 字段 | 说明 |
|---|---|
id / task_id | 提交后持久保存任务 ID,优先读取 id,为空时兼容 task_id |
created_at / completed_at | Unix 秒级时间戳;完成时间可以省略,不作为成功依据 |
seconds / size | 可选字符串,如 "10" 与 "1280x720";缺少它们不代表失败 |
metadata.url | 成功后的首选视频地址,未完成时可能为空或不存在 |
error | 失败信息,优先读取 error.message 与 error.code |
任务列表 GET /v1/videos 与删除 DELETE /v1/videos/{task_id} 当前未开放。创建路径不要追加模型名,使用 JSON 的 model 选择档位。提交和查询请用 Bearer Key,不能只传 X-Api-Key。
轮询并下载
接上面的 BASE、KEY、ID 变量,每 10 秒查询一次,最多查询 180 次(每次查询另有网络耗时)。达到等待上限时保留任务 ID,之后仍可继续查询。
for i in $(seq 1 180); do
R=$(curl --fail-with-body -sS --max-time 60 "$BASE/v1/videos/$ID" \
-H "Authorization: Bearer $KEY") || exit 1
ST=$(printf '%s' "$R" | jq -r '.status // empty')
echo "[$i] status=$ST"
case "$ST" in
completed|succeeded)
URL=$(printf '%s' "$R" | jq -er \
'[.metadata.url, .result_url, .url] | map(select(type == "string" and length > 0)) | first') || exit 1
curl --fail --location --retry 2 --max-time 900 "$URL" -o video.mp4 || exit 1
echo "已保存 video.mp4"
exit 0
;;
failed)
printf '%s' "$R" | jq '.error // .fail_reason // "生成失败"'
exit 1
;;
esac
sleep 10
done
echo "等待达到上限,请保留任务 ID 继续查询:$ID" >&2
exit 1
生成结果会自动转存
bubu12key 会在视频文件准备完成后提供下载地址。对外返回的 metadata.url、result_url、url 指向 videos.bubu12key.top 上的 MP4。客户端优先读取 metadata.url;为空时兼容 result_url / url。
完成后请及时下载到自己的存储。视频地址为临时保存服务,保留期限以当前服务策略为准,不提供永久保存承诺;文件清理后无法保证恢复。
| 下载方式 | 鉴权 | 适用场景 |
|---|---|---|
返回的 videos.bubu12key.top MP4 直链 | 无需 API Key | 推荐;支持 Range,适合播放、拖动和断点续传 |
GET /v1/videos/{task_id}/content | 当前路由无需 API Key | 简单下载;当前 API 代理不透传 Range,请用直链进行分段读取 |
保存文件前检查 HTTP 状态码。不要将 JSON 错误响应直接保存为 .mp4,也不要使用 HEAD 检查只注册了 GET 的 /content 路由。
提交请求超时不代表任务一定未受理,不要自动重提。查询时使用创建任务所属账户的 Key;查询出现暂时网络错误可以稍后重试同一个 ID。任务完成后推荐及时保存文件。
常见问题
| 现象 | 处理方法 |
|---|---|
401 | 检查 Key 是否有效,以及提交和查询请求是否带有 Bearer 鉴权头。 |
503 model_not_found | 核对完整模型 ID、Key 分组和模型权限,先查看 GET /v1/models。 |
400 / fail_to_fetch_task | 从 model + prompt 最小请求排查;核对画幅、素材字段和数量限制。 |
| 想生成 15 秒 | 选择相应的 x15s 固定模型,或选择 x5-15s 按秒模型并传 seconds: 15;不要在 x10s 请求中添加 15 秒参数。 |
| 时长参数报错 | 按秒档填写 5–15 的整数;省略默认 5。优先只传 seconds;同时传 duration 时两者必须一致。 |
| 长时间生成中 | 继续按间隔查询已有任务;客户端等待超时不代表任务失败,重新提交可能产生另一笔费用。 |
| 完成后下载失败 | 使用本次查询返回的最新地址,优先 metadata.url;记录下载 HTTP 状态码、任务 ID 和请求 ID,联系支持核查转存。 |
429 | 降低并发和查询频率,按 Retry-After 等待,或逐步延长重试间隔。 |
400 task_not_exist | 检查完整任务 ID 和查询 Key 所属账户。 |
status: failed | 读取 error;费用与退款以控制台账单为准,反馈问题时提供任务 ID 和请求 ID。 |