One continuous five-second shot at blue hour on a quiet covered train platform. A fictional adult woman in a mustard raincoat stands alone near a bench. A brief gust lifts the loose end of her red scarf; she turns once, catches it against her chest, then becomes still. The camera makes one slow, steady waist-height move from a medium-wide view to a medium view. Keep her face, coat, scarf, and body proportions consistent. Use natural weight shift, restrained cloth motion, and realistic light rain. Synchronized audio: soft rain on the canopy, one cloth snap, and distant rail ambience. No cuts, no extra people, no dialogue, no readable text, no logos, no products, no advertising, no watermark.
Seedance 2.5 Text-to-Video API
bytedance/seedance-2.5/text-to-videoSeedance 2.5(Text-to-Video)可根据提示词生成最长 30 秒的音画同步视频,并控制主体动作、运镜、光线、节奏和声音。模型可将详细的场景描述转化为连贯画面,同时生成对白、环境音、音乐和音效。
输入
输出
等待运行生成的视频会显示在这里
设置必填输入、分辨率和时长,然后运行任务。
继续使用
示例
REST API
快速开始
配置认证后提交 input 对象,再使用 task_id 查询视频生成结果。
连接 Vidgo API
创建 API Key,将其安全保存在服务端,并通过 Authorization: Bearer VIDGO_API_KEY 请求头发送。
- 端点
- POST
https://api.vidgo.ai/api/generate/submit - 认证
- Authorization: Bearer VIDGO_API_KEY
提交一个生成任务
使用当前模式的最小有效 payload 提交任务。成功后会立即返回 task_id,无需等待视频生成完成。
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "seedance-2.5/text-to-video",
"input": {
"prompt": "A tracking shot follows a tram through a rain-lit street.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "auto",
"generate_audio": true
}
}')
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"等待结果
使用 task_id 查询状态。状态为 not_started 或 running 时继续查询;变为 finished 或 failed 时停止,成功后从 data.files[].file_url 读取视频地址。
查询状态
GET https://api.vidgo.ai/api/generate/status/{task_id}建议约每 2 秒查询一次,任务运行时间较长时逐步增加间隔。只在 not_started 或 running 时继续查询;变为 finished 或 failed 后立即停止。也可以在提交请求顶层添加 callback_url。
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "running",
"created_time": "2026-08-22T10:00:00Z"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}完整可运行示例
展开后可查看完整脚本,其中包含 HTTP 与业务码检查、task_id 校验、轮询、终态处理和超时控制。
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "seedance-2.5/text-to-video",
"input": {
"prompt": "A tracking shot follows a tram through a rain-lit street.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "auto",
"generate_audio": true
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneinput 参数
下表列出 input 对象支持的字段;请求示例还会展示顶层必填字段 model。
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| prompt | string | 是 | — | 去除首尾空格后为 1–20,000 个字符。 |
| duration | integer | 是 | — | 闭区间 4–30 内的整数。 |
| resolution | string | 是 | — | 显式发送 480p 或 720p。 |
| aspect_ratio | string | 否 | — | auto、21:9、16:9、4:3、1:1、3:4 或 9:16。 |
| generate_audio | boolean | 否 | — | 是否请求生成音轨;体验区始终显式发送 true 或 false。 |
响应字段
提交成功后会立即返回任务信息;查询状态时可获取进度、输出文件或失败原因。
| 字段 | 类型 | 说明 |
|---|---|---|
| code | integer | 业务返回码;成功响应兼容 0 或 200。 |
| message | string | 接口返回的提示或错误信息。 |
| data.task_id | string | 用于状态查询路径的任务 ID。 |
| data.status | string | not_started、running、finished 或 failed。 |
| data.created_time | string | 任务创建时间。 |
| data.progress | integer | 任务进度,提供时取值为 0–100。 |
| data.files[] | array | 任务成功后返回的全部输出文件,顺序与接口响应一致。 |
| data.files[].file_url | string | 生成视频的公开地址。 |
| data.files[].file_type | string | 文件类型,例如 video。 |
| data.error_message | string | null | failed 状态下的错误详情。 |
任务生命周期
not_started 与 running 是非终态;finished 与 failed 是终态,遇到任一终态都必须停止轮询。
not_started任务已接收,正在等待执行。
running任务正在生成,继续使用同一 task_id 查询。
finished任务成功结束,从 data.files[].file_url 读取全部视频地址。
failed任务执行失败,读取 data.error_message 并停止轮询。
轮询与错误处理
- 认证失败401 表示 Bearer API Key 缺失或无效,修正密钥后再提交。
- 参数或余额错误400 可能表示字段无效、包含不支持的素材字段或积分不足,应先根据消息修正请求。
- 网络与超时网络请求失败不代表任务状态为 failed。请设置合理的超时时间,并重试状态查询。
- 轮询间隔初始间隔约 2 秒,长任务应逐步增加等待时间。
- 终态规则只在 not_started 或 running 时继续,finished 或 failed 都立即停止。
- 回调选项在请求顶层提供 callback_url,可接收最终任务对象;回调投递失败时仍可通过轮询查询结果。
模型规格
| 规格 | 取值 | 说明 |
|---|---|---|
| 输入模式 | 纯文本 | 提示词用于描述场景、动作、运镜和声音设计。 |
| 输出 | 视频任务 | 提交后返回异步任务 ID。 |
| 分辨率 | 480p / 720p | resolution 必填且应显式发送。 |
| 时长 | 4–30 秒 | 支持 4 至 30 之间的任意整数秒数。 |
| 画面比例 | auto + 6 种固定比例 | 支持 auto、21:9、16:9、4:3、1:1、3:4 和 9:16。 |
| 计费依据 | 输出秒数 | 480p 为 28 积分/秒,720p 为 63 积分/秒。 |
Seedance 2.5 Text-to-Video
Seedance 2.5 Text-to-Video 可将提示词转化为带同步音频的连续场景。可在提示词中定义主体与环境、安排动作顺序,并描述运镜、光线、节奏和声音,让生成的视频遵循统一的创作方向。
为什么选择此模式?
无需准备源素材只需描述主体、场景、动作和视觉风格,即可从零开始生成视频。
控制镜头内的动作顺序按开场、发展和收束写清动作,让场景按照预期顺序推进。
分别描述主体动作和运镜先写主体如何运动,再说明景别、机位、运镜和节奏,减少指令混淆。
按发布渠道选择画面比例先确定横屏、竖屏、方形或自适应比例,再安排人物位置和画面留白。
同步设计画面和声音需要对白、环境音、音效或音乐时,可在生成视频的同时创建音轨。
参数说明
| 参数 | 要求 | 说明 |
|---|---|---|
| prompt | 必填 | 字符串。描述场景、动作、运镜、画面风格和声音设计;去除首尾空格后长度为 1–20,000 个字符。 |
| duration | 必填 | 整数。设置 4–30 秒闭区间内的输出时长;体验区预选 5 秒。 |
| resolution | 必填 | 字符串。设置输出分辨率并必须显式发送;体验区预选 720p。 720p480p |
| aspect_ratio | 可选 | 字符串。控制输出画面比例;体验区预选并显式发送 auto。 auto16:99:161:121:94:33:4 |
| generate_audio | 可选 | 布尔值。请求生成音轨;体验区预选 true,并显式发送当前值。 truefalse |
使用方法
定义场景用主体、环境和视觉前提开场,例如:深夜,一名快递员穿过霓虹灯下的车站。
安排动作顺序按顺序写出具体动作:她查看站台、登上列车,车门关闭时又回头望了一眼。
单独描述运镜补充景别、角度和运镜,例如:平视中景跟拍,最后一个动作缓慢推近。
补充画面和声音风格最后写明需要贯穿全片的光线、色彩和氛围,以及环境音或音乐方向。
配置输出创作方向明确后,再选择时长、分辨率、画面比例和音频开关。
生成并检查结果运行任务后同时检查画面与音频;若时序、构图或场景关系不符合预期,再调整提示词继续迭代。
计费
价格只由输出时长和分辨率决定;音频开关不改变费率。
| 计费项 | 费率 | 说明 |
|---|---|---|
| 480p | 28 积分/输出秒($0.140/秒) | 4 秒为 112 积分($0.560),5 秒为 140 积分($0.700),30 秒为 840 积分($4.20)。 |
| 720p | 63 积分/输出秒($0.315/秒) | 4 秒为 252 积分($1.26),5 秒为 315 积分($1.58),30 秒为 1,890 积分($9.45)。 |
适用场景
广告创意样片将产品创意和镜头方案生成短视频,用于正式制作前的提案和创意评审。
剧情和镜头预演将剧本片段生成动态参考,用于讨论表演节奏、场面调度和镜头设计。
社交媒体创意适配将同一活动创意生成横屏、竖屏或方形视频方案,用于不同渠道的内容评审。
音乐视觉概念片结合画面变化、光线和声音设计,生成氛围短片或音乐视觉方案。
实用技巧
- 提示词可以按这个顺序组织:主体与场景、动作顺序、运镜、光线与氛围,最后补充声音设计。
- 不要只写“城市里的骑行者”,改成可见动作:骑行者转入雨夜小巷,摄影机贴近后轮横向跟拍。
- 包含多个动作时,使用“先、随后、最后”或连续时间段说明事件顺序。
- 主体运动和摄影机运动分句描述,让每条指令各自承担清晰角色。
- 短片聚焦一个连贯的视觉想法,不要让几个无关场景争夺有限时长。
注意事项
- 任务采用异步生成;请保存 task_id,并在状态变为 finished 或 failed 后停止查询。
Seedance 2.5 文生视频 API — 常见问题
Seedance 2.5 Text-to-Video API 是什么?
Seedance 2.5 由 ByteDance Seed 开发。Text-to-Video API 根据提示词异步生成视频。你还可以选择是否同步生成音频。
如何调用 Seedance 2.5 Text-to-Video API?
使用 Bearer API Key 向 /api/generate/submit 发起 POST 请求,将 model 设为 seedance-2.5/text-to-video,并把生成参数放入 input。提交成功后会立即返回 task_id;API 标签页和完整文档中提供了可运行示例。
查看完整 API 文档Seedance 2.5 Text-to-Video API 如何计费?
480p 为 28 积分/输出秒,720p 为 63 积分/输出秒。例如 5 秒 480p 为 140 积分($0.700),5 秒 720p 为 315 积分($1.58)。
Seedance 2.5 Text-to-Video API 接受哪些输入?
input 接受 1–20,000 字符的 prompt、4–30 秒整数 duration、480p 或 720p resolution,以及可选 aspect_ratio 和 generate_audio。
如何获取生成的视频?
使用 task_id 轮询 GET /api/generate/status/{task_id}。状态为 finished 时从 data.files[].file_url 读取视频地址;状态为 failed 时停止轮询并读取错误信息。也可以通过 callback_url 接收最终结果。
应该选择哪个 Seedance 2.5 端点?
场景只从文字开始时选择 Text-to-Video;已有必填首帧和可选尾帧时选择 Image-to-Video;不同素材需要分别承担外观、动作、镜头或声音角色时选择 Reference-to-Video。

