Переклад 40 годин лекцій на 5 мов зі збереженням голосу лектора — задача, з якою стикаються багато EdTech-компаній. Традиційний дубляж вимагає найму дикторів для кожної мови, що коштує десятки тисяч доларів і розтягується на місяці. Ми розробили voice preservation pipeline, який вирішує цю задачу за 2-4 тижні з якістю, не відмінною від оригіналу. Результат: 93% слухачів не помітили підміни, SECS 0.88, latency p99 1.8 секунди. Економія бюджету — до 80% (з $50 000 до $10 000).
Вилучення 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, що дає в 1.3–1.5 рази вищий SECS.
Zero-shot TTS з кондиціонуванням на 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).
Чому обирають нас?
- Досвід: 5+ років у S2S та TTS, сертифікація NVIDIA NGC, більше 50 впроваджень.
- Гарантія: гарантуємо SECS не нижче 0.85 для zero-shot та 0.90 після fine-tuning.
- Прозорість: детальний звіт з метриками та A/B-тестуванням.
Ми беремо проєкти під ключ. Отримайте попередню оцінку за 2 дні – просто надішліть 5 хвилин вашого аудіо. Наш досвід: понад 50 впроваджень S2S і TTS, сертифікація NVIDIA NGC. Зв'яжіться з нами для детального аудиту ваших даних.
Speaker embedding extraction based on ECAPA-TDNN architecture: Desplanques et al. (Interspeech)







