Как сделать субтитры для игры

5 лучших БЕСПЛАТНЫХ автоматических генераторов субтитров в 2020-м

Как сделать субтитры для игры

Liza Brown

Dec 18, 2020• Проверенные решения

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

Часть 1: Лучшие бесплатные инструменты для создания субтитров к видео

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

1. Автоматические субтитры на YouTube

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

Процесс автоматической генерации субтитров на YouTube довольно простой, поскольку вам нужно лишь загрузить новое видео и после завершения загрузки найти это видео в Менеджере видео. Нажмите на раскрывающемся списке «Изменить», расположенное рядом с вашим недавно загруженным видео, и выберите параметр «Субтитры».

После этого, прежде чем создавать субтитры, вам потребуется выбрать язык видео. Так как я установил английский язык, доступна функция Английский (Автоматически), поскольку платформа может распознать язык, использованный в моем видео. Дважды щелкните по нему, а затем перейдите к нажатию на кнопку «Изменить», чтобы проверить и отредактировать автоматически сгенерированные субтитры. Вы можете перейти в каждую из строк текста и отредактировать орфографию, грамматику и пунктуацию.

Как сделать субтитры для игры

По завершению, подтвердите внесенные вами изменения, нажав на «Опубликовать изменения» и скрытые субтитры будут отображены рядом с названием вашего видео в Менеджере видео.

2. Функция автоматических субтитров на Facebook

Данный инструмент доступен только на американском английском для рекламодателей в США и Канаде, и он может быть весьма полезен для пользователей Facebook, которые часто загружают видео на этом языке в свои профили. Однако функция создания автоматических субтитров в Facebook не совсем надежна, а это означает, что вам необходимо вычитать все генерируемые субтитры.

Перейдите на главную страницу Facebook или на вашу страницу профиля и нажмите на опцию «Фото/Видео», расположенную в меню «Создать публикацию». Поместите видео, которое вы хотите загрузить на свою страницу Facebook, вставьте название видео или добавьте комментарий о видео и нажмите на кнопку «Поделиться» как только завершится загрузка видео.

Видео отобразится на странице вашего профиля, а вам нужно будет нажать на кнопку «Сгенерировать», расположенную вверху поста. Если вы не видите кнопку «Сгенерировать», просто нажмите на кнопку «Редактировать публикацию», найдите опцию «Субтитры» и затем выберите «Язык видео».

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

3. Функция автоматических субтитров VEED.IO

Перейдите на домашнюю страницу VEED и нажмите «Загрузить видео» и вы будете перенаправлены на страницу редактирования. (Примечание: бесплатная версия ограничена загрузкой видео размером до 50 МБ, а для того, чтобы избавиться от ограничений, вам придется перейти на версию Pro.) Для редактирования видео с помощью VEED вам не нужна учетная запись, но я все же рекомендую ее создать для того, чтобы вы могли сохранять свои проекты.

Как сделать субтитры для игры

4. Создатель автоматических субтитров Kapwing (Бета)

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

Выберите опцию «Автогенерация», и Kapwing начнет генерировать субтитры. Как уже говорилось, этот инструмент все еще находится в стадии бета-тестирования, и сгенерированные субтитры не являются точными на 100%. На сейчас, чтобы внести соответствующие изменения, вы можете печатать текст в интерфейсе редактора. Помимо автоматического создания субтитров, создатель субтитров Kapwing также позволяет загружать SRT-файлы.

Как сделать субтитры для игры

Интерфейс создателя субтитров Kapwing – автогенерация

5. Amara

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

После того, как вам удалось превратить весь рассказ или диалоги в вашем видео в текст, вам нужно перейти на платформу Amara, позволяющую добавлять файлы субтитров к видео. Видео, для которого вы хотите создать файл субтитров, должно храниться в Интернете, чтобы вы могли на него ссылаться. Если у вас нет веб-сервера, на который вы можете загрузить видеофайл, для хранения вашего файла в Интернете вы можете воспользоваться платформой видеохостинга такой, как Vimeo.

Вставьте URL видео в адресную строку, затем нажмите на кнопку «Начать», и платформа добавит ваше видео в свою систему по созданию субтитров. В левой части редактора субтитров вы увидите следующий вопрос: «Уже есть субтитры к этому видео? Загрузите их напрямую«. Нажмите на опцию «Загрузить их напрямую», чтобы добавить сгенерированный ранее текст, используя платформу для преобразования текста в речь. И как только на экране появится окно «Загрузить субтитры», выберите язык, который используется в видео и в текстовом файле, который вы загружаете.

Нажмите на кнопку «Загрузить», чтобы добавить текстовый файл в видео, а затем нажмите кнопку «Редактировать субтитры», расположенную в левой части редактора. Процесс синхронизации субтитров с вашим видео может быть более или менее сложным в зависимости от того, насколько длинным является видео или сколько в нем диалогов. Важно быть терпеливым и обращать внимание на детали, потому что задержка субтитров в пару секунд может полностью испортить ваше видео.

Часть 2: Как добавить субтитры в видеоклип при помощи Wondershare Filmora

В большинстве случаев вам придется добавлять субтитры в видео вручную, поскольку большинство субтитров, которые были сгенерировать автоматически, на данный момент не отличаются особой точностью. Поэтому мы рекомендуем вам попробовать видеоредактор Wondershare Filmora, поскольку он содержит более 100 предварительно запрограммированных субтитров, текстов, заголовков и шаблонов вступительных и заключительных титров.

Пошаговая инструкция по добавлению субтитров в видеоклип при помощи Wondershare Filmora:

Как сделать субтитры для игры

Вывод

Хотя генерировать субтитры для видео, которыми вы делитесь на YouTube или Facebook довольно просто, технологии распознавания голоса, используемые генераторами субтитров, все еще не совсем надежны. Более того, у таких платформ, как Amara, нет собственных технологий преобразования текста в речь, поэтому их приходится использовать в сочетании с онлайн-платформами, предлагающими такую услугу.

Источник

Любительский перевод игр: анатомия процесса, часть первая

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

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

На картинке изображён логотип российского ромхакинг-сообщества по версии проекта Russian Romhacking.

Перед прочтением

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

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

Честно говоря, я долго думал, как именно структурировать статью и что именно в неё включить — сперва я хотел рассказать не только о технических особенностях процесса, но и расписать суть социальной составляющей. Однако, в какой-то момент я поймал себя на мысли, что из-за обилия критики статья пригодна скорей для несколько другого места, нежели для Хабра — корить большинство непрофессионалов за проявление непрофессионализма и отсутствие стремления к совершенствованию техник несколько цинично.

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

Техническая сторона вопроса

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

Я постараюсь выделить наиболее часто возникающие и важные задачи, рассказав про каждую из них отдельно. В качестве платформы не будем рассматривать ничего конкретного — т.е. всё описанное ниже справедливо как для PC, так и для любой другой платформы — будь то любая из PlayStation, XBOX, да хоть Sega или Dendy (NES).

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

Определение кодировки текста

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

Далеко не всегда выводимый текст хранится именно как текст, чаще это просто набор индексов символов в шрифте, которые необходимо отобразить. Нередко их делают совместимыми или частично совместимыми с какой-либо кодировкой, преимущественно это первые 256 символов юникода. Как бы там ни было, всё равно надо установить точное соответствие между символами и их кодами. Впрочем, в современных играх всё чаще вместо индексов используют обыкновенные кодировки и сериализуют текст в форматы вроде XML — о производительности давно никто особо не задумывается.

Для представления кодировки используются «таблицы кодировки» — текстовые файлы, где в каждой строке некой последовательности байт сопоставлена определённая последовательность символов. Выглядит это примерно так:

Например, текст «Hero obtains Item!» был бы закодирован следующим образом: « 1E 20 20 6F 62 74 61 69 6E 73 20 1E 21 21 ». Однако, если оказывается, что полученная кодировка в достаточной мере совместима с какой-либо пригодной для использования кодировкой (скажем, с юникодом), то таблица в общем-то не нужна и этот шаг можно пропустить.

Самым распространённым способом определить кодировку и найти текст является так называемый «относительный поиск» (relative search). Суть его в том, что ищутся не какие-то абсолютные значения: критерием поиска служит разница между значениями искомой последовательности. Для этого достаточно взять какое-нибудь не слишком короткое слово, встречающееся в игре, и будут найдены все последовательности байт, в которых разница между элементами равна разнице между кодами символов исходного слова.

Например, для слова «WORLD» найдётся как последовательность «57 4F 52 4C 44», так и «77 6F 72 6C 64». Да хоть «13 0B 0E 08 00»! Найдя такие последовательности и убедившись, что это именно закодированное слово, мы может запросто составить таблицу кодировки. Самой известной программой, обладающей таким функционалом, является хекс-редактор Translhexion. Имеется и куча специализированных утилит вроде Search Relative. Да и многие из технически грамотных переводчиков писали для себя подобные утилиты.

Как сделать субтитры для игры

Типичный случай: если сравнить данный скриншот с полотном шрифта, то видно, что найденная последовательность — это индексы символов в шрифте:
Как сделать субтитры для игры

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

Например, в переизданиях многих частей Final Fantasy для GameBoy Advance и Nintendo DS символы в шрифте отсортированы по частоте встречаемости, а для кодирования индексов используется способ, напоминающий UTF-8. Т.е. любой символ с кодом больше 0x7F кодируется двумя байтами, в то время как первые 128 символов кодируются всего одним:

Более суровый случай на моей памяти — это Final Fantasy: 20th Anniversary Edition для PlayStation Portable. Для каждой локации там существовал свой шрифт, свой текст и, как следствие, своя кодировка. Шрифт состоял только из встречаемых в тексте символов, которые так же были упорядочены по частоте встречаемости. Впору бы использовать нейронные сети для распознавания кодировки каждой локации, но благо хватило попиксельного сравнения масок прозрачности символов.

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

Как и другие ресурсы, текст может быть запакован или зашифрован. В таком случае поиск среди данных игры поможет только в случаях, когда в запакованных или зашифрованных данных всё же присутствуют хотя бы обрывки слов (такое часто бывает при использовании алгоритмов вроде LZ77 или RLE). Поэтому выходом может быть поиск в дампе оперативной памяти. Возможность добычи дампа зависит от платформы, для которой делается перевод. Для эмулируемых консолей и PC трудностей быть не должно — есть куча средств для получения доступа к памяти игры. А вот в других случаях нужна возможность во время игры запустить на консоли необходимый код, для чего, как правило, консоль должна быть «взломана». Про методики разбора самих алгоритмов я расскажу в следующей статье.

Поиск указателей

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

Забавно, что для ряда новичков понимание концепции указателей является одним из самых сложных препятствий в освоении искусства любительского перевода. Как правило, такие люди долгое время не утруждают себя технической стороной процесса и переводят текст так, чтобы он вмещался в длину оригинальной строки. Ещё более забавно то, что для совершенствования навыков многие из них в итоге осваивают программирование. Стоило бы это сделать в обратном порядке — и всё было бы гораздо проще. Хотя стоит заметить, что люди, ставшие полноценными IT-специалистами, часто уходят с этой сцены и начинают заниматься вещами посерьёзней.

Очень часто все указатели хранятся в едином месте, которое обычно называют «таблицей указателей» — оно представляет собой массив из указателей или элементов, их содержащих. В таких случаях игра обращается к строкам по индексам, по которым, в свою очередь, из такой таблицы берётся указатель. Тогда достаточно найти указатель на любую строку в блоке текста — и таблица найдена!

Как сделать субтитры для игры

Но не всё так просто… вернее, не всегда всё так просто. Одна из сложностей, мешающих искать указатели, называется «разницей смещений». Дело в том, что указатель может быть не только абсолютным (указывающим на логический или физический адрес ресурса), но и относительным (указывающим на смещение относительно какого-то адреса). Или же, скажем, на старых дисковых консолях вроде PlayStation данные часто хранятся в подготовленном для загрузки в память виде — т.е. пока они лежат в файле, невозможно просто так вычислить, на что будет указывать указатель, не зная адреса, куда будет происходить загрузка.

Пока не известна разница смещений, нельзя однозначно вычислить указатель. Поэтому первым делом обычно проверяют наличие таблицы — для этого может помочь тот же самый относительный поиск. В качестве элементов искомой последовательности берутся расстояния между началами строк — разница между значениями указателей будет точно такой же. Если таблица не находится — поиск повторяют, перебирая возможные размеры указателей и возможные расстояния между ними (если помимо указателей в таблицах содержатся другие данные).

Однако, не всё коту масленица — некоторые игры обращаются к строке прямиком по указателю без использования таблиц. Тогда уже разницу вычисляют как могут: например, путём визуального анализа данных или с помощью дизассемблера. Есть ещё один «дедовский» способ: участки данных «поганят», подменяя байты, и смотрят, отразилось ли это как-нибудь на игре. Таким образом, сокращая диапазон поиска методом исключения, можно локализовать участок кода, отвечающий за вывод какой-либо строки, и найти указатель. Для таких целей даже существуют целые специализированные инструменты вроде Поганка или Visual Poganka.

Без использования таблиц указатели будут раскиданы по всему пространству кода в исполняемом файле, и порой далеко не в единичном экземпляре. Если текст складирован в одном месте, эту проблему можно решить, просканировав его и найдя все указатели на начало каждой строки. И в большинстве случаев это не составляет труда — из-за особенностей адресного пространства вероятность коллизии значения указателя с другим значением минимальна (например, память адресуется в диапазоне 0x08000000-0x09FFFFFF или секция данных начинается с адреса 0x00472000).

Как сделать субтитры для игры

Как сделать субтитры для игры

Но бывает и так, что память адресуется менее удачным для переводчика способом: например, начиная с нулевого адреса. И тогда коллизий уж точно не избежать… Придётся вручную проверять каждое значение, встречающееся более одного раза, на предмет того, является ли оно указателем или же данными с таким же значением. А если ещё и сам текст разбросан по файлу, то автоматизировать процесса поиска указателей можно разве что написав какой-нибудь скрипт или плагин к IDA Pro.

Так или иначе, терпение и труд всё перетрут. Достаточно найти указатели один раз и дальше с этой задачей можно не заморачиваться, переходя к следующему шагу.

Извлечение текста

Как сделать субтитры для игрыСпособ «выемки» текста по таблицам зависит от уровня организации переводчиков. Так, самые неорганизованные ребята (как правило, новички) вообще не заморачиваются и переводят текст прямо в хекс-редакторах. Чуть посерьёзней — используют для извлечения программы-всёделалки вроде PokePerevod или тот же Translhexion. Люди с более глубокими познаниями используют более специализированные средства автоматизации вроде Kruptar. Самые продвинутые специалисты обычно пишут для этого свои скрипты или инструменты, что и вовсе позволяет им контролировать процесс полностью.

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

Как сделать субтитры для игры

Но вовсе не факт, что разработчики изначально хранили текст отдельно и в чистом виде. Очень часто он является лишь частью других данных — карт уровней, сценариев и т.п. Если кто-нибудь знаком с игровыми редакторами вроде TES Construction Set, то он поймёт, о чём речь. В таких случаях, поскольку текст хранится совместно с другими данными, необходимо «распарсить» их структуру и аккуратно извлечь текст и прочую необходимую информацию — например, иногда помимо текста необходимо изменять ещё и такие данные, как координаты его вывода и размеры диалоговых окон. Порой для этого пишутся целые редакторы, которые частично воспроизводят функционал средств, которыми пользовались разработчики.

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

Поэтому существует множество надстроек над этим форматом — я даже разрабатывал своё собственное расширение, которое позволяло описать даже коды разметки и прочие байты с параметрами, а также поддерживало директивы вроде include (удобно, когда есть таблицы для разных языков, но в них есть одинаковые элементы).

Рассмотрим пример таблицы в расширенном формате:

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

Jenica: I’ve served in this castle for quite
some time. I looked after both Princess
Lenna and Princess Sarisa.

[Av-0]: Sarisa?
->
Jenica: Princess Lenna’s older sister.
Sarisa was sailing with her father when
a storm hit, and she was lost at sea.

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

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

Как сделать субтитры для игры

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

Форма такой записи инструкции в таблице кодировки такова:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *