音频翻译
POST
/v1/audio/translations
将音频翻译为英文文本
请求参数
请求头
Authorization
使用 Bearer Token 认证。
格式: Authorization: Bearer sk-xxxxxx
请求体必须使用 multipart/form-data;使用 curl -F 或 SDK 时让客户端自动生成 boundary。
表单字段
表单字段(5 个)
| 参数 | 类型 | 默认值 | 说明 | 是否必填 |
|---|---|---|---|---|
file | file | — | 要翻译的音频文件。 | 是 |
model | string | — | 翻译模型 ID,例如 whisper-1。 | 是 |
prompt | string | — | 可选的上下文提示,用于改善专有名词识别。 | 否 |
response_format | string | 未声明 | 常见值包括 json、text、srt、verbose_json 和 vtt;实际可用值由上游模型和渠道决定。 | 否 |
temperature | number | 未声明 | 采样温度,数值越高结果越随机;0 是常用示例值。 | 否 |
请求示例代码
curl -X POST "https://10000router.com/v1/audio/translations" \
-H "Authorization: Bearer $API_KEY" \
-F "file=@audio.mp3" \
-F "model=whisper-1" \
-F "response_format=verbose_json"
const form = new FormData();
form.append("file", new Blob([audioBytes]), "audio.mp3");
form.append("model", "whisper-1");
form.append("response_format", "verbose_json");
const response = await fetch("https://10000router.com/v1/audio/translations", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.API_KEY },
body: form
});
console.log(await response.json());
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["API_KEY"], base_url="https://10000router.com/v1")
with open("audio.mp3", "rb") as audio:
response = client.post(
"https://10000router.com/v1/audio/translations",
headers={"Authorization": "Bearer " + os.environ["API_KEY"]},
files={"file": ("audio.mp3", audio, "audio/mpeg")},
data={"model": "whisper-1", "response_format": "verbose_json"},
)
print(response)
file, _ := os.Open("audio.mp3")
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "audio.mp3")
io.Copy(part, file)
writer.WriteField("model", "whisper-1")
writer.WriteField("response_format", "verbose_json")
writer.Close()
req, _ := http.NewRequest("POST", "https://10000router.com/v1/audio/translations", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("API_KEY"))
req.Header.Set("Content-Type", writer.FormDataContentType())
var boundary = "----10000routerBoundary";
var body = new java.io.ByteArrayOutputStream();
var utf8 = java.nio.charset.StandardCharsets.UTF_8;
java.util.function.BiConsumer<String, String> addField = (name, value) -> body.writeBytes(
("--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"" + name + "\"\r\n\r\n"
+ value + "\r\n").getBytes(utf8));
addField.accept("model", "whisper-1");
addField.accept("response_format", "verbose_json");
body.writeBytes(("--" + boundary + "\r\n"
+ "Content-Disposition: form-data; name=\"file\"; filename=\"audio.mp3\"\r\n"
+ "Content-Type: audio/mpeg\r\n\r\n").getBytes(utf8));
body.writeBytes(java.nio.file.Files.readAllBytes(java.nio.file.Path.of("audio.mp3")));
body.writeBytes(("\r\n--" + boundary + "--\r\n").getBytes(utf8));
var request = java.net.http.HttpRequest.newBuilder(java.net.URI.create("https://10000router.com/v1/audio/translations"))
.header("Authorization", "Bearer " + System.getenv("API_KEY"))
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
.POST(java.net.http.HttpRequest.BodyPublishers.ofByteArray(body.toByteArray()))
.build();
var response = java.net.http.HttpClient.newHttpClient().send(request, java.net.http.HttpResponse.BodyHandlers.ofString());
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new("Bearer", Environment.GetEnvironmentVariable("API_KEY"));
using var form = new MultipartFormDataContent();
form.Add(new StreamContent(File.OpenRead("audio.mp3")), "file", "audio.mp3");
form.Add(new StringContent("whisper-1"), "model");
form.Add(new StringContent("verbose_json"), "response_format");
var response = await client.PostAsync("https://10000router.com/v1/audio/translations", form);
Console.WriteLine(await response.Content.ReadAsStringAsync());
返回响应
响应示例
{
"text": "Hello, this is the translated text."
}
{
"error": {
"message": "Missing required parameter: file",
"type": "invalid_request_error",
"param": "file",
"code": null
}
}
{
"error": {
"message": "Rate limit reached",
"type": "rate_limit_exceeded",
"param": null,
"code": null
}
}
{
"error": {
"message": "Invalid authentication credentials",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
返回字段参数
标准 JSON 响应(1 个)
以下结构适用于 response_format=json。
| 字段 | 类型 | 说明 |
|---|---|---|
text | string | 翻译后的英文文本。 |
verbose_json 响应
选择 verbose_json 时,NewAPI 会透传上游返回的语言、时长和分段时间戳;具体字段由模型决定:
{
"task": "translate",
"language": "English",
"duration": 2.4,
"text": "Hello, this is the translated text.",
"segments": [
{
"id": 0,
"seek": 0,
"start": 0.0,
"end": 2.4,
"text": "Hello, this is the translated text.",
"tokens": [ 1234, 5678 ],
"temperature": 0.0,
"avg_logprob": -0.12,
"compression_ratio": 1.1,
"no_speech_prob": 0.01
}
]
}
segments 中的 seek、tokens、temperature、avg_logprob、compression_ratio 和 no_speech_prob 由上游转录模型决定,可能省略。
其他响应格式
response_format | 响应体 | 说明 |
|---|---|---|
text | 纯文本 | 仅返回翻译后的英文文本。 |
srt | 字幕文本 | 返回 SubRip 字幕格式。 |
vtt | 字幕文本 | 返回 WebVTT 字幕格式。 |
非 json 格式的具体 Content-Type 由上游模型和渠道决定。