Перевод аудио¶
Раздел «Перевод аудио» переводит речь из аудио, видео или поддерживаемой медиассылки на другой язык. Сервис разделяет реплики по спикерам, озвучивает перевод голосами из исходной записи, когда качества и длительности голосового образца достаточно, и старается сохранить исходный тайминг.
Для аудио результатом будет WAV. Если источник содержит видеоряд, можно также получить MP4 с переведённой звуковой дорожкой.
Возможности¶
- один локальный аудио- или видеофайл либо одна публичная HTTP(S)-ссылка на операцию;
- исходные языки зависят от модели распознавания: локальные модели покрывают русский, английский, казахский, кыргызский и узбекский, а Scribe — расширенный набор языков с опубликованным WER не выше 20%;
- автоматический выбор совместимой модели распознавания или явный выбор модели;
- разделение речи по спикерам и отдельная озвучка их реплик;
- отображение прогресса, отмена операции и восстановление результата после перезагрузки страницы;
- скачивание итогового WAV и, для видео, MP4;
- редактор сегментов с исходным текстом, переводом, спикером и таймкодами;
- передублирование одной исправленной реплики без повторной обработки всего файла;
- экспорт переведённых субтитров SRT/VTT и двуязычного транскрипта TXT.
Ограничения¶
- исходный и целевой языки должны отличаться;
- за одну операцию принимается только один файл или одна ссылка;
- результат сводится в mono;
- музыка и шум внутри речевых фрагментов могут приглушаться вместе с оригинальным голосом;
- если для спикера недостаточно подходящей речи, его исходная реплика сохраняется без дубляжа;
- монтаж видеоряда, несколько аудиодорожек, импорт субтитров и формат ASS не поддерживаются.
Работа в интерфейсе¶
- Откройте Playground → Перевод аудио.
- Загрузите файл или вставьте публичную ссылку на медиа.
- Выберите язык оригинала, модель распознавания и язык перевода.
- Для ElevenLabs Scribe оставьте число спикеров в режиме «Авто» — модель определит его сама (до 32). При необходимости задайте предел вручную. Для локальной DiariZen по умолчанию используется предел 4 спикера.
- Подтвердите права на использование голосов из записи.
- Запустите перевод и дождитесь завершения операции.
- При необходимости исправьте оригинал, перевод, спикера или тайминг прямо в таблице и нажмите «Сохранить правки».
- Для реплики, влияющей на озвучку, нажмите «Передублировать». Будет создана новая версия результата, а остальные реплики не будут синтезироваться повторно.
- Скачайте WAV или MP4, переведённые SRT/VTT либо двуязычный транскрипт TXT.
Правка только исходного текста сразу попадает в двуязычный транскрипт и не требует передублирования. Изменение перевода, спикера или тайминга помечает реплику как требующую передублирования. Пока новая версия готовится, предыдущий результат остаётся доступен; при ошибке он не заменяется.
Если операция была прервана после полного перевода всех реплик, интерфейс может повторить только озвучивание. Исходный файл или ссылку потребуется предоставить ещё раз.
Если сбой произошёл раньше, во время обращения к LLM, распознавание и уже готовые переводы сохраняются. Кнопка «Повторить перевод» отправляет заново только реплики без перевода; повторно выбирать файл и запускать распознавание не нужно. Временные сетевые и TLS-сбои сначала автоматически повторяются сервером.
Языки и распознавание¶
Список языков оригинала зависит от выбранной модели. Для
ElevenLabs-Scribe-v2 используется курируемый production-набор из официальных
категорий Excellent, High Accuracy и Good (опубликованный WER не выше
20%). Языки категории Moderate в него не включены. Актуальная классификация
приведена в документации ElevenLabs.
Корейский доступен как ko-KR и относится к категории Good.
В режиме auto локальные модели сохраняют приоритет для основных языков:
| Язык | Locale | Модель распознавания |
|---|---|---|
| Русский | ru-RU |
SpeechExpert-STT |
| Английский | en-US |
NVIDIA-FastConformer-Transducer-Large |
| Казахский | kk-KZ |
GigaAM-Multilingual-Large-CTC |
| Кыргызский | ky-KG |
GigaAM-Multilingual-Large-CTC |
| Узбекский | uz-UZ |
GigaAM-Multilingual-Large-CTC |
Для остальных языков курируемого набора, включая таджикский (tg-TJ), режим
auto выбирает ElevenLabs-Scribe-v2. Эту модель также можно выбрать вручную
для любого совместимого языка. Для английского дополнительно доступен
SpeechExpert-STT-Turbo, для русского, казахского, кыргызского и узбекского —
GigaAM-Multilingual-Large-CTC.
Список языков озвучивания отображается в поле «Язык перевода». Передавайте в API тот же BCP-47 language tag, который показывает интерфейс.
Внешняя обработка
При выборе ElevenLabs-Scribe-v2 исходное аудио передаётся ElevenLabs для
распознавания. Текст распознанных реплик передаётся настроенному
LLM-провайдеру для перевода. Выбранный маршрут виден в интерфейсе до запуска.
HTTP API¶
Запуск операции¶
POST /api/audio-translation/v1:translateAsync
Content-Type: multipart/form-data
Authorization: Api-Key <ваш-ключ>
Пример с локальным видео:
curl -X POST "https://api.speech.example.com/api/audio-translation/v1:translateAsync" \
-H "Authorization: Api-Key <ваш-ключ>" \
-F "audio=@interview.mp4" \
-F "sourceLanguage=ru-RU" \
-F "sourceAsrModel=auto" \
-F "targetLanguage=en-US" \
-F "maxSpeakers=4" \
-F "includeVideo=true" \
-F "confirmVoiceRights=true"
| Поле | Обязательно | Значение по умолчанию | Описание |
|---|---|---|---|
audio |
условно | — | Аудио- или видеофайл; взаимоисключающий с videoUrl |
videoUrl |
условно | — | Публичный HTTP(S) URL; взаимоисключающий с audio |
sourceLanguage |
нет | ru-RU |
Язык оригинала |
sourceAsrModel |
нет | auto |
Совместимая модель распознавания оригинала |
targetLanguage |
да | — | Язык перевода и озвучивания |
maxSpeakers |
нет | авто для ElevenLabs; 4 для DiariZen |
Максимум спикеров: от 1 до 32 для ElevenLabs и от 1 до 20 для DiariZen. Если параметр не передан при использовании ElevenLabs, Scribe определяет число автоматически |
multiTake |
нет | false |
Создать несколько вариантов реплики и выбрать лучший |
emotionReference |
нет | true |
Использовать подходящий фрагмент сцены как дополнительный голосовой референс |
dynamicSpeechRate |
нет | true |
Подбирать темп озвучивания с учётом длительности реплики |
stretchQualityControl |
нет | true |
Ограничивать растяжение аудио при укладке в тайминг |
asrQualityControl |
нет | false |
Повторно распознать озвученную реплику для проверки текста |
includeVideo |
нет | false |
Сформировать MP4, если источник содержит видеоряд |
confirmVoiceRights |
да | false |
Должно быть true; подтверждает право использовать голоса из записи |
Должно быть передано ровно одно из полей audio и videoUrl. Стандартный лимит
загружаемого файла — 500 MiB, ссылки — 200 MiB, длительности записи — 3 часа.
Фактический лимит конкретного запроса может быть ниже и возвращается сервером
через соответствующий HTTP-ответ.
После проверки запроса сервер отвечает 202 Accepted и возвращает объект
операции. Сохраните его id для получения прогресса и результата.
Статус, отмена и удаление¶
GET /api/audio-translation/v1/operations/{operationId}
POST /api/operations/{operationId}:cancel
POST /api/operations/{operationId}:purge
В объекте операции используйте:
| Поле | Описание |
|---|---|
done |
true, когда операция завершена, отменена или завершилась ошибкой |
metadata.status |
queued, running, completed, failed или cancelled |
metadata.progress_percent |
Прогресс от 0 до 100 |
response |
Частичный или готовый результат |
error |
Причина ошибки, если операция не завершилась успешно |
Операция и её файлы доступны только владельцу. Используйте URL из ответа как есть: ссылки на WAV и MP4 могут содержать временный токен доступа.
Повтор перевода после сбоя¶
Если операция завершилась ошибкой или была отменена во время перевода, а в
response сохранён частичный результат, можно повторить только реплики без
готового перевода:
POST /api/audio-translation/v1/operations/{operationId}:resumeTranslation
Authorization: Api-Key <ваш-ключ>
Исходный файл или ссылку передавать не нужно. Сервер создаст новую асинхронную
операцию, переиспользует распознавание и готовые переводы, а в LLM отправит
только отсутствующие реплики. Новый checkpoint также сохраняется после каждого
готового батча, поэтому повторный сбой не отменяет уже выполненную работу.
Повторный запрос для того же operationId идемпотентен: вместо дублирования
вызова LLM сервер вернёт уже созданную дочернюю операцию.
После успешного завершения всех переводов используйте полученный id новой
операции для повторного озвучивания.
Повторное озвучивание¶
Если неудачная или отменённая операция успела перевести все реплики, можно повторить озвучивание без повторного распознавания и перевода:
POST /api/audio-translation/v1/operations/{operationId}:resumeSynthesis
Content-Type: multipart/form-data
Authorization: Api-Key <ваш-ключ>
Передайте тот же тип источника: исходный файл в audio или ту же ссылку в
videoUrl, а также confirmVoiceRights=true. Сервер создаст новую операцию и
не изменит исходную.
Редактирование и точечное передублирование¶
Сохранить одну или несколько правок можно одним запросом:
PATCH /api/audio-translation/v1/operations/{operationId}/segments
Content-Type: application/json
Authorization: Api-Key <ваш-ключ>
{
"revision": 1,
"segments": [
{
"id": "seg-0001",
"source_text": "Доброе утро!",
"translated_text": "Good morning!",
"speaker": 1,
"start_ms": 420,
"end_ms": 2380
}
]
}
Поле revision защищает от перезаписи более свежих правок. В ответе сервер
возвращает следующую ревизию и список pending_redub_segment_ids.
Чтобы передублировать одну сохранённую реплику, подтвердите права на голос и передайте актуальную ревизию:
POST /api/audio-translation/v1/operations/{operationId}/segments/{segmentId}:redub
Content-Type: application/json
Authorization: Api-Key <ваш-ключ>
{
"revision": 2,
"confirmVoiceRights": true
}
Сервер создаст отдельную операцию. После её завершения ответ содержит новый полный результат с обновлённой репликой; исходная версия не изменяется. Для результатов, созданных до появления редактора, правка текста и экспорт доступны, но точечное передублирование может быть недоступно.
Результат¶
После успешного завершения поле response содержит:
| Поле | Описание |
|---|---|
audio_url |
URL итогового WAV |
filename |
Имя WAV-файла |
video_url |
URL MP4, если видео успешно сформировано |
video_filename |
Имя MP4-файла |
video_render_warning |
Причина отсутствия MP4; WAV при этом остаётся доступен |
duration_ms |
Длительность результата |
source_language |
Язык оригинала |
target_language |
Язык перевода |
segments |
Реплики с текстом, переводом, спикером, таймкодами и предупреждениями |
revision |
Версия текста и параметров редактора |
artifact_revision |
Версия собранного WAV/MP4 |
pending_redub_segment_ids |
Реплики с сохранёнными правками, которые ещё не вошли в озвучку |
redub_available |
Доступно ли точечное передублирование для этого результата |
available_speaker_ids |
Спикеры с сохранёнными голосовыми референсами, доступные в редакторе |
unrecognized_source_regions |
Участки речи, для которых не удалось получить текст |
requested_settings |
Запрошенные параметры |
effective_settings |
Фактически применённые параметры |
Сокращённый пример:
{
"id": "operation-id",
"done": true,
"metadata": {
"status": "completed",
"progress_percent": 100
},
"response": {
"schema_version": "1.0",
"revision": 1,
"artifact_revision": 1,
"pending_redub_segment_ids": [],
"redub_available": true,
"available_speaker_ids": [1],
"audio_url": "/api/audio-translation/v1/operations/operation-id/audio",
"filename": "audio-translation-operation-id.wav",
"source_language": "ru-RU",
"target_language": "en-US",
"duration_ms": 18500,
"segments": [
{
"id": "seg-0001",
"speaker": 1,
"start_ms": 420,
"end_ms": 2380,
"source_text": "Доброе утро.",
"translated_text": "Good morning.",
"status": "completed",
"dub_status": "ready"
}
],
"unrecognized_source_regions": []
},
"error": null
}
Для скачивания используйте audio_url и video_url из актуального ответа на
запрос статуса.
Данные и права на голос¶
- Запускайте клонирование только для собственного голоса или при наличии согласия каждого спикера.
- Не используйте результат для выдачи себя за другого человека, обхода аутентификации, мошенничества или создания вводящей в заблуждение записи.
- Исходный файл и голосовые референсы хранятся вместе с результатом в течение срока хранения операции, чтобы можно было передублировать отдельную реплику. Они не добавляются в библиотеку постоянных голосов.
- Вызов
:purgeудаляет доступные результаты и производные данные операции. - Срок автоматического хранения результата зависит от настроек сервиса.
Ошибки¶
| Код | Когда возникает |
|---|---|
400 |
Не передан источник, переданы сразу два источника, языки совпадают, неверны параметры или не подтверждены права на голоса |
401 |
Отсутствует или неверна аутентификация |
404 |
Операция или запрошенный файл не найдены либо недоступны пользователю |
409 |
У пользователя уже есть активный перевод или повторное озвучивание невозможно |
413 |
Превышен допустимый размер файла |
422 |
Параметр несовместим с выбранным языком или режимом |
429 |
Очередь переводов заполнена; повторите запрос позже |
503 |
Перевод аудио или выбранный провайдер временно недоступен |
Ошибка фоновой обработки записывается в объект операции: done=true,
metadata.status="failed", а подробности находятся в поле error.