AI
视频与配音
基于 Queues 的异步视频、语音合成、价格与限制、任务接口与提供方密钥。
开始之前
视频与配音通过内置的提供方适配器运行,Live 模式需要把 DASHSCOPE_API_KEY 设为 Worker secret(见 AI 总览)。未设置时,Live 模式会隐藏这些模型,工作室会说明原因。Mock 模式不需要密钥,提供可播放的示例媒体。
视频
| 配置 | 取值 |
|---|---|
| 时长 | 2 到 10 秒 |
| 分辨率与价格 | 480P 每秒 6 积分,720P 每秒 12 积分,1080P 每秒 23 积分 |
| 画幅 | 16:9、9:16、1:1、4:3、3:4 |
| 输入 | 文字,或文字加媒体库中的首帧图片(图生视频输出 1:1) |
| 声音 | 默认随视频生成,audio 设为 false 时关闭 |
一段 5 秒 720P 的视频会预占 60 积分。
视频任务如何执行
/app/video发送POST /api/ai/videos。服务端按分辨率 × 秒数计价,把积分预占、任务与 outbox 消息一起写入。- 队列消费者领取租约,由适配器提交提供方任务,并把任务 ID 记录下来。
- 释放租约,再用延迟消息(
JOBS.send(..., { delaySeconds }))稍后查询。请求中不会阻塞等待,用户可以关闭页面。 - 任务完成后,MP4 复制进 R2,经
/api/ai/assets/{id}/content以 Range 请求提供,播放器可以拖动。 - 首次领取 30 分钟后仍未完成的任务会失败并退还积分;每 5 分钟的 cron 还会回收过期租约。
{
"requestId": "0b8d5e2a-7f3c-4c1d-9a6e-2f4b8c1d3e5a",
"model": "your-video-model-key",
"prompt": "咖啡升起热气,镜头缓缓推进",
"resolution": "720P",
"ratio": "16:9",
"seconds": 5,
"audio": true,
"firstFrame": "可选的媒体库资源 ID"
}提示词最多 2,000 个字符。模型 key 来自 packages/ai/src/video.ts 中的 VIDEO_MODELS。
配音
| 配置 | 取值 |
|---|---|
| 音色 | 七个精选音色:中文旁白、新闻、纪录片与多情感风格,外加一个英文音色 |
| 文案 | 每段最多 2,000 字 |
| 价格 | 每千字 2 积分,向上取整,因此每段至少 1 积分 |
| 输出 | MP3,存入媒体库,可试听与下载 |
POST /api/ai/speech 接受 requestId、model、voice 与 text。任务同样先预占,再由 JOBS 领取租约、适配器合成,并像其他结果一样写入 R2。音色 key 与名称位于 packages/ai/src/speech.ts 的 SPEECH_MODELS。
共同行为
- 两个接口成功时都返回
201与任务,拒绝时与生图一样返回402、429或503。 GET /api/ai/tasks/{id}查询进度;POST /api/ai/tasks/{id}/cancel取消排队中的任务并退还积分。- 当
ai.refundOnContentRefusal为true时,提供方的内容拒绝会退还积分。 - 每个任务的预估上游花费都计入
ai.dailyBudgetUsd。
排障
- Live 模式看不到模型: 当前环境没有设置提供方密钥。
- 一直显示生成中: 确认队列消费者已部署、
JOBS绑定存在、cron 触发器在运行。30 分钟后任务会失败并退还积分。 - 视频无法拖动: 通过支持 Range 请求的
/api/ai/assets/{id}/content加载,而不是复制出的地址。