Перейти к содержанию

Как вытащить субтитры?


NikolasGood

Рекомендуемые сообщения

Всем привет! Делаю программу для озвучивания субтитров и возникла мысль брать из из памяти игры - это бы ускорило весь процесс..
Так вот, почти во всех играх не получается найти текст субтитров которые появились на экране игры. Они либо находятся частично (возможно я не полностью считываю строку с ними, пробовал на игре Divinity Original Sin 1 и 2), а иной раз вообще не ищутся даже по одной буква, например в игре Atom RPG.
Также заметил, что последующие субтитры имеют уже другие адреса..
Подскажите как можно работать с субтитрами, чтобы их вытащить и после перезагрузки игры - иметь доступ к считыванию новых субтитров которые будут появляться на экране игры?

Ссылка на комментарий
Поделиться на другие сайты

Нужно найти функцию которая вызывает субтитры, наверняка они по какому то адресу вызываются, а вообще зависит от игры, где то могут вообще сделать что все субтитры вызывают разные функции (например функции в миссии), тогда нецелесообразно так читать.
И потом, ты же озвучивать хочешь, зачем тебе озвучка не в момент игры, как ты будешь передавать эмоции? (если такая цель стоит), а то получится у тебя озвучка, вроде такого:
Люди кричат, город горит, и мимо пробегающий житель спокойно говорит: Тут город горит, у нас половина населения пострадало *весёлым голосом* ?

Изменено пользователем imaginary
Ссылка на комментарий
Поделиться на другие сайты

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

Чтобы свой написать,то  через любой отладчик/дизассемблер искать код распаковки ресурсов и на его основе сделать свой.

Более подробно не подскажу, надо сидеть и заниматься этим, а времени на это нет к сожалению :)

Ссылка на комментарий
Поделиться на другие сайты

17 часов назад, imaginary сказал:

Нужно найти функцию которая вызывает субтитры, наверняка они по какому то адресу вызываются, а вообще зависит от игры, где то могут вообще сделать что все субтитры вызывают разные функции (например функции в миссии), тогда нецелесообразно так читать.
И потом, ты же озвучивать хочешь, зачем тебе озвучка не в момент игры, как ты будешь передавать эмоции? (если такая цель стоит), а то получится у тебя озвучка, вроде такого:
Люди кричат, город горит, и мимо пробегающий житель спокойно говорит: Тут город горит, у нас половина населения пострадало *весёлым голосом* ?

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


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

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

Ссылка на комментарий
Поделиться на другие сайты

Можешь попробовать сильно замедлять спидхаком игру, чтобы было побольше времени на поиск субтитров в памяти и на проверку их отрабатывания. Но я не уверен, что это всегда будет давать результат. Например, субтитры для уровня могут загружаться в момент загрузки уровня, конвертироваться в глифы, и в определенный момент уже выводиться на экран. В этом случае искать субтитры по тексту будет бесполезно. Я скажу, что такое используется во всех играх,  но, тем не менее, такое вполне возможно. Потому распознавание экрана - вариант наиболее универсальный. Чтобы не было задержек, рекомендую ограничивать область снятия скриншота для анализа, и использовать библиотеку Tesseract, а при распознавании учитывать расстояние Левинштейна, чтобы минимизировать количество ошибок на выходе.

Ссылка на комментарий
Поделиться на другие сайты

11 часов назад, Xipho сказал:

Можешь попробовать сильно замедлять спидхаком игру, чтобы было побольше времени на поиск субтитров в памяти и на проверку их отрабатывания. Но я не уверен, что это всегда будет давать результат. Например, субтитры для уровня могут загружаться в момент загрузки уровня, конвертироваться в глифы, и в определенный момент уже выводиться на экран. В этом случае искать субтитры по тексту будет бесполезно. Я скажу, что такое используется во всех играх,  но, тем не менее, такое вполне возможно. Потому распознавание экрана - вариант наиболее универсальный. Чтобы не было задержек, рекомендую ограничивать область снятия скриншота для анализа, и использовать библиотеку Tesseract, а при распознавании учитывать расстояние Левинштейна, чтобы минимизировать количество ошибок на выходе.

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

Мне определённо нужна помощь знающего человека ?

Ссылка на комментарий
Поделиться на другие сайты

15 часов назад, NikolasGood сказал:

но почти всегда проблема убрать фон

Не нужно убирать фон ) Делай более быстрые преобразования - сначала преобразуешь в градации серого, потом увеличиваешь контраст, и скейлишь картинку процентов на 25, тессеракту станет распознавать куда проще.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Xipho сказал:

Не нужно убирать фон ) Делай более быстрые преобразования - сначала преобразуешь в градации серого, потом увеличиваешь контраст, и скейлишь картинку процентов на 25, тессеракту станет распознавать куда проще.

Неее, это так не работает )) Субтитры из ELEX, GTA 4 и 5 не распознаст нормально, так как фон белый или пёстрый, а текст белый. Тессеракт будет плохо распознавать, даже если под каждую игру сделать свой шрифт и обучить по ней нейронку. Я на это убил кучу времени.. Меня не устроит распознавание 90%, это мало.

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, Xipho сказал:

Я тессеракт использовал, когда писал бота для одного покер-рума. Там стол был вообще пестрый, и ничего, обучилась нейронка, ошибок не было.

Вот среднестатистические скриншоты из ELEX https://yadi.sk/i/kWcM5OXUwWJ88Q
Как не настраивай тессеракт, 4-ая снизу не распознается нормально. И другие тоже будут с ошибами. По этому хочу от скринов уйти. А с субтитрами похоже вообще никак. Даже не отследить процесс, каждый текст появляется 1 раз.

Изменено пользователем NikolasGood
Ссылка на комментарий
Поделиться на другие сайты

В игре Conarium адрес на субтитры один. Но вот незадача, при поиске инструкции которая обращается к этому адресу, в ней тот же адрес, что и отвечает за субтитры. Я новичёк, может я чего-то не понимаю, но как мне найти указатель? К слову, поиск указателя через опцию Найти указатель на этот адрес ни к чему ни приводит - пусто.
https://yadi.sk/i/CjikRdGMK2v1gA

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

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