Перевод 40 часов лекций на 5 языков с сохранением голоса лектора — задача, с которой сталкиваются многие EdTech-компании. Традиционный дубляж требует найма дикторов для каждого языка, что обходится в десятки тысяч долларов и растягивается на месяцы. Мы разработали voice preservation pipeline, который решает эту задачу за 2-4 недели с качеством, неотличимым от оригинала. Результат: 93% слушателей не заметили подмены, SECS 0.88, latency p99 1.8 секунды. Экономия бюджета — до 80%.
Извлечение speaker embedding с помощью ECAPA-TDNN
Для захвата характеристик голоса используем предобученный экстрактор из SpeechBrain — ECAPA-TDNN. Он выдаёт 192-мерный вектор, который затем подаётся в TTS-модуль.
from speechbrain.pretrained import EncoderClassifier import torchaudio import torch encoder = EncoderClassifier.from_hparams( source="speechbrain/spkrec-ecapa-voxceleb", savedir="tmp_encoder" ) def extract_speaker_embedding(audio_path: str) -> torch.Tensor: signal, sr = torchaudio.load(audio_path) if sr != 16000: signal = torchaudio.functional.resample(signal, sr, 16000) embedding = encoder.encode_batch(signal) return embedding.squeeze() # (192,) вектор Сравнение XTTS v2 и SeamlessM4T: сохранение голоса
SeamlessM4T (Meta) — end-to-end модель, которая переводит речь напрямую, частично сохраняя просодику. Её speaker embedding встроен и не подстраивается под конкретного диктора. XTTS v2, наоборот, принимает референсное аудио и кондиционируется на извлечённый embedding, что даёт на 15–25% более высокий SECS.
Zero-shot TTS с conditioning на embedding
from TTS.api import TTS tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to("cuda") async def voice_preserving_translate( source_audio: str, target_language: str, target_text: str ) -> np.ndarray: # XTTS использует source_audio для извлечения голосовых характеристик wav = tts.tts( text=target_text, speaker_wav=source_audio, language=target_language ) return np.array(wav) SeamlessM4T — end-to-end подход
Meta SeamlessM4T поддерживает S2ST с частичным сохранением просодики:
from transformers import SeamlessM4Tv2ForSpeechToSpeech, AutoProcessor import torchaudio processor = AutoProcessor.from_pretrained("facebook/seamless-m4t-v2-large") model = SeamlessM4Tv2ForSpeechToSpeech.from_pretrained( "facebook/seamless-m4t-v2-large" ).to("cuda") audio, sr = torchaudio.load("source.wav") inputs = processor(audios=audio, src_lang="rus", return_tensors="pt").to("cuda") with torch.no_grad(): output = model.generate(**inputs, tgt_lang="eng") translated_audio = output[0].cpu().numpy().squeeze() Поддерживает 100+ языков, задержка 1–3 секунды на длинных фрагментах.
| Подход | SECS | Perceptual Score |
|---|---|---|
| SeamlessM4T | 0.60–0.70 | 3.2–3.5 |
| XTTS v2 zero-shot | 0.78–0.88 | 3.8–4.2 |
| Fine-tuned XTTS | 0.88–0.93 | 4.2–4.5 |
Сравнение экстракторов speaker embedding
| Модель | Размерность | SECS на VoxCeleb | Задержка |
|---|---|---|---|
| ECAPA-TDNN (SpeechBrain) | 192 | 0.92 | 1.2 ms |
| CAM++ (WeSpeaker) | 512 | 0.94 | 2.0 ms |
| x-vector (Kaldi) | 512 | 0.88 | 1.5 ms |
Как fine-tune XTTS v2 под голос диктора?
Для тонкой настройки достаточно 5–20 минут чистой речи на исходном языке в формате WAV 16kHz, моно. Мы используем LoRA-адаптеры, что снижает требования к GPU-памяти до 8 GB. Процесс занимает 4–8 часов на V100. Результат: SECS вырастает с 0.78 до 0.88–0.93 на целевых языках. Экономия ресурсов: вместо ручного дубляжа с дикторами вы платите только за GPU-часы, в 5–10 раз дешевле.
Метрики оценки сохранения голоса
Основная метрика — SECS. Она сравнивает embedding исходного и синтезированного аудио. Для субъективной оценки используем Mean Opinion Score (MOS) с привлечением 10–15 слушателей. Дополнительно замеряем latency p99 и FLOPS для аудиофрагментов длиной 30 секунд.
Какие данные нужны для кастомного TTS с сохранением тембра?
Для создания голосового дубляжа AI требуется минимум 5 минут чистой речи. Чем больше референсного материала, тем точнее клонирование тембра. Рекомендуем 15–20 минут для оптимального качества.
Что входит в работу по внедрению voice preservation S2S
- Анализ исходных аудиоданных: проверка качества, удаление шумов, нормализация громкости.
- Выбор и настройка экстрактора speaker embedding (ECAPA-TDNN, CAM++).
- Развёртывание TTS-модуля (XTTS v2 или ваш кастомный VITS) с поддержкой batch-обработки.
- Интеграция машинного перевода (OpenAI GPT-4o, NLLB-200) с постредактированием.
- Оптимизация latency: vLLM для инференса TTS, ONNX Runtime для embedding-моделей.
- Тестирование на 10+ референсных записях, метрики SECS и MOS.
- Документация пайплайна и обучение вашей команды.
Реальный кейс: дубляж образовательного курса
Клиент — онлайн-университет с 40 часами лекций на русском. Требовалось перевести на 5 языков с сохранением голоса преподавателя. Мы выбрали XTTS v2 с fine-tuning на 15 минутах его речи. После деплоя на Triton Inference Server latency составила 1.8 секунды на фрагмент, SECS — 0.88. A/B-тест показал, что 93% слушателей не отличают синтез от оригинала. Решение работает в продакшене длительное время.
Процесс работы: от задачи до продакшена
- Аналитика (1–2 дня). Загружаем 3–5 минут вашего аудио, прогоняем через базовый pipeline, показываем результаты.
- Проектирование (3–5 дней). Выбираем стек, готовим архитектуру, подбираем модель TTS под язык и голос.
- Реализация (1–4 недели). Собираем pipeline, fine-tuning при необходимости.
- Тестирование (2–5 дней). A/B-тест на целевой аудитории, замеры latency p99.
- Деплой (1–3 дня). Контейнеризация, развёртывание на вашем или нашем сервере (GPU T4/A10G).
Мы берём проекты под ключ. Получите предварительную оценку за 2 дня – просто отправьте 5 минут вашего аудио. Наш опыт: более 50 внедрений S2S и TTS, сертификация NVIDIA NGC. Свяжитесь с нами для детального аудита ваших данных.
Speaker embedding extraction based on ECAPA-TDNN architecture: Desplanques et al. (Interspeech)







