Adobe 的音视频 API 是一套处理类接口,不是生成类接口。这套接口下面挂着五个服务,都通过 audio-video-api.adobe.io 访问,而且每一个的输入都是你已经有的媒体:一段录像、一个模板、一份转写稿,或者一行文本。如果你要找的是文生视频,那要的是 Firefly API 里的 post /v3/videos/generate,视频接口笔记讲的就是它。
本文画的是另一张图:哪个服务吃什么、每个端点每分钟允许几次、以及两处「看起来很正常但会被拒」的请求。
这套音视频 API 是什么
两个主机,两类任务
官方总览页用一句话概括了这套接口:「Audio/Video APIs offer automated audio/video content production at scale with AI.」所有服务共用一个主机,也共用同一对凭据:Authorization: Bearer <token> 与 x-api-key。
例外在「生成」这一侧。这五个服务没有一个能把提示词变成视频片段。Firefly API 的 Generate video 操作住在 firefly-api.adobe.io 的 /v3 下;这套接口住在 audio-video-api.adobe.io 的 /v1 下,Reframe v2 在 /v2。把两个主机混用是集成时的第一个错误,它会以一个权限错误的形式出现,而不是一句有用的提示。
音视频 API 的能力地图
每个服务吃什么、吐什么
五个服务的官方描述都很短,每一句都点明了输入与输出。

| 服务 | 输入 | 输出 |
|---|---|---|
| Dynamic Graphics Render | After Effects MOGRT 模板与编码预设 | 渲染好的视频变体,单次最多 500 个 |
| Reframe | 你已有的视频,外加叠加素材 | 换了画幅的同一段素材 |
| TLS | 音频或视频,或你提供的转写稿 | 转写稿、字幕、配音媒体、口型同步 |
| Text to Speech | 纯文本或 .txt,最多 20,000 字符 | 指定声音的语音 |
| Text to Avatar | 文本或音频,加 avatar ID 与 voice ID | 可换背景的虚拟人视频 |
这张表就是整条边界。Transcribe 是唯一返回文本的服务;Dub 与 Reframe 返回媒体;Text to Speech 返回音频;Text to Avatar 返回视频。Dynamic Graphics Render 比较特殊,它的输入是模板,而不是拍好的素材。
用 TLS API 转写与配音
翻译只和转写同一次发生
TLS 指南把这件事拆成三步:「transcription, translation, and dubbing」。Transcribe 做第一步,并且在你传入 targetLocaleCodes 时把第二步一起做掉。它返回一份文本转写稿;如果你要求字幕,还会附带一个 SRT 文件。
curl --location 'https://audio-video-api.adobe.io/v1/transcribe' \
--header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
--header "x-api-key: $ADOBE_CLIENT_ID" \
--header 'Content-Type: application/json' \
--data '{
"video": {
"source": { "url": "<pre-signed URL of the source mp4>" },
"mediaType": "video/mp4"
},
"targetLocaleCodes": ["de-DE"],
"captions": { "targetFormats": ["<your_target_caption_format>"] }
}'
有两条官方限制要提前设计进去。Transcribe「can’t re-translate a source transcript」,翻译只和转写同时发生——想修一版译文,得重新转写一次,而不是拿改好的稿子再翻一遍。另外,配音请求里的 transcripts 数组「should contain only one URL」。
Dub 是更宽的那个服务。它一次做完全部三步,也可以接收你已经改好的转写稿以便更精细地控制,lipSync 是请求参数之一。
curl --location 'https://audio-video-api.adobe.io/v1/dub' \
--header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
--header "x-api-key: $ADOBE_CLIENT_ID" \
--header 'Content-Type: application/json' \
--data '{
"audio": {
"source": { "url": "<pre-signed URL of the source mp3>" },
"mediaType": "audio/mp3"
},
"transcripts": [
{ "source": { "url": "<pre-signed URL of the edited transcript>" } }
],
"targetLocaleCodes": ["fr-FR"],
"lipSync": "false"
}' | tee dub.json
curl --location "$(jq -r .statusUrl dub.json)" \
--header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
--header "x-api-key: $ADOBE_CLIENT_ID"
Reframe v2:把已有素材重新构图
比例、像素与 sidecar 文件
Reframe 目前有两个端点,指南对选哪个毫不含糊:「The v1 API has more limited capabilities and may be deprecated soon. It’s recommended to use the v2 endpoint instead.」
curl --location 'https://audio-video-api.adobe.io/v2/reframe' \
--header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
--header "x-api-key: $ADOBE_CLIENT_ID" \
--header 'Content-Type: application/json' \
--data '{
"video": {
"source": { "url": "<pre-signed URL of the 16:9 source>" }
},
"analysis": { "sceneEditDetection": true },
"output": {
"renditions": [
{ "aspectRatio": { "x": 1, "y": 1 } },
{ "resolution": { "width": 1080, "height": 1920 },
"mediaDestination": { "url": "<pre-signed PUT URL>" } }
],
"layout": { "applyLetterboxing": true }
}
}'
curl --location "https://audio-video-api.adobe.io/v2/status/<jobId>" \
--header "Authorization: Bearer $ADOBE_ACCESS_TOKEN" \
--header "x-api-key: $ADOBE_CLIENT_ID" \
--header 'Content-Type: application/json'
Reframe 只重用你给它的东西。Adobe 写明「all content in the generated reframed output is derived solely from the original source video」,所以官方给出的画幅写成了「including but not limited to 4:3, 9:16, and 1:1」,而不是一份封闭清单。v2 增加了精确像素尺寸、用「a keyword or prompt」驱动的语义主体锁定,以及给 Premiere Pro 用的 otio 边车文件。输入上限是公布的:30 分钟、10 GB、.mp4 或 .mov、最高 4K。有一种组合会被直接拒绝:video.removeLetterboxing 与 output.layout.applyLetterboxing 不能同时为 true。
语音与虚拟人端点
声音、脚本与背景
剩下两个服务共用同一个 script 对象,所以一个包装函数就够了。
import os
import requests
BASE = "https://audio-video-api.adobe.io/v1"
HEADERS = {
"Authorization": f"Bearer {os.environ['ADOBE_ACCESS_TOKEN']}",
"x-api-key": os.environ["ADOBE_CLIENT_ID"],
"Content-Type": "application/json",
}
def start(kind, payload):
response = requests.post(f"{BASE}/{kind}", headers=HEADERS, json=payload, timeout=60)
response.raise_for_status()
body = response.json()
print(f"{kind}: job {body['jobId']} -> {body['statusUrl']}")
return body
start(
"generate-speech",
{
"script": {
"text": "Firefly renders this line as speech.",
"mediaType": "text/plain",
"localeCode": "en-US",
},
"voiceId": "<voice ID from the Voices List API>",
"output": {"mediaType": "audio/wav"},
},
)
Text to Speech 接收最多「20000 characters」的转写文本,形式可以是纯文本,也可以是预签名 URL 指向的 .txt 文件,再带上 Voices List API 里的 voiceId 和输出媒体类型;官方把渲染时长写成「2X the output audio length」。Avatar 端点用同一个 script 对象加一个 avatarId,它的 output.background.type 接受 video、image、color 与 transparent。Adobe 还公开了一条很坦白的限制:「Output videos may occasionally feature gesture mismatches.」两个服务都接入了内容真实性倡议,和商用资格页在模型侧追的是同一条溯源线索。
逐端点限额与作业模型
官方公布的每分钟数字
每个端点都有自己的请求限额,全部按组织计算。
| 端点 | 官方公布的限额 |
|---|---|
/transcribe | 每分钟 5 次 |
/dub | 每分钟 5 次,每天 150 次 |
/reframe | 每分钟 2 次 |
/generate-speech | 每分钟 10 次 |
/voices 与 Get Actors | 每分钟 50 次 |
| Text to Avatar | 每分钟 5 次 |
/status/{jobId} | 每分钟 100 次 |
| Cancel 与 List Render Jobs | 每分钟 2 次 |
有三个细节比数字本身更重要。这些限额是按端点各算的,和 Firefly API 那种全组织两个数字不同,所以一条配音流水线和一条重构画幅的流水线分别占用各自的额度——Firefly API 限流笔记讲的是另一半。Cancel 与 List Render Jobs「apply only to render jobs submitted via POST /v1/templates/render」,它们不是另外四个服务的通用作业管理接口。还有一点:所有作业都返回 202 与 jobId、statusUrl;Reframe 在运行期间会多给一个 percentCompleted。
常见问题
这些接口里有能把提示词变成视频的吗? 没有。它们做转写、配音、重构画幅、语音合成和虚拟人。文生视频在另一个主机上的 Firefly API 里。
Transcribe 和 Dub 有什么区别? Transcribe 把语音转成文本,并且可以在同一次调用里翻译。Dub 一次完成三步,还能选择口型同步。
已经做好的转写稿能再翻译一次吗? 不能。翻译只会和源媒体的转写同时发生。
这些服务有公开报价吗? 音视频 API 的单次调用价格官方未公布,消耗量写在 Adobe 的 Operations 费率卡上。
把这套接口当成 Firefly Services 的后期那一半:文本进去,媒体出来,全程异步。接口参考讲的是同一平台上生成的那一侧。