NexaraNexara

Локальный файл

Как транскрибировать локальный аудиофайл через Nexara API.

Самый частый сценарий — отправка аудиофайла с диска и получение его расшифровки. Файл передаётся напрямую в теле запроса multipart/form-data на эндпоинт POST /v1/audio/transcriptions, а результат приходит в ответе.

Транскрибация

Ниже представлен один и тот же запрос на разных языках программирования. Замените nx-XXXXXXXXXXXXXXXXXXXXXXXX на свой API-ключ, а audio.mp3 — на путь к вашему файлу.

curl https://api.nexara.ru/v1/audio/transcriptions \
  -H "Authorization: Bearer nx-XXXXXXXXXXXXXXXXXXXXXXXX" \
  -F "file=@audio.mp3" \
  -F "model=whisper-1"
import requests

with open("audio.mp3", "rb") as audio_file:
    response = requests.post(
        "https://api.nexara.ru/v1/audio/transcriptions",
        headers={"Authorization": "Bearer nx-XXXXXXXXXXXXXXXXXXXXXXXX"},
        files={"file": audio_file},
        data={"model": "whisper-1"},
    )

print(response.json()["text"])

Nexara API совместим с OpenAI SDK — достаточно указать base_url. Обратите внимание: Bearer к ключу добавлять не нужно.

from openai import OpenAI

client = OpenAI(
    api_key="nx-XXXXXXXXXXXXXXXXXXXXXXXX",
    base_url="https://api.nexara.ru/v1",
)

with open("audio.mp3", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="whisper-1",
        file=audio_file,
    )

print(transcript.text)

Node.js 18+:

import fs from "fs";

const form = new FormData();
form.append("file", new Blob([fs.readFileSync("audio.mp3")]), "audio.mp3");
form.append("model", "whisper-1");

const response = await fetch(
  "https://api.nexara.ru/v1/audio/transcriptions",
  {
    method: "POST",
    headers: { Authorization: "Bearer nx-XXXXXXXXXXXXXXXXXXXXXXXX" },
    body: form,
  },
);

const result = await response.json();
console.log(result.text);
package main

import (
	"bytes"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"os"
)

func main() {
	file, _ := os.Open("audio.mp3")
	defer file.Close()

	var buf bytes.Buffer
	writer := multipart.NewWriter(&buf)

	part, _ := writer.CreateFormFile("file", "audio.mp3")
	io.Copy(part, file)
	writer.WriteField("model", "whisper-1")
	writer.Close()

	req, _ := http.NewRequest("POST", "https://api.nexara.ru/v1/audio/transcriptions", &buf)
	req.Header.Set("Authorization", "Bearer nx-XXXXXXXXXXXXXXXXXXXXXXXX")
	req.Header.Set("Content-Type", writer.FormDataContentType())

	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "uri"
require "json"

uri = URI("https://api.nexara.ru/v1/audio/transcriptions")

request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer nx-XXXXXXXXXXXXXXXXXXXXXXXX"
request.set_form(
  [
    ["file", File.open("audio.mp3")],
    ["model", "whisper-1"],
  ],
  "multipart/form-data",
)

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

puts JSON.parse(response.body)["text"]

Результат

По умолчанию (response_format=json) в ответе возвращается распознанный текст:

{
  "text": "Привет! Это пример транскрибации."
}

Формат ответа можно менять параметром response_formatjson (по умолчанию), text, verbose_json, srt или vtt. Подробнее — на странице форматы ответа.

Что учитывать

  • Форматы файлов. Принимается большинство существующих аудио- и видеоформатов. Полный список — на странице поддерживаемых файлов.
  • Размер файла. Максимальный размер одного файла — 3 ГБ. Подробнее — на странице лимитов.
  • Частота запросов. Синхронный эндпоинт ограничен 10 запросами в секунду. Подробнее читайте здесь — Лимиты.
  • Хранение ключа. Не вставляйте API-ключ прямо в код. Храните его в переменной окружения (например, export NEXARA_API_KEY="nx-...") и ссылайтесь на неё. Подробнее — на странице аутентификации.

    Для длинных записей вместо синхронного запроса используйте асинхронный режим.

On this page