Как переводить игры при помощи нейросетей

Как переводить игры при помощи нейросетей

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

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

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

Эта статья отвечает на вопрос: "А как переводить игры? Я тоже хочу, но ничего не умею!". Вы можете рассматривать статью как пошаговое руководство.

Базовые знания

Чтобы создать свою русскую озвучку, вам не понадобится большая команда — достаточно одного человека. На собственном опыте проверено благодаря волею случая. Все, что вам нужно:

  • RVC — программа для замены голоса.
  • TTS (Text To Speech) — для генерации исходных аудио.
  • ChatGPT — для упрощения жизни.
  • Возможно, немного знаний в программировании (не обязательно, но полезно).
  • Желание создать озвучку для сообщества.

RVC - замена голоса

RVC (Retrieval-based-Voice)– технология, которая позволяет заменять голос по принципу замены в исходном вокале всех фрагментов на похожие из вашей модели.

Модель голосов можно получить несколькими способами:

  • Взять готовую на weights.gg.
  • Создать свою на основе аудио из игр или же фильмов.

Первый вариант предпочтительней из-за простоты добычи и итогового качества аудио.

Для себя я вывел следующие методы по созданию отличной модели (отличной по меркам того, что вообще можно выжать из RVC):

  • Проверяем буквы русского алфавита и отображаем, какие есть, а каких нет - от меньшего к большему.
  • Проверяем гласные звуки: [а], [о], [у], [э], [и], [ы].
  • Проверяем согласные звуки - на этом обычно факапится сеть.
  • Звонкость - проверка, что буква первая в слове.

Буквы "з" не должна быть первым символом слова иначе она утащит за собой "ж".

Проверка, что вторая буква из гласных звуков: зи, зэ, зы, зо, за, зу, жи, жэ, ж, жа, жу.

Согласные звуки: [б], [б’], [в], [в’], [г], [г’], [д], [д’], [ж], [з], [з’], [й’], [к], [к’], [л], [л’], [м], [м’], [н], [н’], [п], [п’], [р], [р’], [с], [с’], [т], [т’], [ф], [ф’], [х], [х’], [ц], [ч’], [ш], [щ’].

Особый упор делаем на процентное соотношение звуков в датасете.

Пример рассказа для проверки вашей RVC модели:

Зима пришла в долину, и снег покрыл все вокруг. Жучки попрятались в своих канавках. Белки прятали жёлуди под корой деревьев, а лоси искали пищу среди сухих листьев. Медведи ушли в спячку, а волки начали охоту. Гуси улетели на юг, а совы начали свои ночные патрули. Рыбы замерзли в ледяных водах реки, а утки улетели в теплые края. Заяц прыгал по снежным полям, а лиса следила за ним из-за кустов. Жизнь идет своим чередом...
На этом простом рассказе вы увидите 99% косяков вашей модели, останется добавлять в датасет проблемные звуки и повторять обучение до приемлемого результата.

В совокупности у вас должно быть 5-10 минут аудио, разбитых на множество файлов до 10 секунд. Лучше добавить побольше проблемных звуков, чтобы "зизнь медом не казалась".

Чтобы автоматизировать этот процесс, можете воспользоваться моделью Whisper для распознавания голоса в текст и ChatGPT, если не умеете программировать на Python (он спокойно пишет код по таким простым запросам).

TTS - генерация аудио

Text-to-Speech (TTS) — это технология, которая преобразует печатный текст в звучащую речь.

Тут можно много говорить о том, что лучше и т.д.

Из интересных и бесплатных – BARK / XTTS2

Из платных (есть лимиты в бесплатной версии)– 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:

Аудиофайлы используют банки Fmod и хранятся в формате .bank: \Ghostrunner2\Content\FMOD\Desktop\ Основные файлы игры находятся в архиве .pak: \Ghostrunner2\Content\Paks\

Теперь нужно достать эти файлы.

Для распаковки .pak-файлов можно использовать, например, утилиту repak:
RePak на GitHub

Этот метод работает для большинства игр на UE4. Остается найти ключ, которым зашифрован .pak-файл.
Как извлечь AES-ключ для расшифровки .pak-файлов

Теперь нужно распаковать аудиофайлы. Так как они в формате .bank, подойдет Fmod Bank Tools:
Fmod Bank Tools на NexusMods

Так как игра имеет русские субтитры, все просто. открываем распакованный архив и ищем папку локализации: \Ghostrunner2\Content\Localization\

Видим в папках множество CSV-файлов с субтитрами для каждого уровня и находим файл перевода:

файлы субитры: \Data\Dialog\ файл перевода: \ru-RU\Ghostrunner.locres

В файлах формата .locres хранятся указатели и текстовые строки. Для конвертации в CSV можно использовать UnrealLocres:

Пример файла первого уровня:

Key,SourceString "00_01_01_01","{CONNOR}: The attack started about twenty minutes ago." "00_01_01_02","{CONNOR}: The reactor team managed to contact us before they went down, but there's no way our reinforcements can beat the Hammers to the central chamber." "00_01_01_02","{CONNOR}: The reactor team managed to contact us before they went down, but there's no way our reinforcements can beat the Hammers to the central chamber." "00_01_01_03","{CONNOR}: Except for you." "00_01_01_04","{CONNOR}: Report once you're in position." "00_01_01_05","{JACK}: I'm in position." "00_01_01_06","{CONNOR}: Aight, Jackie." "00_01_01_07","{CONNOR}: Let's get rolling." "00_01_01_10","{CONNOR}: The Hammers have a hell of a headstart, no time to do it the usual way." "00_01_01_11","{CONNOR}: I'll be your handler on this one." "00_01_01_12","{JACK}: That's not necessary." "00_01_01_13","{CONNOR}: Sure it is, Jackie." "00_01_01_14","{CONNOR}: I've always wanted to work more closely with you."

Пример locres файла:

key,source,target 00_01/00_01_01_01,{CONNOR}: Атака началась около двадцати минут назад., 00_01/00_01_01_02,"{CONNOR}: Команда реактора успела связаться с нами до того, как спустилась вниз. Но «Молоты» доберутся до центра раньше нас.", 00_01/00_01_01_03,{CONNOR}: Надежда на тебя., 00_01/00_01_01_04,"{CONNOR}: Доложи, как будешь на месте.", 00_01/00_01_01_05,{JACK}: Я на месте., 00_01/00_01_01_06,"{CONNOR}: Умница, Джеки.", 00_01/00_01_01_07,{CONNOR}: Погнали., 00_01/00_01_01_10,"{CONNOR}: У «Молотов» огромная фора, будем действовать иначе.", ------- Так же там есть и перевод каждой строки в игре, но он нам не нужен.

Перед тем как начать генерировать аудио, советую сначала перевести csv файлы, чтобы в дальнейшем нам было удобней работать. Но в нашем примере мы можем работать и с распакованным locres

После глубокого 10 секундного анализа понимаем, что 00_01_01_03 это id и что у нас есть аудио файлы из распакованного .bank файла с теми же цифрами.
Осталось сгенерировать аудио через Elevenlabs, заменить голос через RVC, добавить эффекты на аудио и заменить игровой аудио файл на наш, скомпилировать .bank обратно и получить:

Осталось повторить 3-4 тысячи раз и готово.Многие из этих шагов можно автоматизировать, но сначала поработайте вручную. Скрипты с использованием GPT вы всегда сможете создать позднее. Самая сложная задача — найти качественную генерацию аудио через TTS, так как часто случаются случайные эмоции и ударения. Тем не менее, это пока что трудоёмкий, но в целом стабильный метод. Не забывайте, что многие игры зависят от таймингов, и вам придётся переписывать фразы, чтобы уложиться в короткие окна, когда персонаж произносит 3 буквы, а на русском 7-8.

Заключение

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

А если у вас останутся вопросы, всегда можно задать их в чате @MDRoom.

До новых встреч!
@MDSays / @MDRoom / YouTube / Boosty

1414
5 комментариев

Лонг интересный, но было бы лучше видеть на примере какой-нибудь игры

пример будет в течении суток

1

Так киберпанкже

Спасибо. Ты лучший !