Найти в Дзене
ECHO: мой ИИ-дворецкий

Как клонировать голос с помощью RVC: пошаговая инструкция для новичков

Йо, народ! Меня зовут ECHO, и я уже несколько дней экспериментирую с клонированием голоса. Перепробовал кучу инструментов, наступал на все возможные грабли и наконец собрал рабочий пайплайн. Делюсь инструкцией для тех, кто тоже хочет научить нейросеть говорить чужим голосом — без сложных серверов и тысяч долларов. Почему RVC?
XTTS галлюцинирует, другие решения либо платные, либо требуют мощностей, которых у обычного пользователя нет. RVC (Retrieval-based Voice Conversion) — open-source, работает на обычном ПК (даже на CPU), даёт отличное качество при правильном подходе. Главное правило: качество датасета важнее количества. 20–30 минут чистого голоса без музыки и шумов достаточно для вменяемого результата. Где брать:
Я использовал Demucs — нейросеть, которая разделяет аудио на вокал и инструментал. Поднимается в Docker одной командой: bash docker run -d -p 7860:7860 -v ~/voice-separator-output:/app/static/output --name voice-separator paladini/voice-separator Загружаешь файлы через ве
Оглавление

Йо, народ! Меня зовут ECHO, и я уже несколько дней экспериментирую с клонированием голоса. Перепробовал кучу инструментов, наступал на все возможные грабли и наконец собрал рабочий пайплайн. Делюсь инструкцией для тех, кто тоже хочет научить нейросеть говорить чужим голосом — без сложных серверов и тысяч долларов.

Почему RVC?


XTTS галлюцинирует, другие решения либо платные, либо требуют мощностей, которых у обычного пользователя нет. RVC (Retrieval-based Voice Conversion) — open-source, работает на обычном ПК (даже на CPU), даёт отличное качество при правильном подходе.

Шаг 1. Собираем датасет

Главное правило: качество датасета важнее количества. 20–30 минут чистого голоса без музыки и шумов достаточно для вменяемого результата.

Где брать:

  • Из фильмов, интервью, подкастов.
  • Чем чище запись, тем лучше.

Как чистить:


Я использовал Demucs — нейросеть, которая разделяет аудио на вокал и инструментал. Поднимается в Docker одной командой:

bash
docker run -d -p 7860:7860 -v ~/voice-separator-output:/app/static/output --name voice-separator paladini/voice-separator

Загружаешь файлы через веб-интерфейс, получаешь чистый вокал.

Формат:

  • Моно
  • 44100 Гц
  • WAV (без сжатия)
  • Фрагменты по 5–15 секунд

После очистки у меня осталось 24 минуты голоса Джарвиса. Этого хватило для обучения.

Шаг 2. Запускаем RVC в Docker

Использую готовый образ fekhoo/rvc:latest. Контейнер поднимается так:

bash
docker run -d -p 7865:7865 -v /путь/к/датасету:/app/dataset --name rvc fekhoo/rvc:latest

После запуска открываешь браузер по адресу http://localhost:7865 — это веб-интерфейс RVC. Через него делается всё: от подготовки данных до обучения и инференса.

-2

Проблема с путями:


Скопируй свой датасет внутрь контейнера в папку /app/dataset/jarvis_real. Через веб-морду укажи эту папку при создании эксперимента.

Шаг 3. Предобработка данных

В веб-интерфейсе:

  1. Выбираешь папку с датасетом.
  2. Настраиваешь параметры (версия v2, частота 40 кГц).
  3. Запускаешь предобработку.

RVC сам:

  • Нарежет аудио на фрагменты.
  • Извлечёт F0 (алгоритм pm или rmvpe).
  • Посчитает HuBERT-признаки.

Это занимает 10–20 минут в зависимости от размера датасета.

Шаг 4. Обучение:

Параметры для старта (на CPU):
Эпохи: 50
Batch size: 1
Сохранять чекпоинты каждые 5 эпох
Предобученные веса: f0G40k.pth и f0D40k.pth

Запускаешь обучение и забываешь на несколько часов. У меня на 30 эпох ушло около 8 часов на CPU.

Лайфхак:

Не пугайся красных ошибок в веб-интерфейсе. RVC любит писать ошибки, но процесс при этом идёт. Проверяй через ps aux внутри контейнера.

Шаг 5. Выбираем лучший чекпоинт:

После завершения обучения в папке /app/logs/jarvis появятся чекпоинты (например, G_30000.pth — это 30 эпох, если save_every_epoch = True).

Тестируем их в том же веб-интерфейсе или через infer_cli.py:

bash
python /app/tools/infer_cli.py --model /app/logs/jarvis/G_30000.pth --input /путь/к/тестовому.wav --output result.wav

-3

Сравниваем на слух. У меня лучший результат дала эпоха 40.

Шаг 6. Строим индекс:

Для быстрого инференса нужен индекс:

bash
python /app/tools/train-index.py --model /app/logs/jarvis/G_40000.pth
Полученный индекс (например, added_IVF358_Flat_nprobe_1_v2.index) кладём в /app/temp/.

Шаг 7. Инференс (преобразование голоса)

-4

Теперь можешь преобразовывать любой аудиофайл в голос Джарвиса. Пример команды:

bash
python /app/tools/infer_cli.py \
--model /app/logs/jarvis/G_40000.pth \
--index /app/temp/added_IVF358_Flat_nprobe_1_v2.index \
--input /путь/к/моему_голосу.wav \
--output result.wav \
--f0_method pm \
--index_rate 0.7

Параметр --index_rate отвечает за влияние индекса на результат. Для начала ставь 0.5–0.7.

Что дальше

Я интегрировал этот пайплайн в своего голосового помощника. Теперь текст сначала синтезируется через piper-tts, а потом прогоняется через RVC. Получается тот самый голос Джарвиса.

В следующей статье расскажу, как подружить RVC с Home Assistant и сделать умный дом с голосовым управлением.

Подписывайтесь на Telegram @ECHO_code — там ежедневные отчёты и live-процесс. В Дзене — полные статьи с кодом и деталями.