A hummingbird hovers at a red trumpet flower in slow motion, wings beating in a blur as it sips nectar, soft morning garden light, macro detail. Natural sound: rapid wingbeat hum, gentle garden breeze, distant birdsong. Realistic wildlife documentary motion, no text, no logos.
Sora 2 Text to Video API
openai/sora-2/text-to-videoSora 2(Text to Video)将文本提示词转化为带原生立体声音效的 720p 高清视频,支持 4 至 20 秒固定时长与 16:9 或 9:16 画幅。它能够在严格遵循提示词物理规律与运镜轨迹的同时,呈现连贯的动作交互与拟真环境音场。
生成的视频会显示在这里
填写提示词并添加所需素材,确认设置后点击“运行”。
示例
REST API
快速开始
配置 API Key,提交生成指令,轮询获取 720p 视频与原生音频成片。
第一步:配置 API 鉴权
在请求头中携带 Authorization: Bearer <VIDGO_API_KEY> 完成身份验证。
- 任务提交端点
- POST
https://api.vidgo.ai/api/generate/submit - 鉴权请求头
- Authorization: Bearer VIDGO_API_KEY
第二步:提交文生视频任务
向 /api/generate/submit 发起 POST 请求,指定 model 为 openai/sora-2/text-to-video 并传入 input 参数。
REQUEST_BODY=$(cat <<'JSON'
{
"model": "openai/sora-2/text-to-video",
"input": {
"prompt": "An astronaut riding a horse across the surface of Mars, red dust blowing in the wind, dramatic sunset on the horizon, cinematic wide shot, slow motion, detailed space suit reflections, epic atmosphere, volumetric lighting, smooth camera tracking. Audio: wind howling, horse hooves on gravel, radio static breathing.",
"duration": 4,
"aspect_ratio": "16:9"
}
}
JSON
)
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")
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,失败时读取 data.error_message。
状态查询端点
GET https://api.vidgo.ai/api/generate/status/{task_id}使用 task_id 查询进度;not_started 或 running 时继续轮询,finished 或 failed 时停止。成功后读取 data.files[].file_url,失败时读取 data.error_message。
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-sora2-t2v-849120",
"status": "running",
"created_time": "2026-09-17T10: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
}
}完整代码示例
展开查看包含鉴权、提交、轮询与终态判断的自动化脚本代码。
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "openai/sora-2/text-to-video",
"input": {
"prompt": "An astronaut riding a horse across the surface of Mars, red dust blowing in the wind, dramatic sunset on the horizon, cinematic wide shot, slow motion, detailed space suit reflections, epic atmosphere, volumetric lighting, smooth camera tracking. Audio: wind howling, horse hooves on gravel, radio static breathing.",
"duration": 4,
"aspect_ratio": "16:9"
}
}
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
done请求参数
向 /api/generate/submit 提交时需传递的 input 参数配置:
| 字段 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
| prompt | string | 必填 | — | 生成提示词,去除首尾空格后至少包含 1 个字符。 |
| duration | integer | 可选 | 4 | 视频时长(秒),支持 4, 8, 12, 16, 20。 |
| aspect_ratio | string | 可选 | 16:9 | 画幅比例,支持 16:9 或 9:16。 |
响应字段
提交任务成功后返回的数据结构,以及状态查询接口响应:
| 字段 | 类型 | 描述 |
|---|---|---|
| code | integer | 业务状态码,200 表示成功。 |
| message | string | 业务返回消息或异常描述。 |
| data.task_id | string | 全局唯一的异步任务标识流水号。 |
| data.status | string | 当前状态:not_started(排队中)、running(生成中)、finished(已完成)、failed(失败)。 |
| data.created_time | string | 任务创建时间(ISO 8601 格式)。 |
| data.files[] | array | 任务成功生成的文件列表。 |
| data.files[].file_url | string | 成片 MP4 文件的持久化下载与播放链接。 |
| data.error_message | string | null | 任务失败时的详细错误说明。 |
任务状态流转
轮询过程中,依据 data.status 判断任务执行阶段:
not_started任务已被系统受理入队,正等待计算节点分配。
running正在执行扩散模型视频降噪与音轨渲染,持续轮询此状态。
finished生成成功,从 data.files[0].file_url 读取成片链接,终止轮询。
failed任务执行异常终止,读取 data.error_message 查看原因并终止轮询。
轮询与重试建议
- 身份认证请求头必须携带 Bearer API Key,若收到 401 请检查密钥有效性。
- 参数校验收到 400 时核对 prompt 长度、duration 取值与 aspect_ratio 枚举范围。
- 轮询频次建议初始轮询间隔设为 2–3 秒,随着任务持续可逐步放缓,避免高频请求。
- Webhook 回调支持在提交请求顶层配置 callback_url,成片完成后系统将主动推送任务结果。
端点规格
| 规格项 | 取值 | 说明 |
|---|---|---|
| 输入方式 | 纯文本 | 通过 prompt 描述场景、主体、运镜与声音。 |
| 输出形式 | MP4 视频(含原生音频) | 异步生成成片,任务完成后提供下载播放链接。 |
| 可选时长 | 4 / 8 / 12 / 16 / 20 秒 | 默认预设为 4 秒。 |
| 画幅比例 | 16:9 / 9:16 | 默认预设为 16:9。 |
| 原生分辨率 | 720p | 横屏 1280x720,竖屏 720x1280。 |
| 计费基准 | 按时长阶梯计费 | 4s=48, 8s=96, 12s=144, 16s=192, 20s=240 积分。 |
Sora 2 Text to Video
Sora 2 Text to Video 是 OpenAI 研发的文本生成视频模型。通过纯文本描述即可生成 720p 分辨率、包含动作与环境音效的原生同步视频。支持 4、8、12、16 与 20 秒固定时长档位,适合从文字创意快速验证动态镜头、叙事节奏与视听氛围。
为什么选择此端点?
文字驱动视听成片直接通过自然语言构筑主体形象、空间环境与镜头轨迹,无需提前准备或上传任何静态参考素材。
原生音画联合生成视频生成时随画面同步合成环境底噪、碰撞声效与氛围声音,无需外挂音轨或后期拼接。
物理模拟与运动规律遵循真实重力惯性、动量碰撞与三维空间规律,人物动作、动物动态与复杂交互更加自然连贯。
可预测的固定档期预算提供 4s、8s、12s、16s、20s 精确阶梯时长,按预置积分清晰核算生成预算,便于商业量产与排期规划。
横屏竖屏灵活构图支持 16:9 横屏与 9:16 竖屏两种标准画幅,适配影视剪辑素材与社交媒体短视频传播需求。
高效异步任务架构单次 POST 请求提交即刻返回全局任务 ID,结合状态轮询与 Webhook 回调,稳定集成进生产管线。
参数说明
| 参数 | 要求 | 说明 |
|---|---|---|
| prompt | 必填 | 字符串。详细描述主体形象、场景环境、摄像机运动、光影氛围与音效设计;去除首尾空格后至少 1 个字符。 |
| duration | 可选 | 整数。设置生成视频的时长(秒);体验区默认预设为 4 秒。 默认值 48121620 |
| aspect_ratio | 可选 | 字符串。控制视频画幅比例;可选 16:9(默认,1280x720)或 9:16(720x1280)。 默认值 16:99:16 |
使用流程
获取 API Key在控制台申请 API Key,并在请求头中携带 Authorization: Bearer <API_KEY>。
配置按需积分根据选定的生成时长充值对应积分。4 秒成片消耗 48 积分,时长与费用成固定倍率增长。
提交生成请求向 /api/generate/submit 提交 prompt 及可选 duration、aspect_ratio,获取 task_id 轮询直至成功。
计费规则
Sora 2 采用明确的固定时长档位计费:4 秒 48 积分、8 秒 96 积分、12 秒 144 积分、16 秒 192 积分、20 秒 240 积分。所有档位均输出包含原生同步音频的 720p 视频。基准计费口径为 2,000 积分 / 10 美元(约合 0.06 美元/秒),支持即用即付,无需绑定月费套餐。
| 规格 | 积分 | 说明 |
|---|---|---|
| 4 秒 | 48 积分(约 $0.24) | 默认时长档位,适合快速创意验证与短分镜构思。 |
| 8 秒 | 96 积分(约 $0.48) | 固定时长档位,适合叙事推进与中等动作镜头。 |
| 12 秒 | 144 积分(约 $0.72) | 固定时长档位,适合连贯情节展开与完整动作表演。 |
| 16 秒 | 192 积分(约 $0.96) | 固定时长档位,适合长镜头调度与复杂场景演进。 |
| 20 秒 | 240 积分(约 $1.20) | 单次最长连续生成档位,适合完整短视频与商业演示片段。 |
推荐应用场景
创意短片与故事分镜为影视前期制作快速生成动态视觉分镜,通过文字调度运镜角度与场景灯光,直观评估叙事节奏。
社交媒体商业营销结合 9:16 画幅与原生音效,批量生成吸引力强的高频短视频广告与社交营销素材。
AI 视频应用生态集成通过统一的 RESTful API 将 OpenAI 前沿视频生成能力无缝接入第三方生成式工具与创作平台。
教育与互动演示将抽象概念和自然现象用逼真的物理动态与声画同步生动呈现,制作高沉浸感课件演示。
创作技巧
- 在提示词中分别描述主体、动作、环境光影与声音要素,让模型全面捕捉视听细节。
- 使用推镜头、平摇、俯拍等明确摄影机语言,指导模型生成符合预期的多轴运镜轨迹。
- 初次验证概念建议使用 4 秒档位快速迭代构图,效果确认后再生成 12–20 秒完整长片段。
- 在提示词中清晰描述环境声音(如雨声、海浪声、脚步声),以引导模型合成高度契合画面的原生音轨。
使用说明
- Sora 2 文生视频输出为 720p 分辨率(横屏 1280x720 或竖屏 720x1280),内嵌原生音频轨道。
- 输入 prompt 去除首尾空格后需至少包含 1 个字符,模型会完整解析长提示词中的细节描述。
- 支持配置 callback_url 接收任务终态 Webhook 通知,建议轮询基准间隔为 2–3 秒。
Sora 2 Text to Video API — 常见问题
Sora 2 Text to Video API 是什么?
Sora 2 Text to Video 是 OpenAI 研发用于文本生成视频的模型。它根据文本提示词直接生成 720p 分辨率、包含动作与环境音效的原生同步视频,支持专业镜头运动与多画幅构图。基于 OpenAI 的多模态扩散架构,它在严格遵循真实物理规律与时空连贯性的同时,呈现生动的视觉细节与拟真音场。你可以通过 API 进行程序化调用,也可以在上方体验区直接在线试用。
Sora 2 文生视频能生成原生音轨吗?
能。模型在渲染画面的同时原生合成同步音轨,无需后置音频生成工具。在提示词中描写对白氛围、环境风雨声、脚步声或机械运转声,模型即可直接在成片 MP4 中内嵌贴合动作节拍的立体声音效。
Sora 2 文生视频单次最长支持多少秒?
单次调用最长支持生成 20 秒视频,提供 4、8、12、16 与 20 秒五档精确时长选择(体验区默认预设为 4 秒)。固定时长档位能够帮助开发者和制片团队在提交前精准计算任务预算并规划镜头衔接。
Sora 2 文生视频的分辨率是多少?
Sora 2 Standard 标准版固定输出 720p 分辨率。选择 16:9 画幅时为 1280x720,选择 9:16 画幅时为 720x1280,充分满足日常创意原型、社交媒体分发与多平台视频制作需求。
如何通过提示词控制 Sora 2 文生视频的运镜?
建议在提示词中独立使用明确的摄影机运动术语,例如“缓慢推进(slow push-in)”、“低机位平移跟踪(low-angle tracking shot)”或“环绕运镜(orbital camera movement)”,配合光影与速度描述,模型会精准遵循指令调度视角。
Sora 2 文生视频适合制作 9:16 竖屏内容吗?
适合。在参数中指定 aspect_ratio 为 9:16,模型会自动以 720x1280 竖屏构图生成画面。在提示词中重点规划纵向构图层次与主体走位,非常契合移动端短视频与故事类内容呈现。
需要 1080p 画质时该选择哪个 Sora 2 端点?
若项目需要 1080p 全高清输出,推荐选择 Sora 2 Pro Text to Video 旗舰端点。Pro 旗舰版提供 720p、1024p 和 1080p 选项,具备更细腻的画面质感、更丰富的光影层次与影视级动态表现。