Перевод 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)







