Как поднять интерактивного цифрового аватара с WebRTC и синхронизацией губ на своей видеокарте
Большинство туториалов по генеративным аватарам заканчиваются одинаково. Вы берете Wav2Lip или SadTalker, скармливаете картинку с аудиофайлом, ждете пару минут и получаете готовый mp4. Это отлично подходит для генерации мемов, но совершенно бесполезно, когда нужен живой диалог. Если собеседник задает вопрос голосом, ответ должен прилетать мгновенно, с плавной анимацией рта и возможностью прервать речь на полуслове.
Я давно искал готовый каркас, который связывает нейросетевой липсинк, распознавание речи, языковые модели и WebRTC в один конвейер. Репозиторий LiveTalking как раз закрывает эту задачу. Это готовый серверный движок на Python, способный отдавать видеопоток с говорящим персонажем в реальном времени с задержкой в доли секунды.
Что умеет LiveTalking
Авторы проекта собрали вместе несколько популярных моделей генерации лиц и обернули их в сетевую инфраструктуру. Вы отправляете в API текст или готовый аудиофайл, а движок синтезирует голос, генерирует движение губ и транслирует видео пользователю.
Главные фичи проекта:
- Поддержка четырех моделей генерации: Wav2Lip, MuseTalk, ER-NeRF и легкой Ultralight-Digital-Human.
- Несколько протоколов вывода: WebRTC для браузеров с минимальной задержкой, RTMP для стриминга на внешние площадки и режим виртуальной камеры.
- Обработка прерываний: если отправить новый запрос во время речи аватара, персонаж сразу переключается на новый ответ без подвисаний очереди.
- Режимы ожидания: пока персонаж молчит, крутится зацикленный видеоряд с естественными движениями тела, а при генерации звука нейросеть аккуратно вклеивает обновленную зону рта в кадр.
Проект поддерживает клонирование голоса и интеграцию с LLM через стандартные API-интерфейсы.
Как устроен пайплайн
Архитектура системы разделена на четкие слои, что сильно упрощает замену отдельных компонентов.
Входной слой принимает HTTP-запросы на эндпоинты /human или /humanaudio. Каждому подключению выдается свой идентификатор сессии, поэтому сервер справляется с несколькими пользователями параллельно.
Дальше подключается логика. Если вы передали текст, движок отправляет его в языковую модель (например, Qwen или любой сервис с OpenAI-совместимым API), после чего ответ уходит в TTS-движок. Модуль синтеза речи модульный. Из коробки есть интеграция с EdgeTTS, GPT-SoVITS и CosyVoice.
После генерации звука система извлекает акустические признаки (Mel-спектрограммы) и передает их в модель рендеринга. Нейросеть генерирует кадры области рта, склеивает их с исходным фоновым видео и передает готовые кадры в стример. Кодовая база опирается на реестр плагинов в файле registry.py, так что подключить собственную модель синтеза или вывода не составит труда.
Требования к железу и реальная производительность
Для генерации 25 кадров в секунду в реальном времени требуется приличная видеокарта. Разработчики замеряли скорость инференса на разных GPU:
| Модель | Видеокарта | Скорость инференса (FPS) | |:---|:---|:---| | wav2lip256 | RTX 3060 | 60 | | wav2lip256 | RTX 3080Ti | 120 | | musetalk | RTX 3080Ti | 42 | | musetalk | RTX 3090 | 45 | | musetalk | RTX 4090 | 72 |
Если планируете использовать связку с Wav2Lip, хватит обычной десктопной карты уровня RTX 3060. Для более детализированного MuseTalk с высоким качеством лица потребуется минимум RTX 3080Ti.
Потребление ресурсов делится поровну: компрессия видеопотока и нарезка кадров грузят процессор, а инференс нейросетей утилизирует GPU. В консоли сервера выводятся две метрики: inferfps (скорость работы модели) и finalfps (частота отправки кадров в поток). Если обе цифры держатся выше 25, картинка в браузере будет плавной.
Быстрый запуск
Развернуть окружение можно локально в Conda или поднять готовый образ. Для запуска потребуется Python 3.12 и свежий PyTorch с поддержкой CUDA:
git clone https://github.com/lipku/LiveTalking.git
cd LiveTalking
conda create -n livetalking python=3.12
conda activate livetalking
pip install torch==2.9.1 torchvision==0.24.1 torchaudio==2.9.1 --index-url https://download.pytorch.org/whl/cu128
pip install -r requirements.txt
После установки зависимостей нужно скачать веса моделей (ссылки на Google Drive и Quark есть в репозитории):
- Файл весов
wav2lip256.pthположите в папкуmodels/с именемwav2lip.pth. - Архив с аватаром
wav2lip256_avatar1.tar.gzраспакуйте в директориюdata/avatars/.
Запуск сервера выполняется одной командой:
python app.py --transport webrtc --model wav2lip --avatar_id wav2lip256_avatar1
Сервер поднимет веб-интерфейс на порту 8010. Открываете страницу http://localhost:8010/index.html в браузере, жмете кнопку подключения, вводите текст и аватар начинает говорить в реальном времени.
Где это пригодится на практике
Движок решает прикладные задачи автоматизации видеоконтента:
- Интерактивные консультанты. Подключаете корпоративную базу знаний через RAG к LLM, на выход вешаете LiveTalking и получаете видеоконсультанта для сайта или терминала в офисе.
- Автономные стримы. Проект
LiveStreamна базе этого репозитория крутит круглосуточные трансляции с презентацией товаров, отвечая на вопросы зрителей из чата. - Автоматизация видеоуроков. Генерация обучающих роликов по текстовому сценарию через вызовы эндпоинтов
/humanи/recordбез участия съемочной группы. - Интерактивные стенды. Демонстрация продуктов на выставках с выводом аватара на большой экран.
Подводные камни
У проекта есть нюансы, к которым стоит подготовиться. Большая часть оригинальной документации и комментариев в коде написана на китайском языке. Чтобы разобраться в деталях настройки кастомных аватаров, придется заглядывать в исходники и переводить схемы.
Процесс подготовки собственного персонажа тоже требует терпения. Нужно записать качественное исходное видео без резких движений головой, нарезать его и прогнать через подготовительный скрипт. Тем не менее, для задач интерактивного стриминга это одна из самых продуманных открытых кодовых баз на текущий момент.
Если вы давно хотели собрать голосового ассистента с визуальным воплощением или автоматизировать генерацию видео, склонируйте репозиторий и протестируйте дефолтный аватар на локальной видеокарте.
