视频译制配音
上传一段视频或音频,指定源语种、目标语种和音色,服务端把其中说的话翻译成目标语种,逐句重新配音,再按原片的说话位置铺回去:全片统一语速,字幕随配音卡点。视频交付配音成片与可精修的工程文件;音频交付配音音频。
本能力只替换音轨,不改画面:不做口型同步、不改镜头。
配音能「听着均匀」,靠的是翻译时就按每句原有时长控制译文长度,合成后全片只用一个统一倍率,逐句只在窄带内微调。剩下的差额按「借用句间空隙 → 邻句让位 → 改写 → 上浮 → 冻结帧或截尾」的顺序兜底,每一步都如实写进产物的 report 与逐句对齐记录。
与相关能力的区别:
创建任务
基本信息
| 项目 | 值 |
|---|---|
| 请求方法 | POST |
| 请求路径 | /task/video_translate_dub |
| Content-Type | application/json |
| 鉴权方式 | Authorization 请求头(直接传 API Key) |
请求参数(Body)
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
file_id | string | 是 | — | 源文件 ID(已上传的视频或音频),时长不超过 120 分钟。传音频时交付配音音频,见下文「音频输入」 |
source_lang | string | 是 | — | 源语种,传标准地区语言码。当前支持:zh-CN、zh-HK、en-US、ja-JP、ko-KR、fr-FR、de-DE、es-MX、pt-BR、th-TH、id-ID、ms-MY、fil-PH、ar-SA(zh-CHS / zh-CHT 按 zh-CN 处理)。越界返回参数错误并列出可用语种;不提供自动识别,请如实传入 |
target_lang | string | 是 | — | 目标语种,传标准地区语言码。合法集合随 speaker 而定:speaker=clone 时为 zh-CN、zh-HK(粤语)、en-US、ja-JP、ko-KR 五种;speaker 为音色代号时须属于该音色登记的语种(见音色清单)。越界返回参数错误并列出可用语种 |
speaker | string | 是 | — | 音色。传 clone 表示克隆源片说话人的声音(服务端自动从源片人声里选出干净的单人声段作参考,也可以用 ref_file_id 指定参考);传音色清单里的音色代号表示用该音色配音。部分内部专属音色仅矩阵成员可用。发起本任务即视为您已按用户协议对被克隆声音的自然人取得单独同意,且不会将生成语音用于冒充等用途 |
ref_file_id | string | 否 | 从源片选参考 | 克隆参考媒体的文件 ID,仅 speaker=clone 时有意义(其余音色下忽略)。音频或视频均可,总时长 3 秒到 30 分钟,其中至少要有 3 秒连续、清晰、单人说话的人声。传了则只从该媒体选参考段。参考媒体的时长不参与计费。合规提示同 speaker |
ref_lang | string | 否 | 同 source_lang | 参考段的语种,仅 speaker=clone 时有意义,支持 zh-CN、zh-HK(粤语)、en-US、ja-JP、ko-KR |
keep_bgm | boolean | 否 | true | 是否保留源片伴奏。源片确有伴奏时,成片保留原伴奏并另出一条伴奏轨;纯口播源片不做分离,成片音轨即配音轨 |
fit_policy | string | 否 | natural | 时长拟合策略。natural:允许少量冻结帧延长,成片不超过源片时长的 103%;strict:成片与源片等长(容差 1 帧),放不下的句尾截掉,每句最多 0.3 秒 |
speed_band | number[] | 否 | [0.95, 1.15] | 全片语速倍率允许带 [min, max],须满足 0 < min ≤ max ≤ 1.3;越界返回参数错误、不做静默钳位。不做逐句减速:译文偏短的句子把差额留作停顿 |
subtitle | string | 否 | soft | 字幕形态:none 不出字幕;soft 产出字幕文件、成片不烧录;burn 按 subtitle_type 把译文烧进成片;bilingual_burn 译文与源文两行一并烧录,并另出双语字幕文件。源文件为音频时只支持 none 与 soft |
subtitle_type | string | 否 | default | 烧录字幕样式,仅 burn / bilingual_burn 时生效,取值与智能字幕一致:default / outline / cinema_yellow / immersive_box / wide_spacing / deep_shadow / boxed(大小写与写法归一);认不出的值按缺省样式处理 |
project_formats | string[] | 否 | ["gtrk"] | 工程文件格式,取值与智能口播剪辑一致:gtrk(同合云客户端工程)/ xml(Premiere Pro)/ fcpxml(Final Cut Pro)/ otio(OpenTimelineIO)/ jianying(剪映)/ capcut(CapCut),可多选,每种格式在 files[] 里各占一条。源文件为音频时不产出工程文件,本参数被忽略 |
source_path | string | 否 | — | 原片在你剪辑环境中的本机完整路径(如 D:/clips/talk.mp4),原样写进工程文件的原片素材路径;服务端不校验存在性、不改写法。不传时为占位文件名。源文件为音频时忽略 |
local_output_dir | string | 否 | — | 你把本任务产物下载到本机的目录;给了则工程文件里配音轨、伴奏轨、延长底片的素材路径写成「该目录 + dub.wav / bgm.wav / base.mp4」,下载时请保持这三个文件名。不传时为占位文件名。源文件为音频时忽略 |
struct_meta | object | 否 | — | 同智能口播剪辑:nle_draft_dir 为该草稿在剪映 / CapCut 草稿目录里的完整文件夹路径(兼容旧名 capcut_draft_path)。给了才产出 draft_meta_info.json,剪映 / CapCut 才能在草稿列表里看到 |
未在上表列出的参数会被忽略,按缺省处理。
计费说明
- 按源文件分钟数计费(服务端探测的时长为准),计量单位是分钟,按实际时长比例计算后向上取整到整积分,任何任务至少 1 积分。
- 音色不影响单价:同一段源片用
clone或任意音色,扣费相同。 - 参考媒体的时长不参与计费。
- 单价见价格页「视频译制配音」(当前 50 积分 / 分钟,以价格页为准)。
- 建单阶段的参数错误不建任务、不计费;任务执行失败时已预扣的积分全额退还。
请求示例
curl -X POST https://api.ai-mcn.tv:10000/task/video_translate_dub \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_id": "537489015178246",
"source_lang": "zh-CN",
"target_lang": "en-US",
"speaker": "clone",
"fit_policy": "natural",
"subtitle": "soft",
"project_formats": ["gtrk", "jianying"]
}'
成功响应示例
{
"code": 200,
"msg": "success",
"data": {
"task_id": "537489015178247",
"task_type": "video_translate_dub",
"status": "queued"
}
}
查询任务结果
基本信息
| 项目 | 值 |
|---|---|
| 请求方法 | GET |
| 请求路径 | /task/video_translate_dub/{task_id} |
| 鉴权方式 | Authorization 请求头(直接传 API Key) |
响应参数(output_result)
成片与纯配音轨是核心产物;伴奏轨、字幕、逐句对齐记录、工程文件是衍生产物,单项失败不影响任务完成,原因写在 errors 对应键里。逐句明细只在逐句对齐记录文件里,output_result 的体积与源片时长无关。
| 参数名 | 类型 | 说明 |
|---|---|---|
output_file_id | string | 目标语种配音成片(mp4)的文件 ID;源文件为音频时是配音音频(mp3),保留伴奏时已混入原伴奏 |
output_file_download_url | string | 成片或配音音频的下载路径 |
dub_audio_file_id | string | 纯配音轨(wav,不含伴奏)的文件 ID |
dub_audio_file_download_url | string | 纯配音轨下载路径 |
bgm_audio_file_id | string | 伴奏轨(wav)的文件 ID。仅在 keep_bgm=true 且源片确有伴奏时出现 |
bgm_audio_file_download_url | string | 伴奏轨下载路径 |
base_video_file_id | string | 延长后底片(静音、无字幕)的文件 ID。仅在 natural 策略下发生冻结帧延长时出现,工程文件以它为底片 |
base_video_file_download_url | string | 延长后底片下载路径 |
subtitle_file_id | string | 译文字幕文件(.srt)ID;subtitle=none 或生成失败时为空串,失败原因见 errors.subtitle |
subtitle_file_download_url | string | 译文字幕下载路径 |
bilingual_subtitle_file_id | string | 双语字幕文件(.srt,每条两行:译文在上、源文在下)ID;仅 subtitle=bilingual_burn 时产出,否则为空串 |
bilingual_subtitle_file_download_url | string | 双语字幕下载路径 |
transcript_file_id | string | 逐句对齐记录(UTF-8 JSON)的文件 ID,字段见下文 |
transcript_file_download_url | string | 逐句对齐记录下载路径 |
report | object | 有界汇总,字段见下表 |
files | array | 工程文件列表,形状与智能口播剪辑一致:每条 {type: "project", format, file_id, download_url, filename}(如 gtrk → project.gtrk)。源文件为音频时为空数组 |
errors | object | 衍生产物的局部失败原因,可能的键:bgm / base_video / subtitle / bilingual_subtitle / transcript / project。全部成功时为空对象 |
report 常用字段
| 字段 | 类型 | 说明 |
|---|---|---|
input_kind | string | 源文件类型:video 或 audio |
source_lang / target_lang | string | 源语种 / 目标语种 |
speaker | string | 音色(clone 或音色代号) |
fit_policy | string | 时长拟合策略 |
ratio | number | 全片统一语速倍率 |
over_band_lines | integer | 超出倍率带、需要兜底的句数 |
borrowed_total_ms | integer | 句间借时总毫秒 |
yielded_total_ms | integer | 相邻偏短句让出的总毫秒 |
delayed_lines | integer | 因前一句延长而推迟开口的句数 |
rewrite_lines | integer | 经过压缩改写的句数 |
rewrite_rounds_hist | object | 改写轮次分布("0" / "1" / "2" → 句数) |
freeze_total_ms | integer | 冻结帧总毫秒(音频输入为插入静音的总毫秒) |
freeze_points | array | 各处冻结,每项 [源时间点毫秒, 冻结毫秒] |
freeze_cap_hit | boolean | 冻结总量是否触到 3% 上限(触顶后按截尾处理) |
trimmed_lines | integer | 截尾句数 |
output_duration_ms / source_duration_ms | integer | 成片(或配音音频)时长 / 源文件时长,毫秒 |
bgm | string | 伴奏处理结果:kept 已保留;none 无伴奏(纯口播或 keep_bgm=false);dropped 请求保留但伴奏轨没能产出(原因见 errors.bgm) |
bgm_ratio | number | 源片伴奏能量占比的判定值 |
subtitle / subtitle_burned | string / boolean | 字幕形态 / 是否已烧进成片 |
lines_count | integer | 句数 |
ref | object | 克隆时选用的参考段:span_ms(起止毫秒)/ separated / gain_db / text_source / asr_confidence / ref_text / ref_lang / source(source_video 从源片选、ref_file 从上传参考选),字段含义同零样本音色配音。非克隆音色为 null |
逐句对齐记录(transcript_file_id 指向的 JSON)
顶层 {task_type, source_lang, target_lang, lines},lines 每句:
| 字段 | 类型 | 说明 |
|---|---|---|
index | integer | 句序号,从 0 起 |
clip_id | string | 该句在工程文件配音轨里的片段 ID,改一句时用它定位;源文件为音频时为空串(无工程文件) |
src_text | string | 源语原文 |
src_st_ms / src_ed_ms | integer | 原文在源片里的起止毫秒 |
tgt_text | string | 译文(改写过的句为改写后文本) |
budget_chars | integer | 该句的译文字符预算 |
synth_ms | integer | 实际铺进配音轨的音频时长(变速句为变速后值) |
st_ms / dur_ms | integer | 该句配音在成片里的起点与时长,毫秒;字幕条起止与之相等 |
speed | number | 该句倍率 |
borrowed_before_ms / borrowed_after_ms | integer | 向前 / 向后空隙借到的毫秒 |
yielded_before_ms / yielded_after_ms | integer | 从前一句 / 后一句的富余里让到的毫秒(邻句本身偏短时才有) |
delay_ms | integer | 本句因前一句向后延长而推迟开口的毫秒数,最多 500 |
pad_before_ms / pad_after_ms | integer | 句前 / 句后留出的停顿毫秒 |
freeze_ms / trim_ms | integer | 该句的冻结毫秒 / 截尾毫秒 |
rewrite_rounds | integer | 该句改写轮次(0–2) |
action | string | 该句最终的兜底动作:fit 统一倍率即放下;borrow 借用相邻空隙;yield 借空隙之后再由相邻偏短的句让位放下;boost 倍率上浮;freeze 冻结帧延长;trim 截尾。改写过的句仍按最终动作记录,改写次数看 rewrite_rounds |
.gtrk 工程文件
project_formats 含 gtrk 时,files[] 里 format=gtrk 的文件是一份 gtrk v1 统一编辑契约,可导入同合云客户端,也可回传给工程文件生成转其他剪辑软件工程:
- 视频轨:底片一段全长、静音。发生冻结帧延长时底片是延长后底片(
base_video_file_id),否则是源片。 - 音频轨 0:配音轨,逐句一个片段,片段在轨上的区间等于该句配音起止,片段 ID 与逐句对齐记录的
clip_id一一对应。 - 音频轨 1:伴奏轨一整段(有伴奏时)。
- 传了
source_path与local_output_dir时,工程里的素材路径就是你的本机路径,下载到该目录后直接打开;没传时是文件名占位(源文件名、dub.wav、bgm.wav、base.mp4),请把对应产物下载到同一目录并按提示重新链接。 - 要剪映 / CapCut 草稿时再传
struct_meta.nle_draft_dir,并把draft_content.json与draft_meta_info.json放进这个文件夹,软件草稿列表里即可看到。
成功响应示例
{
"code": 200,
"msg": "success",
"data": {
"task_id": "537489015178247",
"status": "completed",
"progress": 100,
"output_result": {
"output_file_id": "537489015178301",
"output_file_download_url": "/download/c1/537489015178301.mp4",
"dub_audio_file_id": "537489015178302",
"dub_audio_file_download_url": "/download/c1/537489015178302.wav",
"base_video_file_id": "537489015178303",
"base_video_file_download_url": "/download/c1/537489015178303.mp4",
"subtitle_file_id": "537489015178304",
"subtitle_file_download_url": "/download/c1/537489015178304.srt",
"bilingual_subtitle_file_id": "",
"bilingual_subtitle_file_download_url": "",
"transcript_file_id": "537489015178305",
"transcript_file_download_url": "/download/c1/537489015178305.json",
"report": {
"input_kind": "video",
"source_lang": "zh-CN",
"target_lang": "en-US",
"speaker": "clone",
"fit_policy": "natural",
"ratio": 0.95,
"over_band_lines": 1,
"borrowed_total_ms": 200,
"yielded_total_ms": 0,
"delayed_lines": 0,
"rewrite_lines": 5,
"rewrite_rounds_hist": {"0": 3, "1": 2, "2": 3},
"freeze_total_ms": 431,
"freeze_points": [[2100, 392], [6160, 39]],
"freeze_cap_hit": false,
"trimmed_lines": 0,
"output_duration_ms": 35431,
"source_duration_ms": 35000,
"bgm": "none",
"subtitle": "soft",
"subtitle_burned": false,
"lines_count": 8,
"ref": {
"span_ms": [4000, 12900],
"separated": false,
"gain_db": -4.26,
"text_source": "asr",
"asr_confidence": 0.96,
"ref_text": "镜头背后有没有任何人?你不就面对一个镜头吗?",
"ref_lang": "zh-CN",
"source": "source_video"
}
},
"files": [
{"type": "project", "format": "gtrk", "file_id": "537489015178306", "download_url": "/download/c1/537489015178306.gtrk", "filename": "project.gtrk"}
],
"errors": {}
},
"create_time": "2026-09-17T02:20:03Z",
"update_time": "2026-09-17T02:35:53Z"
}
}
逐句对齐记录(transcript_file_id 指向的文件)示例,节选一句:
{
"task_type": "video_translate_dub",
"source_lang": "zh-CN",
"target_lang": "en-US",
"lines": [
{
"index": 1, "clip_id": "537489015178302-0002",
"src_text": "镜头背后有没有任何人?", "src_st_ms": 3804, "src_ed_ms": 6804,
"tgt_text": "Nobody is behind the camera, you just face a lens.", "budget_chars": 46,
"synth_ms": 3783, "st_ms": 3413, "dur_ms": 3783, "speed": 1.0,
"borrowed_before_ms": 83, "borrowed_after_ms": 83,
"yielded_before_ms": 308, "yielded_after_ms": 309, "delay_ms": 0,
"pad_before_ms": 0, "pad_after_ms": 0, "freeze_ms": 0, "trim_ms": 0,
"rewrite_rounds": 0, "action": "yield"
}
]
}
音频输入
file_id 指向音频(如 mp3、wav、m4a、ogg)时,走同一条译制流程,交付物不同:
output_file_id是目标语种配音音频(mp3),保留伴奏时已混入原伴奏;另有纯配音轨、伴奏轨(有则)、字幕文件与逐句对齐记录。- 不支持烧录字幕:
subtitle传burn或bilingual_burn会直接返回参数错误,不建任务、不计费。 - 不产出工程文件:
files为空数组,project_formats被忽略,逐句对齐记录的clip_id为空串。 natural策略下需要延长时,表现为在配音与伴奏的同一位置插入等长停顿,总时长同样不超过源文件的 103%。- 语种门、音色、时长上限与计费口径与视频相同。
错误码
| 错误码 | HTTP 状态码 | 说明 | 解决方案 |
|---|---|---|---|
6013 | 400 | 必填参数缺失(file_id / source_lang / target_lang / speaker) | 补齐参数 |
6016 | 400 | 业务参数非法:语种不在可用范围、音色不存在或不可用、fit_policy / subtitle / speed_band / keep_bgm / project_formats 取值非法、参考媒体短于 3 秒或长于 30 分钟、源文件为音频却要求烧录字幕等(响应中附具体原因) | 按响应提示修正参数 |
6019 | 400 | 源文件时长无效或超过上限(超过 120 分钟) | 分段后再提交 |
6014 | 400 | 文件类型与接口不匹配(需视频或音频) | 上传视频或音频文件 |
6004 | 404 | 源文件或参考文件不存在 | 检查 file_id / ref_file_id |
6502 | 401 | 鉴权失败 | 检查 Authorization 请求头 |
6201 | 402 | 额度不足 | 前往仪表盘充值 |
6202 | 402 | 余额不足 | 前往仪表盘充值 |
以上错误都发生在建单阶段:不建任务、不计费。执行期失败(翻译失败、配音合成失败、克隆时源片或参考里选不出满足条件的单人声段)时任务状态为 failed,已预扣的积分退还,失败原因写在任务的错误信息里。
使用限制
- 时长:源文件不超过 120 分钟。长片耗时较长,建议每隔 10–15 秒轮询一次。
- 一个音色:全片用同一个音色配音,暂不支持多人对话逐人配音;克隆时服务端会从源片里挑单人说话的片段作参考。
- 不改画面:只替换音轨,不做口型同步;
natural策略下偶尔出现的冻结帧是画面短暂定格,总量不超过源片时长的 3%,介意的话用strict。 - 语速:全片统一倍率落在
speed_band内;译文偏短的句子保留停顿,不会被逐句拉慢。 - 句子起点:某句译文偏长时,会先占用相邻偏短句的富余时间,这时该句会比画面里说话人略早开口,或下一句略晚开口,每侧最多 500 毫秒,逐句记录里的
yielded_*与delay_ms会如实写明。 - 伴奏:源片伴奏占比达到判定阈值时才分离伴奏,纯口播不分离;分离出的伴奏与配音混合后作为成片音轨。
- 克隆效果:零样本克隆的相似度受参考质量影响很大,跨语种(例如中文参考配英文)相似度会低于同语种。对音色要求高时,可以用
ref_file_id提供一段清晰、无混响的单人声参考。 - 字幕:字幕条起止与配音逐句起止完全一致,缺省去标点(口径同智能字幕)。
- 生成的语音与视频向公众发布或传播时,须依法以显著方式标识为 AI 生成内容。
🤝 加入同和新媒体矩阵,解锁内部成员权益:矩阵成员(internal)可使用 custom 域全库素材检索(视频 / 图片 / 音频,含概念素材与非商用素材,支持仅可商用过滤)与内部专属音色。前往 创作者网络 申请加入,审核通过后管理员将为你开通内部权限。