Найти в Дзене

Театр в наушниках: Как озвучить диалог несколькими голосами в Silero

Вы написали сценарий, где встречаются ОН и ОНА. Или у вас в книге разговаривают трое друзей. Или вы делаете аудиоспектакль. Озвучить это одним голосом — значит убить всю драматургию. Нужны разные тембры, разные характеры, разные эмоции. Silero позволяет это сделать. Не одной кнопкой, конечно, но с помощью простых скриптов или даже ручной сборки вы можете создать полноценный аудиоспектакль, где каждый персонаж говорит своим уникальным голосом. Допустим, у нас есть диалог: Анна: Привет, как дела?
Петр: Привет, нормально. А у тебя?
Анна: Тоже хорошо. Пойдем гулять?
Петр: Давай, только пальто надену. Нам нужно, чтобы: Этот метод не требует программирования и подходит для небольших диалогов. Шаг 1. Подготовьте текстовые файлы Разбейте диалог на отдельные реплики. Для каждой реплики создайте отдельный текстовый файл (или просто список). Пример структуры: text 01_anna_1.txt: "Привет, как дела?"
02_petr_1.txt: "Привет, нормально. А у тебя?"
03_anna_2.txt: "Тоже хорошо. Пойдем гулять?"
04_pet
Оглавление

Вы написали сценарий, где встречаются ОН и ОНА. Или у вас в книге разговаривают трое друзей. Или вы делаете аудиоспектакль. Озвучить это одним голосом — значит убить всю драматургию. Нужны разные тембры, разные характеры, разные эмоции.

Silero позволяет это сделать. Не одной кнопкой, конечно, но с помощью простых скриптов или даже ручной сборки вы можете создать полноценный аудиоспектакль, где каждый персонаж говорит своим уникальным голосом.

Что мы хотим получить на выходе

Допустим, у нас есть диалог:

Анна: Привет, как дела?
Петр: Привет, нормально. А у тебя?
Анна: Тоже хорошо. Пойдем гулять?
Петр: Давай, только пальто надену.

Нам нужно, чтобы:

  • Анна говорила женским голосом (например, голос "baya" или "kseniya").
  • Петр говорил мужским голосом (например, голос "mikhail" или "aidar").
  • Были естественные паузы между репликами.
  • В идеале — чтобы голоса звучали в разных каналах (стереоэффект).

Метод 1. Ручная сборка (Самый простой и надежный)

Этот метод не требует программирования и подходит для небольших диалогов.

Шаг 1. Подготовьте текстовые файлы

Разбейте диалог на отдельные реплики. Для каждой реплики создайте отдельный текстовый файл (или просто список).

Пример структуры:

text

01_anna_1.txt: "Привет, как дела?"
02_petr_1.txt: "Привет, нормально. А у тебя?"
03_anna_2.txt: "Тоже хорошо. Пойдем гулять?"
04_petr_2.txt: "Давай, только пальто надену."

Шаг 2. Сгенерируйте каждую реплику в Silero

Для каждой реплики запустите генерацию, выбирая нужный голос:

  • Для файлов Анны используйте женскую модель (например, v3_1_ru.pt с speaker baya или kseniya).
  • Для файлов Петра используйте мужскую модель (например, v3_1_ru.pt с speaker mikhailили aidar).

В графическом интерфейсе (например, Silero-GUI от 71M) это делается простым выбором голоса из выпадающего списка.

Шаг 3. Соберите всё в аудиоредакторе

  1. Откройте Audacity (бесплатно) или любой другой редактор.
  2. Импортируйте все сгенерированные файлы.
  3. Разместите их на дорожках:
    Все реплики Анны можно положить на левый канал (или просто отдельную дорожку).
    Все реплики Петра — на правый канал (или другую дорожку).
  4. Отрегулируйте паузы между репликами, чтобы диалог звучал естественно (обычно 0.3-0.8 секунды).
  5. При желании добавьте легкую реверберацию ("Эффекты" -> "Реверберация"), чтобы создать ощущение единого пространства.
  6. Экспортируйте в MP3 или WAV.

Плюсы: Полный контроль, не требует программирования.
Минусы: Трудоемко для длинных диалогов.

Метод 2. Пакетная обработка через Python скрипт (Для продвинутых)

Если диалогов много, процесс нужно автоматизировать. Silero предоставляет отличный Python API.

Шаг 1. Установите зависимости

bash

pip install torch torchaudio silero

Шаг 2. Напишите скрипт

Вот пример скрипта, который читает структуру диалога из текстового файла и генерирует реплики разными голосами:

python

import torch
import soundfile as sf
import os

# Загрузка модели Silero
device = torch.device('cpu')
model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
model='silero_tts',
language='ru',
speaker='v4_ru')
model.to(device)

# Словарь соответствия персонажей и голосов
voices = {
'Анна': 'baya',
# женский голос
'Петр': 'mikhail',
# мужской голос
'ведущий': 'aidar'
# еще один мужской для ведущего
}

# Читаем сценарий
# Формат файла: персонаж: текст
# Например:
# Анна: Привет, как дела?
# Петр: Привет, нормально. А у тебя?

with open('dialogue.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()

# Генерируем каждую реплику
audio_files = []
for i, line in enumerate(lines):
if ':' not in line:
continue

character, text = line.split(':', 1)
character = character.strip()
text = text.strip()

if character not in voices:
print(f"Предупреждение: голос для {character} не найден, использую стандартный")
speaker = 'mikhail'
else:
speaker = voices[character]

# Генерация аудио
audio = model.apply_tts(text=text,
speaker=speaker,
sample_rate=48000)

# Сохраняем файл
filename = f'replica_{i:03d}_{character}.wav'
sf.write(filename, audio, 48000)
audio_files.append(filename)
print(f"Сгенерировано: {filename}")

# Здесь можно добавить код для автоматической склейки
# через pydub или ffmpeg
print("Готово! Теперь склейте файлы в аудиоредакторе.")

Шаг 3. Склейка

После генерации всех реплик вы можете:

  • Склеить их вручную в Audacity.
  • Использовать ffmpeg для автоматической конкатенации.
  • Использовать Python библиотеку pydub для программной склейки с паузами.

Пример склейки с pydub:

python

from pydub import AudioSegment
import glob

# Получаем все сгенерированные файлы в правильном порядке
files = sorted(glob.glob("replica_*.wav"))

# Начинаем с тишины
combined = AudioSegment.silent(duration=500)
# 0.5 сек паузы в начале

for file in files:
sound = AudioSegment.from_wav(file)
combined += sound + AudioSegment.silent(duration=300)
# пауза 0.3 сек между репликами

combined.export("dialogue_full.wav", format="wav")

Метод 3. Использование Silero-GUI с пакетным режимом

Если вы пользуетесь графической оболочкой Silero-GUI от 71M, проверьте, есть ли в ней функция пакетной обработки.

  1. Подготовьте список текстов и нужных голосов в CSV файле.
  2. Загрузите этот файл в программу.
  3. Нажмите "Batch process".
  4. Программа сгенерирует все файлы в указанную папку.

К сожалению, не все версии GUI поддерживают эту функцию, но в последних релизах она появляется. Проверьте раздел "Releases" и читайте описание.

Метод 4. Создание "эффекта присутствия" (Стерео-панорама)

Чтобы диалог звучал еще реалистичнее, можно разнести голоса по стереоканалам.

В Audacity это делается так:

  1. Поместите все реплики Анны на левую дорожку (или сдвиньте панораму влево).
  2. Поместите все реплики Петра на правую дорожку (панорама вправо).
  3. Если есть третий персонаж, оставьте его в центре.

Это создаст иллюзию, что собеседники находятся в разных точках пространства.

Продвинутые техники

1. Добавление "комнатного" звучания

Если все реплики звучат слишком сухо, добавьте одинаковую реверберацию на все дорожки. Это создаст ощущение, что они находятся в одном помещении.

  • В Audacity: "Эффекты" -> "Реверберация". Выберите "Small Room" или "Hall" с небольшой интенсивностью.
  • Важно: применяйте эффект ко всем репликам с одинаковыми настройками, чтобы пространство было единым.

2. Эмоциональная окраска

Silero позволяет менять не только голос, но и эмоциональную окраску (в новых версиях). В промпте можно указать:

python

# Для грустной реплики
audio = model.apply_tts(text=text,
speaker=speaker,
sample_rate=48000,
emotion='sad')
# может работать не во всех версиях

3. Автоматическая расстановка пауз

Паузы между репликами должны соответствовать длине предложений. Скрипт может анализировать длину текста и ставить паузы пропорционально:

python

# Простая эвристика: пауза зависит от количества символов
pause_duration = min(1000, max(200, len(text) * 10))
# от 200 мс до 1000 мс

Готовое решение для Windows (Быстрый старт)

Если вы не хотите писать код, а диалог нужно сделать прямо сейчас:

  1. Скачайте Silero-GUI от 71M: https://github.com/71M/Silero-GUI
  2. Подготовьте текстовый файл с репликами (каждая на новой строке).
  3. Сгенерируйте все реплики последовательно, каждый раз меняя голос вручную.
  4. Скачайте Audacity.
  5. Импортируйте все файлы, расставьте на дорожках, отрегулируйте паузы.
  6. Экспортируйте.

На первый диалог уйдет 20-30 минут. На второй — уже 10. На десятый — 5 минут.

Пример идеального диалога (Чек-лист)

Перед финальным экспортом проверьте:

  • Все реплики сгенерированы с правильными голосами.
  • Громкость реплик примерно одинаковая (если нет, нормализуйте).
  • Паузы между репликами естественные (не слишком длинные и не слишком короткие).
  • Добавлена легкая реверберация для единства пространства.
  • Для стерео-эффекта голоса разнесены по каналам.
  • В начале и конце файла есть небольшие паузы (0.5 сек).

Итог

Озвучка диалогов в Silero — это вполне реальная задача, которая решается комбинацией правильных инструментов и небольшого терпения.

Для простых диалогов достаточно ручной генерации и Audacity. Для сложных и длинных — стоит написать скрипт на Python, который автоматизирует 80% работы.

Главное — помните, что даже самые техничные инструменты не заменят живого чувства ритма и драматургии. Слушайте, как звучат реальные люди, копируйте их паузы, интонации, дыхание. И тогда ваш синтезированный диалог будет звучать как настоящий театр.