1. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.

Субтитры в игру, где их нет

Тема в разделе "Мастерская", создана пользователем Scorpion ZS 256, 19 апр 2017.

  1. QBSP

    QBSP

    Регистрация:
    18 июл 2015
    Сообщения:
    293
    А не проще язык выучить? Ты на реализацию этой затеи можешь потратить гораздо больше времени, чем на изучение языка.
     
  2. Scorpion ZS 256 Никто и звать меня никак

    Scorpion ZS 256

    Регистрация:
    21 апр 2005
    Сообщения:
    2.699
    Предположим я не для себя, а для глухих ребят. У них нет вообще вариантов.
     
  3. kirik-82 DOSтойным играм достойный перевод

    kirik-82

    Переводчик

    Регистрация:
    19 дек 2007
    Сообщения:
    1.983
    @Scorpion ZS 256, предлагаю поэкспериментировать в этом направлении над второй фантасмагорией.
     
  4. Scorpion ZS 256 Никто и звать меня никак

    Scorpion ZS 256

    Регистрация:
    21 апр 2005
    Сообщения:
    2.699
    Ну блин :) Попросил помощи, называется. Рассказать, как это делается. Где это всё? Как я над этим "поработаю", если я не знаю что делать?
     
    Последнее редактирование: 28 апр 2017
    kirik-82 нравится это.
  5. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Принцип прост как дрова:
    • перехватываешь вывод картинки (технически: надо найти место в коде игры, где картинка уже сформирована, готова к выводу на экран, но сам вывод ещё не начинался и её можно править как хочешь не опасаясь нагадить в логику игры) и добавляещь туда вызов своего обработчика картинки;
    • перехватываешь подготовку звука к выводу (т.е. место в коде, где последовательность сэмплов (или, скажем, команд на синтезатор звука) считывается из файла на диске (и её можно идентифицировать по имени файла, или по смещению в файле со звукозаписями, или иным фигом) в буфер в ОЗУ (и этот буфер тоже можно идентифицировать - например, по его адресу) и добавляешь туда вызов своего обработчика чтения звука;
    • перехватываешь вывод звука из буфера на аудиоустройство (т.е. место в коде, где сэмплы из буфера порциями передаются на аудиоустройство) и добавляешь туда вызов своего обработчика вывода звука;
    • пишешь сами обработчики:
      • перехватчик чтения звука выбирает (например, из специально изготовленного тобой файла) соответствующий именно этой звукозаписи набор строк субтитров и времянку для них;
      • перехватчик вывода звука по мере вывода звукозаписи передаёт обработчику картинки субтитры строку за строкой в соответствии с времянкой;
      • перехватчик вывода картинки впечатывает полученную строку в нужное место картинки.
    В случае, если это вывод фильма со звуком силами DirectShow, задача резко упрощается - игра обычно просто вызывает функцию построения цепочки directshow-фильтров для фильма и тут же командует этой цепочке воспроизвести фильм, т.о. достаточно пересобрать фильм, включив в него субтитры, и установить фильтр - выводилку субтитров.
    В WC4 применены оба способа:
    • киновставки я обсубтитривал по второму способу - просто добавляя в них к имеющимся потокам видео и звука поток субтитров;
    • сцены, которые рисуются не как видеоролик, а как последовательность картинок, дообрабатывал по первому способу.
     
    Последнее редактирование: 8 май 2017
    AndyFox и Dimouse нравится это.
  6. Scorpion ZS 256 Никто и звать меня никак

    Scorpion ZS 256

    Регистрация:
    21 апр 2005
    Сообщения:
    2.699
    Поподробнее, как это сделать/понять? Можешь кусок из дизассма показать или типа того, а то я очень смутно представляю, как такое найти и какие команды там выводят собственно картинку из буфера видеокарты (или там не буфер? вообще не в курсе, можешь заодно тыкнуть линком что почитать по этой теме, если есть). Я ж не программист.
     
  7. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Линком не могу - я этому долго учился, сначала под MS-DOS программы ломал, потом под win32 что-то из MSDN'а читал, что-то подсказывали более опытные товарищи...
    Тогда по первому способу никак. :-(
    Попробуем по второму способу. Делись, где игра держит фильмы, которые ты хочешь обсубтитрить, и как их оттуда извлечь. Первые два диска я скачал, но самому с нуля анализировать тупо некогда. :-(
    --- добавлено 8 май 2017, предыдущее сообщение размещено: 8 май 2017 ---
    Скачал все 4 диска, поставил, запускаю - не стартует. :-( Процесс появляется в диспетчере задач, ест 100% процессора, ничего не пишет и не читает. Проверил все три варианта: blade.exe, bladexp.exe, blade2012.exe - все ведут себя одинаково. :-( WinXP SP3, 4 гига ОЗУ, проц Intel G850, два ядра. ЧЯДНТ?

    Upd. Ага, разобрался. Я упустил официальный патч. Скачал, развернул bladecd.exe, запустил - пошло. Правда, с совершенно дикой скоростью под полторы тыщи кадров в секунду, но заработало.
    За 10 минут раскопок нашёл исходники замедлителя. По сути это обёртка над DirectDraw; следовательно, в неё можно внедрить перехват вывода "по первому способу" - во всяком случае, вывод картинки перехватить вполне можно (обычно при выводе через DirectDraw программа DirectDrawSurface::Lock()'ом получает адрес видеобуфера, заполняет его картинкой и вызывает DirectDrawSurface::Unlock(); вот этих двоих и стоит перехватывать - из перехватчика Lock()'а вернуть адрес на свой буфер, чтобы программа писала картинку туда, а перед Unlock()'ом в перехватчике подхимичить её по вкусу (в нашем случае - впечатать субтитровую cтроку) и залить на положенное ей место).
    Осталось аналогичным манером перехватить работу с DirectSound и найти где лежат файлы со звуком и где (в коде) они читаются...

    PS.
    Считай, уже повезло. :-) Кстати, ddwrapper вполне можно использовать ещё и как универсальный носитель инъектированного кода - все игры под win32 так или иначе используют ddraw.dll, так что останется только допилить его под конкретную игру и вуаля. :-)
     
    Последнее редактирование: 9 май 2017
    AndyFox и Dimouse нравится это.
  8. Scorpion ZS 256 Никто и звать меня никак

    Scorpion ZS 256

    Регистрация:
    21 апр 2005
    Сообщения:
    2.699
    Я аудио во время игры хочу осубтитрить, а не видео.

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

    Короче да, мне без манула/на пальцах показать никак не выйдет понять.
     
  9. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Это я уже уловил, из первой же сцены в игре.
    А я знаю? Думаешь, я исходники ddwrapper'а уже прочитал? :-) Так, пролистал по диагонали - оно совсем не такое, как dwrap.dll от GOG'овского WC4 (а я только с dwrap'а начал кое-как что-то понимать в работе DirectDraw). Так что увы - бери Visual Studio, открывай им исходники, компилируй и шагай отладчиком, заглядывая за каждой строчкой в MSDN, другого пути я не вижу. :-(
    Простейший способ - из directdraw'ного surface с картинкой делать device context (методом DirectDrawSurface::GetDC()) и в него DrawText()'ом врисовывать строку. См. напр.: в исходниках моей dxmci.dll в файле xsubs.c эту работу выполняет функция xsubs_print() - особенно смотри обвязку: установка шрифта, цветов текста и фона...
    Ка'хош. "Выполняя работу в первый раз, ты или получишь результат, или обретёшь опыт, но почти всегда только одно из двух" (L) :-(
     
    AndyFox и d0lphin нравится это.
  10. tkzv

    tkzv

    Регистрация:
    9 май 2018
    Сообщения:
    100
    Есть продвижения?
    Если требуются субтитры только для катсцен, играемых из видеофайлов, можно вставить их в сам видеофайл. Тупо, но работает, а если повезёт с форматом, не требует специальных знаний.
    Какие конкретно игры? Хотя бы одно название.
     
  11. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    @tkzv,
    задачка чуть менее, чем нетривиальная. учитывая. что сабы надо куда то выводить и как то синхронизировать.
     
  12. tkzv

    tkzv

    Регистрация:
    9 май 2018
    Сообщения:
    100
    А, это пропустил. Тогда да, найти все функции, выводящие звук (например, по именам файлов в дизассемблере?), идентифицировать каждый играемый фрагмент (если повезёт -- по именам, нет -- по вызовам чего-то вроде seek()?) и выводить для каждого соответствующий текст. Плюс придумать, как текст отрисовывать. А ещё ведь могут шифровать...

    Но если вдруг окажется, что весь звук играется из AVI, как в Вангерах(?), или весь звук синхронизирован с FLIC-ами, как в Alien Legacy, отпадёт необходимость решать эти задачи.
     
  13. Scorpion ZS 256 Никто и звать меня никак

    Scorpion ZS 256

    Регистрация:
    21 апр 2005
    Сообщения:
    2.699
    Не видео. Аудио-файлы. Название ранее для примера писал. Блейд раннер. Что примерно надо - понятно, как сделать - ну тоже примерно понятно (найти функцию вывода звука, заоверрайдить, зафигачить туда счётчик секунд, а также захукать вывод на ддрав чтобы выводить сабы - примерно так добавляли сабы в thief gold). Но я такое никогда не делал, если есть желание и умения - попробуй, я хоть посмотрю как надо.
     
    Последнее редактирование: 17 май 2018
  14. tkzv

    tkzv

    Регистрация:
    9 май 2018
    Сообщения:
    100
    Эта? Blade Runner (1997, Windows)
    Вот тут: scummvm/scummvm — сырой движок для Blade Runner в ScummVM. Форматы исследованы, звуковая дорожка разобрана на части, есть к чему привязываться. Можно связаться с ними и попросить сделать вывод субтитров. Думаю, они будут рады, если ты им сделаешь текст субтитров.

    P.S. На всякий случай, вот их сайт: ScummVM :: Home Blade Runner в релиз ещё не включён, возможно придётся компилировать самостоятельно.

    P.P.S. Или с такими вопросами лучше к ним в IRC?.. #scummvm на irc.freenode.net.
     
    Последнее редактирование: 18 май 2018
  15. Scorpion ZS 256 Никто и звать меня никак

    Scorpion ZS 256

    Регистрация:
    21 апр 2005
    Сообщения:
    2.699
    Мне сабы делать неинтересно, мне интересно разобраться с методом и сделать выводилку.
     
  16. tkzv

    tkzv

    Регистрация:
    9 май 2018
    Сообщения:
    100
    Исходники открыты, формат звука документирован, движок работает, минимум, с интро и первой сценой. Правда, в основную ветку ещё не включили.
     
  17. tkzv

    tkzv

    Регистрация:
    9 май 2018
    Сообщения:
    100
    В версию ScummVM 2.1.0 добавлена поддержка Blade Runner. Субтитры доступны на сайте: ScummVM
     
    kirik-82 нравится это.
  18. Scorpion ZS 256 Никто и звать меня никак

    Scorpion ZS 256

    Регистрация:
    21 апр 2005
    Сообщения:
    2.699
    Я в курсе, если ты мне. Суть темы не в блейдраннере же, так?
     
  19. tkzv

    tkzv

    Регистрация:
    9 май 2018
    Сообщения:
    100
    На случай, если в неё заглянут те, кому был интересен блейдраннер.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление