curl --request POST \
--url https://api.minimax.cn/v1/speech_to_text \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form model=asr-1.0 \
--form file='@example-file' \
--form response_format=json \
--form timestamp_level=word \
--form stream=falseimport requests
url = "https://api.minimax.cn/v1/speech_to_text"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"model": "asr-1.0",
"response_format": "json",
"timestamp_level": "word",
"stream": "false"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('model', 'asr-1.0');
form.append('file', '<string>');
form.append('response_format', 'json');
form.append('timestamp_level', 'word');
form.append('stream', 'false');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.minimax.cn/v1/speech_to_text', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.minimax.cn/v1/speech_to_text",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.minimax.cn/v1/speech_to_text"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.minimax.cn/v1/speech_to_text")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.minimax.cn/v1/speech_to_text")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"text": "实际上还是商家赚了,对他那个冷链的那个运费高。",
"duration": 26.325,
"trace_id": "021785229015510a2c883cf675b9804d"
}语音识别
使用本接口,将音频文件转写为文本,支持流式返回、说话人分离与字幕导出。
curl --request POST \
--url https://api.minimax.cn/v1/speech_to_text \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: multipart/form-data' \
--form model=asr-1.0 \
--form file='@example-file' \
--form response_format=json \
--form timestamp_level=word \
--form stream=falseimport requests
url = "https://api.minimax.cn/v1/speech_to_text"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"model": "asr-1.0",
"response_format": "json",
"timestamp_level": "word",
"stream": "false"
}
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('model', 'asr-1.0');
form.append('file', '<string>');
form.append('response_format', 'json');
form.append('timestamp_level', 'word');
form.append('stream', 'false');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://api.minimax.cn/v1/speech_to_text', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.minimax.cn/v1/speech_to_text",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.minimax.cn/v1/speech_to_text"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.minimax.cn/v1/speech_to_text")
.header("Authorization", "Bearer <token>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.minimax.cn/v1/speech_to_text")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nasr-1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"response_format\"\r\n\r\njson\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"timestamp_level\"\r\n\r\nword\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"stream\"\r\n\r\nfalse\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"text": "实际上还是商家赚了,对他那个冷链的那个运费高。",
"duration": 26.325,
"trace_id": "021785229015510a2c883cf675b9804d"
}授权
请求头
请求体的媒介类型,固定为 multipart/form-data。
multipart/form-data 可选的 BCP-47 语言标签,用于提示音频中的主要语言。不传该请求头或传空值时,启用混合语言识别。
当前支持:zh(中文)、yue(粤语)、en(英语)、ja(日语)、ko(韩语)、th(泰语)、vi(越南语)、id(印尼语)、ms(马来语)、fil(菲律宾语)、ar(阿拉伯语)、tr(土耳其语)、fr(法语)、de(德语)、es(西班牙语)、it(意大利语)、pt(葡萄牙语)、pl(波兰语)、ru(俄语)和 uk(乌克兰语)。
"en"
请求体
本次调用的模型版本。
asr-1.0 "asr-1.0"
待识别的音频文件,填写文件的路径地址。
上传的音频文件需遵从以下规范:
| 项 | 约束 |
|---|---|
| 格式 | wav / aiff / flac / alac(m4a) / mp3 / aac / opus / ogg |
| 时长 | 不超过 500 秒;超出会返回 400 而不会被截断 |
| 大小 | 不超过 50 MB;超出返回 413 |
不支持无容器的裸 PCM 数据。
语音识别不依赖高采样率与立体声,未压缩的高规格音频容易超过大小上限(如 500 秒 48 kHz 立体声 WAV 约 92 MB)。建议先转为单声道 16 kHz,或改用 mp3 / aac / opus 等压缩格式,识别结果不受影响。
识别结果的返回格式。
| 取值 | 返回内容 | 响应类型 |
|---|---|---|
json | text + duration | application/json |
verbose_json | text + duration + segments + n_speakers(含说话人分离与时间戳) | application/json |
srt | SRT 字幕 | text/plain |
vtt | WebVTT 字幕 | text/vtt |
verbose_json / srt / vtt 会启用说话人分离与时间戳对齐,因此不能与 stream=true 同时使用。
srt 的响应体:
1
00:00:00,100 --> 00:00:01,660
嘎嘎会,可以,这把稳了。
2
00:00:02,000 --> 00:00:06,100
来检查一下,读下题。
vtt 的响应体:
WEBVTT
00:00:00.100 --> 00:00:01.660
嘎嘎会,可以,这把稳了。
00:00:02.000 --> 00:00:06.100
来检查一下,读下题。
json, verbose_json, srt, vtt "json"
时间戳粒度。仅当 response_format 为 verbose_json、srt 或 vtt 时生效,因为这些格式会启用说话人分离与时间戳对齐。
- 空值或
sentence(默认):保持原有句段时间戳,并合并同一分段内相邻且属于同一说话人的文本。 word:返回字/词级时间戳,中文按字、英文按词;每个单元仍包含speaker。
当 response_format=json 时(包括 stream=true 的情况),该参数可以传入,但会被忽略且不会报错。
, sentence, word "word"
是否流式返回识别结果。
false(默认):识别完成后一次性返回。true:以 SSE 推送增量文本,响应类型为text/event-stream;此时response_format仅支持json。
流式响应以 data: <json> 逐行推送,事件之间以空行分隔:
data: {"index":0,"delta":"实际上","finish":false}
data: {"index":1,"delta":"还是商家赚了","finish":false}
data: {"index":2,"delta":"","finish":true,"duration":26.325}
每个事件的 data 为 JSON 对象:index 为从 0 开始递增的事件序号,delta 为本次新增的识别文本,finish 标识是否为终止事件,duration 为音频时长(单位秒,仅终止事件返回)。客户端应按 index 顺序拼接所有 delta,并在收到 finish=true 后结束读取。
false
响应
识别成功。response_format 取 json 或 verbose_json 时返回下列 JSON 结构;取 srt / vtt 或 stream=true 时的响应体见对应请求参数的说明。
识别出的完整文本。verbose_json 下等于各 segments[].text 按时间顺序拼接。
输入音频的时长,单位为秒。计费以该时长为准。
识别出的说话人数量。仅 response_format=verbose_json 时返回。
带时间戳的识别单元,每个单元均携带起止时间与说话人标识。粒度由 timestamp_level 决定:默认按句段,设为 word 时中文按字、英文按词。仅 response_format=verbose_json 时返回。
Show child attributes
Show child attributes
本次请求的追踪 ID,便于排查问题。
此页面对您有帮助吗?