语音转文字(ASR)
将音频文件中的语音内容转换为文字,支持多语言识别,并可获取字级别或句子级别的时间戳信息。已有逐字稿时,可传入稿件做有稿对齐,直接拿到稿件每一句、每一个字的时间戳;多人对话可以区分说话人,每句标出是谁说的。
不想写代码? 在同合智创工具箱里直接上传文件处理,登录即用,结果与本接口一致。打开「语音转文字」→
创建任务
基本信息
| 项目 | 值 |
|---|---|
| 请求方法 | POST |
| 请求路径 | /task/asr |
| Content-Type | application/json |
| 鉴权方式 | Authorization 请求头(直接传 API Key) |
请求参数(Body)
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
file_id | string | 是 | — | 已上传音频或视频文件的 ID |
language | string | 否 | "zh-CN" | 音频语言代码,传标准地区语言码,完整列表见下方“支持的语言代码” |
word_level | boolean | 否 | false | 是否返回字级别时间戳。字级时间戳覆盖以下 18 个语种:zh-CN、zh-HK、en-US、ja-JP、ko-KR、fr-FR、de-DE、it-IT、es-ES、es-MX、pt-PT、pt-BR、ru-RU、ar-SA、fil-PH、id-ID、ms-MY、th-TH;其余语种开启后 word_tc_list 为空、word_count 为 0,句级结果与全文不受影响 |
script_text | string | 否 | — | 已知稿件文本,不超过 20000 个字符。传入非空稿件即进入有稿对齐模式:不做内容识别,按稿件产出时间戳 |
speaker_diarization | boolean | 否 | false | 为 true 时区分说话人:每句标出说话人编号,按「区分说话人」档单独计价 |
speaker_count | number | 否 | — | 已知的说话人数(2–10),只在 speaker_diarization: true 时有效;不传则自动判断 |
支持的语言代码
language 参数应传标准地区语言码。当前实现共支持 103 个可传入值:
传入清单之外的代码会在建单时同步返回
400/ 错误码6015,不计费、不排队; 错误信息里会给出可行动的替代码(例如粤语请用zh-HK)。
请求 language | 语言名称 |
|---|---|
zh-CN | 中文 (中国) |
en-US | 英语 (美国) |
ja-JP | 日语 (日本) |
ko-KR | 韩语 (韩国) |
fr-FR | 法语 (法国) |
de-DE | 德语 (德国) |
es-MX | 西班牙语 (墨西哥) |
es-ES | 西班牙语 (西班牙) |
pt-BR | 葡萄牙语 (巴西) |
pt-PT | 葡萄牙语 (葡萄牙) |
ru-RU | 俄语 (俄罗斯) |
zh-HK | 中文 (中国香港特别行政区) |
id-ID | 印度尼西亚语 (印度尼西亚) |
fil-PH | 菲律宾语 (菲律宾) |
ms-MY | 马来语 (马来西亚) |
th-TH | 泰语 (泰国) |
ar-SA | 阿拉伯语 (沙特阿拉伯) |
af-ZA | 南非荷兰语 (南非) |
am-ET | 阿姆哈拉语 (埃塞俄比亚) |
as-IN | 阿萨姆语 (印度) |
az-AZ | 阿塞拜疆语 (阿塞拜疆) |
ba-RU | 巴什基尔语 (俄罗斯) |
be-BY | 白俄罗斯语 (白俄罗斯) |
bg-BG | 保加利亚语 (保加利亚) |
bn-IN | 孟加拉语 (印度) |
bo-CN | 藏语 (中国) |
br-FR | 布列塔尼语 (法国) |
bs-BA | 波斯尼亚语 (波斯尼亚和黑塞哥维那) |
ca-ES | 加泰罗尼亚语 (西班牙) |
cs-CZ | 捷克语 (捷克) |
cy-GB | 威尔士语 (英国) |
da-DK | 丹麦语 (丹麦) |
el-GR | 希腊语 (希腊) |
et-EE | 爱沙尼亚语 (爱沙尼亚) |
eu-ES | 巴斯克语 (西班牙) |
fa-IR | 波斯语 (伊朗) |
fi-FI | 芬兰语 (芬兰) |
fo-FO | 法罗语 (法罗群岛) |
gl-ES | 加利西亚语 (西班牙) |
gu-IN | 古吉拉特语 (印度) |
ha-NG | 豪萨语 (尼日利亚) |
haw-US | 夏威夷语 (美国) |
he-IL | 希伯来语 (以色列) |
hi-IN | 印地语 (印度) |
hr-HR | 克罗地亚语 (克罗地亚) |
ht-HT | 海地克里奥尔语 (海地) |
hu-HU | 匈牙利语 (匈牙利) |
hy-AM | 亚美尼亚语 (亚美尼亚) |
is-IS | 冰岛语 (冰岛) |
it-IT | 意大利语 (意大利) |
jw-ID | 爪哇语 (印度尼西亚) |
ka-GE | 格鲁吉亚语 (格鲁吉亚) |
kk-KZ | 哈萨克语 (哈萨克斯坦) |
km-KH | 高棉语 (柬埔寨) |
kn-IN | 卡纳达语 (印度) |
la-VA | 拉丁语 (梵蒂冈) |
lb-LU | 卢森堡语 (卢森堡) |
ln-CD | 林加拉语 (刚果(金)) |
lo-LA | 老挝语 (老挝) |
lt-LT | 立陶宛语 (立陶宛) |
lv-LV | 拉脱维亚语 (拉脱维亚) |
mg-MG | 马拉加斯语 (马达加斯加) |
mi-NZ | 毛利语 (新西兰) |
mk-MK | 马其顿语 (北马其顿) |
ml-IN | 马拉雅拉姆语 (印度) |
mn-MN | 蒙古语 (蒙古) |
mr-IN | 马拉地语 (印度) |
mt-MT | 马耳他语 (马耳他) |
my-MM | 缅甸语 (缅甸) |
ne-NP | 尼泊尔语 (尼泊尔) |
nl-NL | 荷兰语 (荷兰) |
nn-NO | 挪威尼诺斯克语 (挪威) |
no-NO | 挪威语 (挪威) |
oc-FR | 奥克语 (法国) |
pa-IN | 旁遮普语 (印度) |
pl-PL | 波兰语 (波兰) |
ps-AF | 普什图语 (阿富汗) |
ro-RO | 罗马尼亚语 (罗马尼亚) |
sa-IN | 梵语 (印度) |
sd-IN | 信德语 (印度) |
si-LK | 僧伽罗语 (斯里兰卡) |
sk-SK | 斯洛伐克语 (斯洛伐克) |
sl-SI | 斯洛文尼亚语 (斯洛文尼亚) |
sn-ZW | 绍纳语 (津巴布韦) |
so-SO | 索马里语 (索马里) |
sq-AL | 阿尔巴尼亚语 (阿尔巴尼亚) |
sr-RS | 塞尔维亚语 (塞尔维亚) |
su-ID | 巽他语 (印度尼西亚) |
sv-SE | 瑞典语 (瑞典) |
sw-KE | 斯瓦希里语 (肯尼亚) |
ta-IN | 泰米尔语 (印度) |
te-IN | 泰卢固语 (印度) |
tg-TJ | 塔吉克语 (塔吉克斯坦) |
tk-TM | 土库曼语 (土库曼斯坦) |
tl-PH | 菲律宾语 (菲律宾) |
tr-TR | 土耳其语 (土耳其) |
tt-RU | 鞑靼语 (俄罗斯) |
uk-UA | 乌克兰语 (乌克兰) |
ur-PK | 乌尔都语 (巴基斯坦) |
uz-UZ | 乌兹别克语 (乌兹别克斯坦) |
vi-VN | 越南语 (越南) |
yi-DE | 意第绪语 (德国) |
yo-NG | 约鲁巴语 (尼日利亚) |
提示:
fil-PH与tl-PH都可用;如果是香港粤语内容,建议优先使用zh-HK。
有稿对齐模式
适用于配音、口播等「照稿念」的音频:你已经有准确的逐字稿,只需要它在音频里的时间位置。传入 script_text 后:
- 不做内容识别:
asr_text就是你传入的稿件原文,sentence_tc_list按稿件分句(句子文本不带断句标点),word_tc_list给出稿件每个字 / 词的时间戳——不论word_level取何值都有内容。 - 语种只限以下 13 个:
zh-CN、zh-HK、en-US、ja-JP、ko-KR、fr-FR、de-DE、it-IT、es-ES、es-MX、pt-PT、pt-BR、ru-RU。有稿模式下传入其他语种,会在建单时同步返回400/ 错误码6015(错误信息列出可用语种),不计费、不排队。 - 稿件须与音频内容基本一致:个别字词出入一般不影响;整段没念、念的是另一份稿子这类大段不一致会使任务失败(不会退回识别结果)。
- 产物格式与识别模式相同,
output_result多一个mode,值为script。 - 计费与识别模式相同(按音频时长分钟计)。稿件超过 20000 个字符或不是字符串,会在建单时同步返回
400/ 错误码6016,不计费。
区分说话人
会议、访谈、播客这类多人对话,传 speaker_diarization: true,同一份转写里每一句都标出是谁说的:
- 每句带说话人编号:
sentence_tc_list[].speaker从 1 起,按第一次开口的先后编;另给speaker_list(每人累计说话秒数)与speaker_segments(说话人时间段,可用来画时间轴、跳到某人试听)。编号只在这个文件内有效,「1 号是谁」由你自己命名。 - 知道人数就传
speaker_count(2–10):不传时自动判断,偶尔会把一个人多分出一位只说了一两句的说话人;传上人数可以避免。 - 一律按
word_level: true识别:句子保留标点,对话记录读得下去;请求里的word_level在本模式不起作用。 - 短插话偶有归错:「对」「嗯」这类很短的插话,有时会算到相邻的人身上;大段发言基本都能归对。
- 不能与
script_text同传:有稿对齐的句子来自稿件切分,本模式暂不组合。 - 单独计价:按「语音转文字·区分说话人」档按分钟计费,价格见价格表(在「语音转文字」下展开)。说话人分离失败时任务失败并退款,不会退化成不带说话人的结果。
speaker_count不是 2–10 的整数、只传speaker_count不传speaker_diarization: true、speaker_diarization与script_text同传、speaker_diarization不是布尔值,都会在建单时同步返回400/ 错误码6016,不计费。
不想写代码? 在同合智创工具箱里直接上传文件处理,登录即用,结果与本接口一致。打开「多人对话转文字」→
请求示例
curl -X POST https://api.ai-mcn.tv:10000/task/asr \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_id": "537489015178246",
"language": "zh-CN",
"word_level": true
}'
有稿对齐模式(传入 script_text):
curl -X POST https://api.ai-mcn.tv:10000/task/asr -H "Authorization: YOUR_API_KEY" -H "Content-Type: application/json" -d '{
"file_id": "537489015178246",
"language": "zh-CN",
"script_text": "今天我们聊一聊工程纪律。做完再说。"
}'
区分说话人(已知两人对话):
curl -X POST https://api.ai-mcn.tv:10000/task/asr \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"file_id": "537489015178246",
"language": "zh-CN",
"speaker_diarization": true,
"speaker_count": 2
}'
成功响应示例
{
"code": 200,
"msg": "success",
"data": {
"task_id": "537489015178247",
"task_type": "asr",
"status": "queued"
}
}
查询任务结果
基本信息
| 项目 | 值 |
|---|---|
| 请求方法 | GET |
| 请求路径 | /task/asr/{task_id} |
| 鉴权方式 | Authorization 请求头(直接传 API Key) |
响应参数(output_result)
全量转写落为 JSON 文件返回(体积与音频时长成正比),
output_result本体只含文件引用与摘要。 下载asr_result_download_url即可获得完整转写 JSON。
| 参数名 | 类型 | 说明 |
|---|---|---|
asr_result_file_id | string | 全量转写 JSON 文件 ID |
asr_result_download_url | string | 全量转写 JSON 文件下载链接 |
text_preview | string | 识别文本预览(前 500 字符) |
word_count | number | 字级时间戳条数 |
sentence_count | number | 句级时间戳条数 |
text_length | number | 完整识别文本总字符数 |
mode | string | 仅有稿对齐模式出现,值为 script;识别模式下没有这个键 |
speaker_count | number | 仅区分说话人时出现:说话人数 |
转写文件内容(下载 asr_result_download_url 所得 JSON)
| 参数名 | 类型 | 说明 |
|---|---|---|
asr_text | string | 完整识别文本(有稿对齐模式下即稿件原文) |
sentence_tc_list | array | 句子级别时间戳列表 |
sentence_tc_list[].text | string | 句子文本。word_level: true 时保留原始句读(逗号、句号、问号等);word_level: false 时不含句读。word_tc_list 的单字文本两种模式下都不含标点 |
sentence_tc_list[].start_time | number | 句子开始时间 |
sentence_tc_list[].end_time | number | 句子结束时间 |
word_tc_list | array | 字级别时间戳列表。识别模式下仅 word_level: true 且语种在字级覆盖范围内时非空;有稿对齐模式下始终非空 |
word_tc_list[].text | string | 单字/词文本 |
word_tc_list[].start_time | number | 开始时间 |
word_tc_list[].end_time | number | 结束时间 |
sentence_tc_list[].speaker | number | 仅区分说话人时出现:这句的说话人编号,从 1 起 |
speaker_list | array | 仅区分说话人时出现:[{speaker, duration_sec}],每人累计说话秒数 |
speaker_segments | array | 仅区分说话人时出现:[{speaker, start_time, end_time}],说话人时间段(秒) |
产物文件与其他媒体产物同生命周期(到期自动清理),请在任务完成后及时下载归档。
成功响应示例
{
"code": 200,
"msg": "success",
"data": {
"task_id": "537489015178247",
"status": "completed",
"progress": 100,
"output_result": {
"asr_result_file_id": "537489015178301",
"asr_result_download_url": "https://api.ai-mcn.tv:9000/cloud/file/ab/537489015178301.json",
"text_preview": "你好世界,这是一段测试语音。",
"word_count": 4,
"sentence_count": 1,
"text_length": 14
},
"create_time": "2026-04-05T08:00:00Z",
"update_time": "2026-04-05T08:00:10Z"
}
}
转写文件示例(下载所得)
{
"asr_text": "你好世界,这是一段测试语音。",
"sentence_tc_list": [
{"text": "你好世界,这是一段测试语音。", "start_time": 0.0, "end_time": 3.5}
],
"word_tc_list": [
{"text": "你", "start_time": 0.0, "end_time": 0.3},
{"text": "好", "start_time": 0.3, "end_time": 0.6},
{"text": "世", "start_time": 0.6, "end_time": 0.9},
{"text": "界", "start_time": 0.9, "end_time": 1.2}
]
}
区分说话人时的转写文件(节选):
{
"asr_text": "我们先看这一页。好的。",
"sentence_tc_list": [
{"text": "我们先看这一页。", "start_time": 0.0, "end_time": 2.0, "speaker": 1},
{"text": "好的。", "start_time": 2.2, "end_time": 2.8, "speaker": 2}
],
"word_tc_list": [],
"speaker_list": [
{"speaker": 1, "duration_sec": 2.1},
{"speaker": 2, "duration_sec": 0.8}
],
"speaker_segments": [
{"speaker": 1, "start_time": 0.0, "end_time": 2.1},
{"speaker": 2, "start_time": 2.1, "end_time": 2.9}
]
}
错误码
| 错误码 | HTTP 状态码 | 说明 | 解决方案 |
|---|---|---|---|
6013 | 400 | file_id 缺失 | 传入 file_id 参数 |
6015 | 400 | 不支持的语言代码(有稿对齐模式下:语种不在 13 个对齐语种内) | 改用上表中的受支持语言代码;有稿对齐模式改用对齐语种。错误信息里会给出可用的代码 |
6016 | 400 | script_text 超过 20000 个字符或不是字符串;speaker_count 不是 2–10 的整数或没有与 speaker_diarization: true 同传;speaker_diarization 与 script_text 同传或不是布尔值 | 按错误信息里点名的参数修正后重试 |
6004 | 404 | 文件不存在 | 检查 file_id 是否正确 |
6502 | 401 | 鉴权失败 | 检查 Authorization 请求头 |
6202 | 402 | 余额不足 | 前往仪表盘充值 |