音频翻译

POST /v1/audio/translations

将音频翻译为英文文本

请求参数

请求头

Authorization

使用 Bearer Token 认证。

格式: Authorization: Bearer sk-xxxxxx

请求体必须使用 multipart/form-data;使用 curl -F 或 SDK 时让客户端自动生成 boundary。

表单字段

表单字段(5 个)
参数类型默认值说明是否必填
filefile—要翻译的音频文件。是
modelstring—翻译模型 ID,例如 whisper-1。是
promptstring—可选的上下文提示,用于改善专有名词识别。否
response_formatstring未声明常见值包括 json、text、srt、verbose_json 和 vtt;实际可用值由上游模型和渠道决定。否
temperaturenumber未声明采样温度,数值越高结果越随机;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。

字段类型说明
textstring翻译后的英文文本。
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 由上游模型和渠道决定。

results matching ""

    No results matching ""