语音转文字(ASR)

将音频文件中的语音内容转换为文字,支持多语言识别,并可获取字级别或句子级别的时间戳信息。已有逐字稿时,可传入稿件做有稿对齐,直接拿到稿件每一句、每一个字的时间戳;多人对话可以区分说话人,每句标出是谁说的。

不想写代码? 在同合智创工具箱里直接上传文件处理,登录即用,结果与本接口一致。打开「语音转文字」→

创建任务

基本信息

项目值
请求方法POST
请求路径/task/asr
Content-Typeapplication/json
鉴权方式Authorization 请求头(直接传 API Key)

请求参数(Body)

参数名类型必填默认值说明
file_idstring是—已上传音频或视频文件的 ID
languagestring否"zh-CN"音频语言代码,传标准地区语言码,完整列表见下方“支持的语言代码”
word_levelboolean否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_textstring否—已知稿件文本,不超过 20000 个字符。传入非空稿件即进入有稿对齐模式:不做内容识别,按稿件产出时间戳
speaker_diarizationboolean否false为 true 时区分说话人:每句标出说话人编号,按「区分说话人」档单独计价
speaker_countnumber否—已知的说话人数(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_idstring全量转写 JSON 文件 ID
asr_result_download_urlstring全量转写 JSON 文件下载链接
text_previewstring识别文本预览(前 500 字符)
word_countnumber字级时间戳条数
sentence_countnumber句级时间戳条数
text_lengthnumber完整识别文本总字符数
modestring仅有稿对齐模式出现,值为 script;识别模式下没有这个键
speaker_countnumber仅区分说话人时出现:说话人数

转写文件内容(下载 asr_result_download_url 所得 JSON)

参数名类型说明
asr_textstring完整识别文本(有稿对齐模式下即稿件原文)
sentence_tc_listarray句子级别时间戳列表
sentence_tc_list[].textstring句子文本。word_level: true 时保留原始句读(逗号、句号、问号等);word_level: false 时不含句读。word_tc_list 的单字文本两种模式下都不含标点
sentence_tc_list[].start_timenumber句子开始时间
sentence_tc_list[].end_timenumber句子结束时间
word_tc_listarray字级别时间戳列表。识别模式下仅 word_level: true 且语种在字级覆盖范围内时非空;有稿对齐模式下始终非空
word_tc_list[].textstring单字/词文本
word_tc_list[].start_timenumber开始时间
word_tc_list[].end_timenumber结束时间
sentence_tc_list[].speakernumber仅区分说话人时出现:这句的说话人编号,从 1 起
speaker_listarray仅区分说话人时出现:[{speaker, duration_sec}],每人累计说话秒数
speaker_segmentsarray仅区分说话人时出现:[{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 状态码说明解决方案
6013400file_id 缺失传入 file_id 参数
6015400不支持的语言代码(有稿对齐模式下:语种不在 13 个对齐语种内)改用上表中的受支持语言代码;有稿对齐模式改用对齐语种。错误信息里会给出可用的代码
6016400script_text 超过 20000 个字符或不是字符串;speaker_count 不是 2–10 的整数或没有与 speaker_diarization: true 同传;speaker_diarization 与 script_text 同传或不是布尔值按错误信息里点名的参数修正后重试
6004404文件不存在检查 file_id 是否正确
6502401鉴权失败检查 Authorization 请求头
6202402余额不足前往仪表盘充值