# Whisper API — Распознавание речи (ProxyAPI.ru) > Источники: > - [ProxyAPI.ru — Распознавание речи OpenAI API](https://proxyapi.ru/docs/openai-speech-to-text) > - Тестирование через `curl` с реальными запросами (2026-05-23) > - [OpenAI Speech-to-Text Guide](https://platform.openai.com/docs/guides/speech-to-text) (официальный, заблокирован из РФ) --- ## 1. Endpoint ``` POST https://api.proxyapi.ru/openai/v1/audio/transcriptions ``` Авторизация: `Authorization: Bearer ` Второй endpoint — перевод в английский: ``` POST https://api.proxyapi.ru/openai/v1/audio/translations ``` --- ## 2. Модели | Модель | Форматы ответа | Временные метки | Поток | |---|---|---|---| | `whisper-1` | json, text, srt, verbose_json, vtt | ✅ word + segment | ❌ | | `gpt-4o-transcribe` | json, text | ❌ | ✅ | | `gpt-4o-mini-transcribe` | json, text | ❌ | ✅ | **Вывод:** для максимальной детализации (сегменты, слова,置信度) — только `whisper-1`. --- ## 3. Параметры запроса | Параметр | Тип | Обязательный | Описание | |---|---|---|---| | `file` | file | ✅ | Аудиофайл (mp3, mp4, mpeg, mpga, m4a, wav, webm). Макс 25 МБ | | `model` | string | ✅ | `whisper-1`, `gpt-4o-transcribe`, `gpt-4o-mini-transcribe` | | `language` | string | ❌ | ISO-639-1 код (`it`, `en`, `ru`, ...). Без него — автоопределение | | `prompt` | string | ❌ | Текст-подсказка: термины, имена, аббревиатуры для улучшения точности | | `temperature` | float | ❌ | 0–1. По умолчанию 0. Выше = разнообразнее, но больше ошибок | | `response_format` | string | ❌ | `json` (по умолч.), `text`, `srt`, `verbose_json`, `vtt` | | `timestamp_granularities` | string[] | ❌ | `["word"]`, `["segment"]`, `["word","segment"]`. Только для `whisper-1` | ### ⚠️ Важный нюанс (webm) ProxyAPI.ru **заявляет** поддержку `webm`, но по факту ffmpeg на их стороне **не может определить длительность** webm/opus файлов из Chrome. Ошибка: ```json {"detail": "Cannot extract audio duration. Invalid file or format."} ``` **Решение:** конвертировать webm → WAV (16kHz, mono) в браузере через Web Audio API перед отправкой. --- ## 4. Форматы ответа ### 4.1 `json` (по умолчанию) ```json { "text": "распознанный текст" } ``` С `usage` (зависит от модели): ```json { "text": "Sottotitoli e revisione a cura di QTSS", "usage": { "type": "duration", "seconds": 2 } } ``` ### 4.2 `text` Чистый текст, без JSON: ``` Sottotitoli e revisione a cura di QTSS ``` ### 4.3 `verbose_json` ```json { "task": "transcribe", "language": "italian", "duration": 2.0, "text": "Sottotitoli e revisione a cura di QTSS", "segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 2.0, "text": " Sottotitoli e revisione a cura di QTSS", "tokens": [50364, 318, 1521, 310, 270, 9384, 308, 34218, 68, 257, 1262, 64, 1026, 1249, 7327, 50, 50464], "temperature": 0.0, "avg_logprob": -0.2574056088924408, "compression_ratio": 0.8260869383811951, "no_speech_prob": 0.8321689367294312 } ], "usage": { "type": "duration", "seconds": 2 } } ``` #### Поля сегмента: | Поле | Описание | |---|---| | `id` | Номер сегмента (с 0) | | `seek` | Смещение в секундах от начала файла | | `start` | Начало сегмента (сек) | | `end` | Конец сегмента (сек) | | `text` | Текст сегмента | | `tokens` | Идентификаторы токенов Whisper | | `temperature` | Использованная температура | | `avg_logprob` | Средняя лог-вероятность токенов (выше = увереннее). Можно использовать для оценки качества | | `compression_ratio` | Степень сжатия текста относительно аудио | | `no_speech_prob` | **Вероятность отсутствия речи** (0–1). Значения > 0.5 = вероятно тишина/шум | ### 4.4 `verbose_json` + `timestamp_granularities=["word"]` ```json { "task": "transcribe", "language": "italian", "duration": 2.0, "text": "Sottotitoli e revisione a cura di QTSS", "words": [ { "word": "Sottotitoli", "start": 0.0, "end": 0.48 }, { "word": "e", "start": 0.48, "end": 0.56 }, { "word": "revisione", "start": 0.56, "end": 1.12 }, { "word": "a", "start": 1.12, "end": 1.20 }, { "word": "cura", "start": 1.20, "end": 1.44 }, { "word": "di", "start": 1.44, "end": 1.52 }, { "word": "QTSS", "start": 1.52, "end": 2.0 } ], "usage": { "type": "duration", "seconds": 2 } } ``` ⚠️ При запросе `words`, поле `segments` **не возвращается** (взаимоисключающие). ### 4.5 `srt` / `vtt` Форматы субтитров с таймкодами. Пример SRT: ``` 1 00:00:00,000 --> 00:00:02,000 Sottotitoli e revisione a cura di QTSS ``` --- ## 5. Поддерживаемые языки Полный список (из официальных доков): Африкаанс, арабский, армянский, азербайджанский, белорусский, боснийский, болгарский, каталанский, китайский, хорватский, чешский, датский, голландский, **английский**, эстонский, финский, французский, галисийский, немецкий, греческий, иврит, хинди, венгерский, исландский, индонезийский, **итальянский**, японский, каннада, казахский, корейский, латышский, литовский, македонский, малайский, маратхи, маори, непальский, норвежский, персидский, польский, португальский, румынский, **русский**, сербский, словацкий, словенский, испанский, суахили, шведский, тагальский, тамильский, тайский, турецкий, украинский, урду, вьетнамский, валлийский. Коды ISO-639-1: `it` (итальянский), `en` (английский), `ru` (русский), `fr` (французский), etc. --- ## 6. Prompt — улучшение распознавания Параметр `prompt` помогает Whisper правильно распознать специфические термины, имена, аббревиатуры. Работает как контекстная подсказка. ```json { "model": "whisper-1", "file": "@audio.wav", "language": "it", "prompt": "amore, cuore, spaghetti, Ferrari, Lamborghini, ciao, buongiorno" } ``` **Рекомендация:** передавать ожидаемое слово/фразу как prompt для повышения точности. --- ## 7. Полезные поля для оценки качества ### `avg_logprob` (средняя лог-вероятность) - Диапазон: примерно от -2.0 (плохо) до 0 (идеально) - Можно использовать как confidence score - Порог ~ -0.5 для приемлемого качества ### `no_speech_prob` (вероятность тишины) - 0 = точно речь - 1 = точно тишина/шум - Порог > 0.5 = вероятно, сказать нечего ### `compression_ratio` - Отношение длины текста к длине аудио - Аномальные значения могут указывать на галлюцинации --- ## 8. Ограничения - Макс. размер файла: **25 МБ** - Перевод (`/translations`) — **только на английский** - Временные метки — **только `whisper-1`** - Поток (`stream=true`) — **недоступен для `whisper-1`** - `webm` заявлен но **не работает** с ProxyAPI.ru (нужна конвертация в WAV/MP3) --- ## 9. Цены (ProxyAPI.ru, май 2026) | Модель | Цена за минуту | |---|---| | `whisper-1` | ~0.006 $ | | `gpt-4o-transcribe` | ~0.006 $ | | `gpt-4o-mini-transcribe` | ~0.003 $ | --- ## 10. Пример использования в Lyngvo ```javascript // transcribe.js — актуальная версия (v103) async function blobToWav(blob) { const ab = await blob.arrayBuffer(); const ctx = new AudioContext({ sampleRate: 16000 }); const buf = await ctx.decodeAudioData(ab); await ctx.close(); // ... конвертация в WAV 16kHz mono ... return new Blob([wavBuf], { type: 'audio/wav' }); } async function transcribe(blob) { const wavBlob = await blobToWav(blob); const fd = new FormData(); fd.append('file', wavBlob, 'audio.wav'); fd.append('model', 'whisper-1'); fd.append('language', 'it'); // По желанию — prompt для улучшения точности // fd.append('prompt', 'amore, ciao, buongiorno'); const r = await fetch( 'https://api.proxyapi.ru/openai/v1/audio/transcriptions', { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}` }, body: fd } ); return await r.json(); // → { text: "...", usage: { type: "duration", seconds: N } } } ```