• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Gothic ½ Субтитры к видео | zBinkSubtitles [универсальный плагин]

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
1708292370132.png

 zBinkSubtitles 


Требования: Union или SystemPack
Платформа: Gothic I, Gothic II NoTR
Архитектура: Union Framework
Исходный код: Gitlab
Релизы: Gitlab

Данный плагин позволит выводить текст поверх игровых видео. Для отрисовки текста, вы должны создать .d файл и реализовать следующие определения:
  1. Строковые массивы: Bink_NpcName[] и Bink_Message[]. Каждый элемент массива соответствует текстовой строке. Элемент Bink_NpcName указывается, когда строка должна начинаться с имени персонажа. Вы можете пропустить данный пункт, если строка не должна начинаться с имени, либо является продолжением предыдущей строки.
  2. Опционально может быть добавлена строковая константа BINK_SUBTITLES_FONT_NAME для определения пользовательских шрифтов субтитров.
  3. Для любого видео, предполагающего наличие субтитров, должна быть определена соответствующая функция, имеющая следующую сигнатуру func void G_BinkPrintSubtitles_<VIDEO_NAME>(var int frameTime), где frameTime время целевого кадра в миллисекундах.
  4. В Gothic.ini при первом запуске появится опция для отображения имени ролика, а также времени в миллисекундах: [BINK] BinkDebugInfo.

Example script for the INTRO.bik:
Daedalus:
var string Bink_NpcName[5];
var string Bink_Message[5];

func void G_BinkPrintSubtitles_INTRO(var int frameTime) {
    if( frameTime >= 0 && frameTime <= 5000 ) {
        Bink_NpcName[0] = "Me";
        Bink_Message[0] = "Hello there";
    };
    if( frameTime >= 2500 && frameTime <= 7000 ) {
        Bink_NpcName[1] = "You";
        Bink_Message[1] = "It's me, Marrrio";
    };
    if( frameTime >= 5000 && frameTime <= 9000 ) {
        Bink_NpcName[0] = "Xardas";
        Bink_Message[0] = "Do you want some magic?";
    };
};

1708292173681.png

Установка для Union:
Поместить zBinkSubtitles.vdf в Gothic/Data/Plugins

Установка для SystemPack:
Поместить zBinkSubtitles.dll и UnionAPI в папку Gothic/System и прописать dll в pre.load
 
Последнее редактирование:

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Gratt спасибо за плагин, начал для Одиссеи делать субтитры. Но там чото с временами совсем все криво. Пришлось пока сделать внешнюю функцию поиска подстроки Hlp_Ext_Str_Has(strBase,"5032704") и так определять нужное время.
1708402430020.png


Вроде немного читабельно, но frameTime в минус уходит иногда и недолго держится текст. Может имеет смысл передавать в функцию строку? А там уже сами или преобразуем в int если нормальное видео или поработать со строками можно. Я про
parser->CallFunc( funcIndex, GetFrameTime() );
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
frameTime в минус уходит иногда
Судя по значениям у тебя framerate убит в ролике. Надо будет лимит воткнуть не более 30 или даже 25мс на кадр.


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

ЗЫ у тебя очень широкий текст. Если у кого-то будет масштабирование больше твоего, он уползет за пределы экрана.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Gratt, текст я поправлю еще длинный, как и сам перевод. Я только начал делать :) Что делать с кривыми временами, фиг знает. Думаешь такая проблема только в Одиссее?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Думаешь такая проблема только в Одиссее?
Нет конечно. Я когда масштабирование видео делал, видел в некоторых роликах скорость када что-то типа 10000000. Умножение текущего кадра на скорость дало бы примерно такой же результат, как у тебя в примере. Можно, конечно, вообще отказаться от скорости кадра, но по нему чисто проще ориентироваться и не надо все субтитры переделывать, если пересохраняешь ролик с другой частотой. Скинь мне это видео, я гляну вечером его bink структуру.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Gratt, ага, теперь корректно. Переделаю все тайминги на инт. :) Спасибо. Должно нормально теперь быть.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Xeдин,
Скинь потом сабы скриптом. Посмотрю хоть что за фигню я сделал.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Gratt, ок, как доделаю все в ближайшие дни, скину все три видео и скрипты к ним. Там в одном ролике как раз диалог будет с именами. В двух просто история. Ну и может еще со шрифтами поиграюсь.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Ну вроде пока так получается. Удобство плагина в том, что можно к одному видео сделать спокойно субтитры на нескольких языках, просто будет несколько .d файлов для разных языков. Если прикрутишь как хотел затемнение, то будет вообще красота. :)
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
6.129
Благодарности
5.626
Баллы
910
Круто конечно, но я буду как обычно делать ролики в родном формате готики без привязки к union
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Ради бога. Эту тему на GMC мусолят уже фиг знает сколько времени. Мои трудозатраты вышли в чашку чая с бутером.
 

Сахар

Участник форума
Регистрация
5 Янв 2017
Сообщения
59
Благодарности
45
Баллы
180
Возможно ли сделать расчет времени вывода субтитров просто от начала видео в миллисекундах, потому как иначе указать верный тайминг очень сложно (как я понял имеет значение количество кадров видеоролика)?
 

Сахар

Участник форума
Регистрация
5 Янв 2017
Сообщения
59
Благодарности
45
Баллы
180
Вот пример: фраза "Огонь" во вступительном ролике к 1 игре, когда лучники дают залп по атакующим оркам произносится на 34 секунде. Одна секунда это 1000 миллисекунд, то есть в скрипте должно стоять 34000, но методом проб удается установить субтитры на эту фразу на 22000 (то есть по идее на 22 секунде), и дальше разброс только увеличивается. Возможно я что-то делаю неправильно.
Файл, где я начал разносить тайминги субтитров во вложении.
 

Вложения

  • Ролик.jpg
    Ролик.jpg
    259,5 KB · Просмотры: 31
  • Скрипт.jpg
    Скрипт.jpg
    272,3 KB · Просмотры: 27
  • Intro.d
    5,6 KB · Просмотры: 0

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Значит такое время кадра у ролика. Как ты хочешь все равно не сделать, в зависимости от ПК ролик может играть с разной скоростью и тогда пойдёт рассинхрон. Плюс вероятно первый кадр (который черный в начале) может быть длиннее остальных
 

Сахар

Участник форума
Регистрация
5 Янв 2017
Сообщения
59
Благодарности
45
Баллы
180
Из-за корявых таймингов пришлось подбирать время вручную и группировать текст гораздо более длинными отрезками - то есть на экране могут быть одновременно несколько реплик все время, пока они произносятся. Но зато подходит универсально под любой язык озвучки.
При условии наличия плагина zBinkSubtitles в папке Plugins, для отображения субтитров в видео необходимо добавить файл скрипта Subtitles1.d (для первой части игры) или Subtitles2.d (для второй) в папку Autorun.

 

Вложения

  • Subtitles1.d
    5,6 KB · Просмотры: 6
  • Subtitles2.d
    4,3 KB · Просмотры: 3
Сверху Снизу