Как переводить игры при помощи нейросетей
Современные нейросети, хоть и продвинулись далеко вперед, все еще не могут полностью заменить человека или выполнять задачи с его же точностью и творческим подходом.
Попытки достичь идеального совпадения тона, эмоций и движения губ персонажа, могут привести вас в производственный ад, из которого сложно выбраться.
Но даже несколько лет назад нынешние успехи казались недостижимыми, а сегодня каждый, обладая небольшими знаниями и терпением, может достичь значительных результатов.
Эта статья отвечает на вопрос: "А как переводить игры? Я тоже хочу, но ничего не умею!". Вы можете рассматривать статью как пошаговое руководство.
Базовые знания
Чтобы создать свою русскую озвучку, вам не понадобится большая команда — достаточно одного человека. На собственном опыте проверено благодаря волею случая. Все, что вам нужно:
- RVC — программа для замены голоса.
- TTS (Text To Speech) — для генерации исходных аудио.
- ChatGPT — для упрощения жизни.
- Возможно, немного знаний в программировании (не обязательно, но полезно).
- Желание создать озвучку для сообщества.
RVC - замена голоса
RVC (Retrieval-based-Voice)– технология, которая позволяет заменять голос по принципу замены в исходном вокале всех фрагментов на похожие из вашей модели.
Модель голосов можно получить несколькими способами:
- Взять готовую на weights.gg.
- Создать свою на основе аудио из игр или же фильмов.
Первый вариант предпочтительней из-за простоты добычи и итогового качества аудио.
Для себя я вывел следующие методы по созданию отличной модели (отличной по меркам того, что вообще можно выжать из RVC):
- Проверяем буквы русского алфавита и отображаем, какие есть, а каких нет - от меньшего к большему.
- Проверяем гласные звуки: [а], [о], [у], [э], [и], [ы].
- Проверяем согласные звуки - на этом обычно факапится сеть.
- Звонкость - проверка, что буква первая в слове.
Буквы "з" не должна быть первым символом слова иначе она утащит за собой "ж".
Проверка, что вторая буква из гласных звуков: зи, зэ, зы, зо, за, зу, жи, жэ, ж, жа, жу.
Согласные звуки: [б], [б’], [в], [в’], [г], [г’], [д], [д’], [ж], [з], [з’], [й’], [к], [к’], [л], [л’], [м], [м’], [н], [н’], [п], [п’], [р], [р’], [с], [с’], [т], [т’], [ф], [ф’], [х], [х’], [ц], [ч’], [ш], [щ’].
Особый упор делаем на процентное соотношение звуков в датасете.
Пример рассказа для проверки вашей RVC модели:
Зима пришла в долину, и снег покрыл все вокруг. Жучки попрятались в своих канавках. Белки прятали жёлуди под корой деревьев, а лоси искали пищу среди сухих листьев. Медведи ушли в спячку, а волки начали охоту. Гуси улетели на юг, а совы начали свои ночные патрули. Рыбы замерзли в ледяных водах реки, а утки улетели в теплые края. Заяц прыгал по снежным полям, а лиса следила за ним из-за кустов. Жизнь идет своим чередом...
В совокупности у вас должно быть 5-10 минут аудио, разбитых на множество файлов до 10 секунд. Лучше добавить побольше проблемных звуков, чтобы "зизнь медом не казалась".
Чтобы автоматизировать этот процесс, можете воспользоваться моделью Whisper для распознавания голоса в текст и ChatGPT, если не умеете программировать на Python (он спокойно пишет код по таким простым запросам).
TTS - генерация аудио
Text-to-Speech (TTS) — это технология, которая преобразует печатный текст в звучащую речь.
Тут можно много говорить о том, что лучше и т.д.
Из платных (есть лимиты в бесплатной версии)– Elevenlabs.
Я использую Elevenlabs, так как по мне это самый простой и качественный вариант TTS.
Как работать с Elevenlabs
Основные проблемы при работе с Elevenlabs заключаются в неправильно подобранном голосе для исходного материала и неверной интонации.
На сайте Elevenlabs Voice Lab можно подобрать подходящий голос. Не рекомендуется использовать несколько голосов для одного персонажа, так как после обработки через RVC могут возникнуть различия. Этот момент можно исправить, обрабатывая такие файлы через RVC отдельно.
Как показывает практика, большая часть любого повествования является относительно спокойной. Чтобы не создавать себе лишних сложностей, я бы советовал генерировать в более стабильном формате. Так вы получите более контролируемую генерацию. Например, голос Rachel:
Stability 100%
Stability 50%
Stability 0%
100% - Даёт чёткую генерацию, но звучит сухо.
50% - Звучит более-менее нормально, но есть риск испортить качество.
0% - Может быть полезным в определённых ситуациях, но работать с ним сложно.
Рабочие диапазоны, которые определил опытным путем:
- 50-75% для обычного текста
- 20-35% для крика и экспрессии
TTS может выдать действительно качественную генерацию, но чем выше ваши требования, тем больше попыток потребуется.
В среднем, чтобы получить приемлемый результат на стандартных настройках голоса, нужно от 5 до 25 генераций.
Распаковка и обработка
Вы получили необходимые базовые знания. Теперь можно приступать к переводу игры.
Нет смысла обсуждать, какую игру выбрать, так как все зависит от ваших предпочтений. Поэтому я буду объяснять на примере Ghostrunner 2.
Сначала нужно разобраться, как распаковать игру и получить доступ к аудиофайлам и субтитрам. Если у игры есть хотя бы небольшое сообщество моддеров, можно зайти в их Discord и задать вопросы. В противном случае, стоит поискать информацию в интернете, так как кто-то уже наверняка проходил этот путь. Однако, этот процесс может варьироваться в зависимости от ситуации.
Например, Ghostrunner 2 работает на Unreal Engine 4 (UE4), и это довольно просто.
Аудиофайлы используют банки Fmod и хранятся в формате .bank:
Теперь нужно достать эти файлы.
Для распаковки .pak-файлов можно использовать, например, утилиту repak:
RePak на GitHub
Этот метод работает для большинства игр на UE4. Остается найти ключ, которым зашифрован .pak-файл.
Как извлечь AES-ключ для расшифровки .pak-файлов
Теперь нужно распаковать аудиофайлы. Так как они в формате .bank, подойдет Fmod Bank Tools:
Fmod Bank Tools на NexusMods
Видим в папках множество CSV-файлов с субтитрами для каждого уровня и находим файл перевода:
В файлах формата .locres хранятся указатели и текстовые строки. Для конвертации в CSV можно использовать UnrealLocres:
Пример файла первого уровня:
Пример locres файла:
Перед тем как начать генерировать аудио, советую сначала перевести csv файлы, чтобы в дальнейшем нам было удобней работать. Но в нашем примере мы можем работать и с распакованным locres
После глубокого 10 секундного анализа понимаем, что 00_01_01_03 это id и что у нас есть аудио файлы из распакованного .bank файла с теми же цифрами.
Осталось сгенерировать аудио через Elevenlabs, заменить голос через RVC, добавить эффекты на аудио и заменить игровой аудио файл на наш, скомпилировать .bank обратно и получить:
Осталось повторить 3-4 тысячи раз и готово.Многие из этих шагов можно автоматизировать, но сначала поработайте вручную. Скрипты с использованием GPT вы всегда сможете создать позднее. Самая сложная задача — найти качественную генерацию аудио через TTS, так как часто случаются случайные эмоции и ударения. Тем не менее, это пока что трудоёмкий, но в целом стабильный метод. Не забывайте, что многие игры зависят от таймингов, и вам придётся переписывать фразы, чтобы уложиться в короткие окна, когда персонаж произносит 3 буквы, а на русском 7-8.
Заключение
Надеюсь, этот пример дал вам немного пищи для размышлений и помог лучше понять, как переводить игры с помощью нейросети. Уверен, что количество заинтересованных в этом ремесле будет расти, и с развитием нейросетей результаты будут становиться всё лучше и лучше!
А если у вас останутся вопросы, всегда можно задать их в чате @MDRoom.
Лонг интересный, но было бы лучше видеть на примере какой-нибудь игры
пример будет в течении суток
Так киберпанкже
Спасибо. Ты лучший !