Запускаем Scenarist BD.
Чтобы открыть существующий проект идём в главное меню File > Project Hystory и в открывшемся окне делаем двойной клик на названии проекта.
В DataTree создаём паку IG, далее ПКМ на папке и выбираем Import > Scenarist Designer File, в появившемсмя окне указываем файл Buttons\Main Menu\HDMV\Main Menu.scenarist.designer, Scenarist покажет окно с указанием разрешения и выбором частоты кадров, выбираем нужную, повторяем тоже для поп-ап меню и в папке IG появятся папки Main Menu_Graphics и Pop-Up_Graphics и очень важные для нас значки Main Menu и Pop Up.
Любопытно что создавать навигацию кнопок можно и до того как графика будет вложена в плейлист, это делается в окне DataTree.
Чтобы вложить IG в плейлист у нас есть три варианта:
- создаём клип IG, в окне DataTree ПКМ на значке меню Generate > Clip или перетянув значок из окна DataTree на папку Clip и перетаскиваем клип в плейлист;
- перетаскиваем значёк меню из Data Tree прямо в плейлист;
- ПКМ на плейлисте New > Sub Path > Interactive Graphics Menu и далее перетаскиваем туда или значёк из DataTree или IG-клип.
Открываем древовидный список Main Menu > Epoch#1 > Main Menu и увидим палитры а ниже знакомые нам названия страниц.
После добавления в сценарий, доступ появится и в окне ScenarioTree, но глубже TopMenu > MO#1 > NavigationCommand > Menu > SubPlayItem#1 > Main Menu > Epoch#1 > Main Menu (палитр, как видите, здесь не видно).
Далее открываем страницу, затем BOG и саму кнопку до появления значка NovigationCommand.
Если сделать двойной клик на значке кнопки, откроется окно Edit Button Info где можно просмотреть, удалить или добавить графику состояния кнопок. А так же сделать кнопку автоактивной.
А если у вас вариант с циклической анимацией кнопки, нужно напротив этой анимации поставить чекбокс Repeat, чтобы зациклить её.
Теперь перед тем как начнём назначать команды навигации, расскажу обо всех командах какие есть:
Nop - отсутствие команды.
GoTo - переход на указанный лейбл.
Break - прерывает выполнение команд в текущей последовательности.
JumpObject - останавливает выполнение текущего МovieОbject и переходит к выполнению указанного МovieОbject.
Продолжение выполнения предыдущего МovieОbject с помощью команды Resume после выполнения команды JumpObject невозможно.
JumpTitle - останавливает выполнение текущего Title и переходит к выполнению указанного Title.
Продолжение выполнения предыдущего Title с помощью команды Resume после выполнения команды JumpTitle невозможно.
CallObject - приостанавливает выполнение текущего МovieОbject и переходит к выполнению указанного МovieОbject.
После выполнения команды CallObject возможно продолжение выполнения предыдущего МovieОbject с помощью команды Resume.
CallTitle - приостанавливает выполнение текущего Title и переходит к выполнению указанного Title.
После выполнения команды CallTitle возможно продолжение выполнения предыдущего Title с помощью команды Resume.
(Resume Возобновляет выполнение ранее приостановленного MovieObject с точки прерывания.)
PlayPL - выполнение указанного плейлиста. Доступна только как команда в МovieОbject.
PlayPLatPl - выполнение указанного PlayItem. Доступна только как команда в МovieОbject.
PlayPLatMk - выполнение указанного плейлиста, начиная с указанного маркера главы (PlayListMark). Доступна только как команда в МovieОbject.
TerminatePL - прекращает выполнение текущего плейлиста. Доступна только как кнопочная команда.
LinkPI - переход на указанный PlayItem. Доступна только как кнопочная команда. Возможна ссылка только на PlayItem текущего плейлиста.
LinkMK - переход на указанный PlayListMark (маркер главы). Доступна только как кнопочная команда. Возможны ссылки только на маркеры текущего плейлиста.
StillOn - приостанавливает воспроизведение плейлиста. Доступна только как кнопочная команда.
StillOff - возобновляет воспроизведение плейлиста. Доступна только как кнопочная команда
(Замечу: последние две команды к презентационной графике не имеют отношения)
Set - группа команд, работающих с операндами типа “Source” и “Destination” с записью результата в Destination.
Move (Source) -> Destination - Сохраняет значение (GPR, PSR, или immediate) в GPR.
Swap (Source) <-> Destination - Обмен значениями между двумя GPR.
Add (Source) + (Destination) -> Destination - Операция сложения.
Sub (Destination) – (Source) -> Destination - Операция вычитания.
Mul (Source) * (Destination) -> Destination - Операция умножения.
Div (Destination) / (Source) -> Destination - Операция деления.
Mod (Destination) % (Source) -> Destination - Модуль. Запись в Destination остатка от деления Destination на Source. Пример: 10 % 3 -> 1 (10 = 3 x 3 + 1)
Rnd Random(Source) -> (Destination) - Генерирует случайное число от 1 до Source.
And (Source) & (Destination) -> Destination - Побитовое логическое И (логическое умножение). Если в обоих битах 1, результат равен 1. Если хотя бы в одном бите 0, результат равен 0.
Or (Source) | (Destination) -> Destination - Побитовое логическое ИЛИ (логическое сложение). Если в обоих битах 0, результат равен 0. Если хотя бы в одном бите 1, результат равен 1.
Xor (Source) ^ (Destination) -> Destination - Побитовое логическое Исключение ИЛИ. Если оба бита совпадают, результат равен 0. Если не совпадают, результат равен 1.
Bit Set 1 -> <№ бита = Source> в Destination - Запись единицы в указанный в Source бит Destination.
Bit Clear 0 -> <№ бита = Source> в Destination - Сброс указанного в Source бита Destination в 0
Shift Left (Destination) сдвиг на <кол-во = Source> -> Destination - Сдвигает влево Destination на указанное в Source количество бит.
Shift Right (Destination) сдвиг на <кол-во = Source> -> Destination - Сдвигает вправо Destination на указанное в Source количество бит.
SetSystem - Группа команд для управления номерами потоков, таймером и параметрами кнопок.
SetStream - Установка номеров текущих Primary audio, PG TextST, Angle, и IG потоков.
SetNVTimer - Устанавливает значение (0...300 секунд) и запускает таймер. Когда обратный отсчет достигает нуля, выполняется Jump на указанный MovieObject.
SetButtonPage - Переход на указанную кнопку и/или страницу меню.
EnableButton - Включает (делает доступной) указанную кнопку в ее нормальном состоянии (Normal State). Используется для активации одной из кнопок в Button Overlap Group (BOG).
Команды, расположенные ниже EnableButton продолжают выполняться.
DisableButton - Выключает (делает недоступной) указанную кнопку. Даже если указанная кнопка является текущей, последовательность команд ниже DisableButton продолжает выполняться.
Если не последовало команды перехода к конкретной кнопке, выбирается DefaultSelected Button из параметров страницы меню.
SetSecondaryStream - Установка текущих Secondary video, Secondary audio, и PiP PG TextST.
PopupMenuOff - Выключение поп-ап меню.
Очень важную роль в навигации играют так называемые регистры. Физически это ячейки в памяти плеера, но нас больше интересует цифровая суть регистров.
Их существует два вида:
PSR (Player Status Register) - регистры состояния плеера или системные регистры, имеют строго фиксированное назначение и сохраняют разного рода постоянные и текущие настройки плеера. Их значения определяют состояние плеера в данный момент и постоянные настройки.
Всего их 128 и вот основная часть.
Регистры текущего состояния:
Interactive Graphics [ID:0] - номер интерактивной графики
Primary Audio [ID:1] - номер текущего аудиопотока
PG TextST stream and PiP PG TextST [ID:2] - номер текущего потока субтитров
Angle [ID:3] - номер "угла зрения"
Title [ID:4] - номер заголовка
Chapter [ID:5] - номер маркера главы
PlayList [ID:6] - ID плейлиста
PlayItem [ID:7] - ID плейайтем (пункта воспроизведения)
Presentation Time [ID:8] - текущее время воспроизведения в сэмплах 45 килогерц
Timer [ID:9] - таймер отсчёта
Selected Button [ID:10] - ID выбранной кнопки
Menu Page [ID:11] - ID страницы меню
Selected Style [ID:12] - выбранный стиль воспроизведения текстовых субтитров
Secondary Audio and Secondary Video [ID:14] - номер вторичного потока видео и аудио
Регистры постоянных настроек:
Parental [ID:13] - родительская защита
Audio Capability [ID:15] - возможности использования аудио
Audio Language [ID:16] - язык аудиопотока по умолчанию
Presentation Graphics and Text subtitle Language [ID:17] - язык субтитров по умолчанию
Menu Language [ID:18] - язык меню по умолчанию
Country [ID:19] - код страны
Region [ID:20] - код региона
Output Mode Preference [ID:21] - настройки вывода
Stereoscopic Status [ID:22] - вкл\выкл функции 3D (для 3D совместимых плееров)
Display Capability [ID:23] - возможность отображения (для 3D совместимых плееров)
3D Capability [ID:24] - возможность 3D (для 3D совместимых плееров)
Video Capability [ID:29] - возможность использования аудио
Text Capability [ID:30] - возможность использования текстовых субтитров
Player Profile / Player version [ID:31] - совместимый профиль / версия прошивки плеера
Регистры бэкапа
[ID:36] - бэкап регистра Title [ID:4] (используется при ресуминге)
[ID:37] - бэкап регистра Chapter [ID:5] (используется при ресуминге)
[ID:38] - бэкап регистра PlayList [ID:6] (используется при ресуминге)
[ID:39] - бэкап регистра PlayItem [ID:7] (используется при ресуминге)
[ID:40] - бэкап регистра Presentation Time [ID:8] (используется при ресуминге)
[ID:42] - бэкап регистра Selected Button [ID:10] (используется при ресуминге)
[ID:43] - бэкап регистра Menu Page [ID:11] (используется при ресуминге)
[ID:44] - бэкап регистра Selected Style [ID:12]
[ID:45] - бэкап регистра Stereoscopic Status [ID:22]
[ID:48] - [ID:61] - характеристики использования текстовых субтитров
[ID:96] - [ID:111] - служебные функции (команды "воспроизведение", "стоп", "пауза" и т. д.)
[ID:25] - [ID:28], [ID:32] - [ID:35], [ID:41], [ID:46], [ID:47], [ID:62] - [ID:95], [ID:112] - [ID:127] - резервные
GPR (General Purpose Register) - пользовательские регистры. Они не имеют фиксированных назначений, их функция определяется пользователем в контексте проекта. Названия задаются пользователем для облегчения авторинга и не несут функционального значения. То есть если регистр назвать Audio он не будет переключать потоки в зависимости от своего значения.
Чтобы назвать регистр нужно в NaviCommand Editor нажать кнопку Register. В открывшемся окне выбираем любой из свободных ID и вместо «NoName» в графе Name вводим своё название. Нажимаем ОК.
Всего их 4095 (!) и последние 5 зарезервированы системой для случаев использования инструментов полуавтоматической навигации:
SK_PlayList [ID:4091] - для плейлистов
IsChapJump [ID:4092] - для режима случайного доступа (всего два значения TRUE - истина (1) и FALSE - ложь (0))
ChapMO [ID:4093] - для навигации по фильм-объектам
ChapPL [ID:4094] - для навигации по плейлистам
ChapPLMark [ID:4095] - для навигации по маркерам глав
Нас может заинтересовать только последний.
Значения регистров задаются с помощью команд группы Set. В окне NaviCommand Editor в графе Cmd выбираем Set, ниже в арее SetCmd в графе SubCmd выбираем команду (Move, Add ...), далее идут графы с одинаковыми названиями:
Cлева Destination, целевые регистры; в графе data type выбираем метод выбора - по ID (GPR Immediate) или по названию (GPR Entried).
ниже, в графе value, выбираем или название или ID самого регистра.
Cправа Source, источники: аналогично левой части но здесь есть возможность выбрать числовой ввод (10-ный или 16-ричный в зависимости от Destination), пользовательские и системные регистры (по названию или по ID).
При выполнении операции логического сравнения всё выглядит немного иначе:
В верхней части подраздела Compare находится операнд 1, что сравнивают (PSR и GPR по названию или ID),
Ниже оператор сравнения
& - логическое И
== - равно
!= - не равно
>= - больше или равно
> - больше
<= - меньше или равно
< - меньше
В нижней части операнд 2, с чем сравнивают (числовое значение или же PSR и GPR по названию или ID)
Ниже подраздела располагается непосредственно окно назначения целевой команды, выполнение которой и обуславливает операция сравнения.
В интерактивной графике немаловажное место занимают виртуальные кнопки или DUMMY (призрак, пугало). От обычных кнопок они отличаются отсутствием графической составляющей и, как следствие невидимы при просмотре диска. Они применяются для выполнения различных вспомогательных команд и по этому в 99% случаев имеют флаг Auto Action. Оставшийся 1% это кнопки доступа к скрытым бонусам.
О создании и применении виртуальных кнопок вы узнаете по ходу повествования.
Не буду снова перечислять необходимые действия для назначения команд, они описаны в предварительной сборке. Укажу только основные графы и команду в целом.
Напомню что для назначения навигационных команд следует открыть кнопку и сделать двойной клик на вложенном в неё значке NaviagtionCommand для открытия окна NaviCommand Editor.
При переходе к следующей кнопке достаточно одного клика на значке кнопки или значке её навигационных команд.
И вот навигация глав в Main Menu. Простым назначением LinkMK здесь не отделаться - маркер не является самостоятельной единицей как программа в DVD - и переход возможен только в пределах того плейлиста в котором находится кнопка.
Для выполнения этой задачи у нас есть два пути. Первый это простой инструмент ChapterJump. Двойным кликом по значку Scenario откроем Scenario Editor
(из-за своей величины это не самое удобное средство, но при желании, его можно вывести отдельным окном во весь экран), перемещаем блоки маркеров глав поближе к блокам кнопок главного меню,
нажимаем кнопку Connect и выбираем инструмент ChapterJump,
нажимаем на значке cmd в блоке кнопки, тянем в блок маркера и там отпускаем,
Смотрим навигационные команды Title#1 - там уже сформирован необходимый лист команд
повторяем операцию для остальных маркеров.
Можно пойти немного другим путём. Выполнив связь первого маркера идём в DataTree или ScenarioTree, открываем Main Menu далее страницу Chapters 1-4, далее кнопку 1 и редактируем её команды.
Здесь появился целый набор.
Выделяем весь лист команд и копируем - ПКМ на выделении > Copy. Теперь вставляем этот набор в лист команд остальных кнопок эпизодов, теперь обращаем внимание на команду 4 Move (GPR)ChapPLMark[ID:4095] 0,
именно она отвечает за то на какой маркер мы попадаем, для первого маркера значение 0, для второго 1, для третьего 2 и т.д. Изменяем значения четвертой команды для всех кнопок глав.
И т.д.
Затем расставляем команды для кнопок Next, Previous и Menu. Разумеется для кнопки Menu везде одна команда перемещающая нас на страницу Main. Кнопка Prev для страницы Chapters 1-4 адресована на страницу Chapters 9-12,
а Next на страницу Chapters 5-8; для страницы Chapters 5-8: Prev > Chapters 1-4, Next > Chapters 9-12; для страницы Chapters 9-12: Prev > Chapters 5-8, Next > Chapters 1-4. То есть по кругу. Я установил линки на одноимённые кнопки, вы можете назначить на кнопки глав.
Как и всякий полуавтоматический метод это средство приводит к загромождению проекта, а поскольку наш проект есть оплот религии дзен, мы используем другой метод.
Можно воспользоваться резервным регистром ChapPLMark[ID:4095] или использовать любой свободный, с точно такими же значениями, но теперь список команд для кнопки 1 будет значительно проще:
1 Move (GPR)ChapPLMark[ID:4095] 0
2 JumpTitle Title#1[ID:1]
для кнопки 2:
1 Move (GPR)ChapPLMark[ID:4095] 1
2 JumpTitle Title#1[ID:1]
и далее для других кнопок
В MO заголовка с фильмом теперь будут такие команды:
1 if((GPR)ChapPL[ID:4095] !=0) Goto Chapter PLay[Label]
2 PlayPL Фильм[ID:0]
3 JumpTitle TopMenu[ID:0]
Chapter Play
4 PlayPlatMK Фильм[ID:0] (GPR)ChapPLMark[ID:4095]
5 Move (GPR)ChapPLMark[ID:4095] 0
6 JumpTitle TopMenu[ID:0]
Т. е. если GPR ChapPL [ID:4095] имеет значение отличное от ноля выполняется переход на лейбл Chapter Play иначе говоря пропускаются команды 2 и 3 и выполняется команда 4 - воспроизведение маркера плейлиста "Фильм", номер маркера определяется значением регистра ChapPL[ID:4095]. по окончании плейлиста ChapPL сбрасывается на ноль (здесь не обязательно) и далее выход в главное меню. Если GPR ChapPL [ID:4095] равен нолю то команды 2 и 3 выполняются: воспроизводится плейлист Фильм и по окончании выход в главное меню.
Теперь нужно будет подправить команды в кнопке Play на главной странице дабы нам не мешало логическое сравнение при повторном вызове фильма:
1 Move (GPR)ChapPLMark[ID:4095] 0
2 JumpTitle Title#1[ID:1]
(При желании можно скомбинировать оба приёма т. е. воспользоваться инструментом Chapter Jump а потом доработать, сократив количество команд.)
Хотя если подумать то при таком раскладе первые три команды в МО фильма попросту ненужны и в конечном итоге сокращаем до необходимого минимума:
1 PlayPlatMK Фильм[ID:0] (GPR)ChapPLMark[ID:4095]
2 Move (GPR)ChapPLMark[ID:4095] 0
3 JumpTitle TopMenu[ID:0][ID:1]
Теперь просто выполняется воспроизведение маркера плейлиста "Фильм" согласно значения регистра ChapPL[ID:4095]. потом ChapPL сбрасывается на ноль и мы выходим в главное меню.
Я думаю при том же функционале будет значительно компактнее.
Для страницы Bonuses
Назначаем кнопке Bonus 1 команду CallTitle#2[ID:2];
кнопке Bonus 2 ― CallTitle#3[ID:3];
Bonus 3 ― CallTitle#4[ID:4].
Для кнопки меню SetButtonPage Button:Bonuses[ID:3] Page:Main[ID:1], т.е. возврат на главную страницу.
В фильм-объекты бонусов после команд воспроизведения плейлистов добавим команду Resume, что бы по окончании воспроизведение возвращалось в меню или фильм в зависимости от того откуда были вызваны бонусы. Теперь команды в МО имеют законченный вид:
Теперь сделаем небольшой трюк: после просмотра бонуса плеер снова вернётся в меню, причём на станицу бонусов выделяя кнопку только-что просмотренного бонуса.
Для начала перейдём в окно NaviCommand Editor, нажмём кнопку Register и назовём какой-нибудь регистр Bonus Number. После этого добавим в фильм-объекты бонусов команды:
для первого бонуса (Title#2) - Move (GPR)Bonus Number[ID:0] 1
для второго (Title#3) - Move (GPR)Bonus Number[ID:0] 2
для третьего (Title#4) - Move (GPR)Bonus Number[ID:0] 3
Эти команды должны стоять первыми в списке команд, т. е. сначала регистру задаётся значение, а потом уже проигрывается плейлист (это нужно что бы наш трюк работал и при вызове меню из поп-ап или пульта ДУ).
Вернёмся на страницу Intro. Создадим в ней виртуальную кнопку ― ПКМ на значке страницы > New > Virtual Assets > в открывшемся окне жмём ОК для создания ButtonOverlapGroup, далее ПКМ на BOG > New > Virtual Assets > жмём ОК для создания кнопки.
Назовём BOG и кнопку Bonuses и сделаем её автоактивной ― двойной клик на кнопке и в открывшемся окне ставим чекбокс Auto Action
присвоим ей команды:
таким образом если GPR Bonus Number не равен нолю воспроизведение переходит на кнопку соответствующего бонуса, если равно нолю переходит на кнопку Intro. Далее нужно чтобы кнопка Bonuses выбиралась на странице по умолчанию, для этого мы, либо перетаскиваем её BOG выше BOG Intro, либо в Property страницы в графах Default Selected Button и Default Activated Button указываем нашу кнопку.
Чтобы при повторном вызове меню наш трюк не мешался под ногами, поставим команду Move (GPR)Bonus Number[ID:0] 0 в кнопку Меню на странице Bonuses, эта команда должна быть первой в списке.
Навигация на странице Settings. Здесь будет сложная навигация.
Для начала создадим виртуальную кнопку Settings Select и назначим её дефолтной:
в Property страницы Settings как было указано выше;
назначим команду перехода на неё в кнопке Main To Settings одноимённой страницы
Самая простая команда это конечно возврат на главную страницу присваиваемый кнопке Меню - SetButtonPage Button:Settiings[ID:2] Page:Main[ID:1]
С назначением субтитров дела обстоят так: как вы помните мы создавали дополнительные кнопки для выделения задействованных дорожек нам нужно включать и их
кнопка Subs
кнопка Off Subs
т. е. кнопка Subs включает кнопку Subs ON (с дополнительным выделением), включает кнопку Off Subs (без дополнительного выделения) и включает поток субтитров;
кнопка Off Subs включает кнопку Off Subs ON (с дополнительным выделением), включает кнопку Subs (без дополнительного выделения) и выключает поток субтитров.
С переключением звуковых потоков есть один подвох, если вы просто назначите команду SetStream Audio:No=1 (или 2) не назначая никаких субтитров, то увидите что в итоге в хвосте добавится команда PG_textST: [DispOff] и она действительно будет выключать субтитры без вашего на то согласия. Весь блок SetStream завязан на субтитрах, любая команда будет сопровождаться снятием или установлением флага демонстрации субтитров.
Что бы разрулить ситуацию придётся заняться вычислениями, а для этого немного заняться теорией.
BD поддерживает 32 потока аудио, 32 потока графических субтитров и 256 потоков текстовых субтитров к тому же эти же потоки могут использоваться и в режиме картинка-в-картинке (PiP). Под всё это выделен большой регистровый блок. Значения системных регистров аудио в этом блоке простые 1,2,3 и т. д., а вот с субтитрами заминка. Дело в том что этот блок в целом и отдельные его части не могут иметь суммарное нулевое значение. С аудио всё просто - всегда будет воспроизводиться хотя бы один поток. Но субтитры могут быть и выключены, их вообще может не быть.
По этому под субтитры выделен громоздкий системный регистр PG TextST stream and PiP PG TextST stream PSR[ID:2] состоящий из нескольких ячеек.
Почти все эти ячейки заполняются независимо, но считывается значение всего регистра в целом. Таким образом мы имеем три пограничных значения:
Первое. Максимальное значение. Отсутствие субтитров - 01111111111111111111111111111111
Второе. Минимальное значение когда поток демонстрируется - 1000000000000000000000000000000
Третье. Минимальное значение. Поток не демонстрируется - 0000000000000000000000000000001
Понятно что второе значения чисто теоретическое, по этому оно и является основной интересующей нас границей - если его сравнить с третьим значением, то станет понятно что любое значение меньше второго означает что субтитры, сколько бы их ни было, не демонстрируются.
Далее можно понять какие реальные значения принимает регистр при наличии одного потока субтитров:
10001111111111110000000000000001 - поток демонстрируется
00001111111111110000000000000001 - поток выключен
Двенадцать единиц в центре означают что поток не ассоциирован с PiP субтитрами от чего там выставлено максимально возможное значение.
Воспользовавшись калькулятором Windows, вычисляем десятичные значения:
2147483647 - отсутствие субтитров
2147483648 - пограничное теоретическое значение (в проекте рекомендуется пользоваться реальным значением 2147483647);
2415853569 - первый поток демонстрируется;
2415853570 - второй поток демонстрируется;
2415853571 - третий поток демонстрируется и. д.;
268369921 - субтитры выключены;
Не стоит обращать внимание на численные значения десятичных вариантов, они не имеют прямого отношения к номерам потоков, а используются для облегчения работы. И пусть вас не смущает что для проверки субтитров мы используем число означающее их полное отсутствие, просто это ближайшее реальное число.
Вооружившись этими знаниями мы, при назначении команд кнопкам Audio 1 и Audio 2, будем проверять: если субтитры демонстрируются - ставим флаг демонстрации; если выключены - снимаем флаг. Проверяется значение непосредственно регистра PSR[ID:2].
Audio 1
Audio 2
Можно использовать сравнение с пограничным значением, особенно если у вас будет более одного потока субтитров
3 if((PSR)PG TextST stream and PiP PG TextST [ID:2] > 2147483647 SetStream Audio:No=1 PG TextST: [DispON]
4 if((PSR)PG TextST stream and PiP PG TextST [ID:2] < 2147483647 SetStream Audio:No=1 PG TextST: [DispOFF]
Эти команды можно, при желании, скопировать в кнопки Audio 1 ON и Audio 2 ON, но это ни на что не повлияет.
Вернёмся в кнопку Settings Select в ней нам нужно назначить дополнительное выделение кнопок в соответствии с активными потоками:
В варианте с вращением (Menu Roll) мы как помнится не делали кнопок с дополнительным выделением и сделаем их сейчас. Продублируем кнопки внутри каждой BOG > двойной клик на кнопке, в открывшемся окне скопируем изображение A1 или S1 и вставим его в окно состояния Normal.
И далее как описывалось выше.
Навигация в Pop-Up Menu.
В DataTree выделяем Pop-Up > Epoch#1 > Pop-Up. В окне Property в графе User InterfaceModel устанавливаем Pop Up иначе меню будет висеть на экране всё время фильма. Можно также поставить время закрывания поп-ап меню -
в графе User TimeoutDuration поставить время отсчитываемое от последнего действия в меню, по истечению которого меню автоматически закроется.
Альтернативой этому является нажатие клавиши Pop-Up напульте ДУ, она как открывает так и закрывает меню.
Как вариант - внедрение в Pop-Up Menu кнопки с командой PopupMenuOff.
Она может быть как реальной графической кнопкой так и виртуальной автоактивной выполняемой при переходе вниз с самой нижней кнопки меню.
Основная часть кнопок имеет те же команды, что и в главном меню, их можно скопировать и вставить в аналогичные кнопки. Копируем и вставляем виртуальные кнопки созданные для подсветки бонусов и дорожек.
А с навигацией глав теперь всё просто, назначаем команды LinkMK, для первого маркера LinkMK 0, для второго LinkMK 1 и т.д.
В поп-ап меню мы добавим ещё два трюка.
Автозакрытие поп-ап меню.
При вызове эпизода со страницы выбора глав поп-ап меню будет демонстрироваться пока не сработает User TimeoutDuration или не будет нажата клавиша на пульте ДУ. Мы сделаем что бы оно закрывалось автоматически. Продублируем кнопки эпизодов внутри каждой BOG и сделаем дубликаты автоактивными . В верхние кнопки добавим команду EnableButton включающую нижнюю кнопку,
а во всех дубликатах удалим команды и назначим PopupMenuOff.
При нажатии на кнопку будет выполнен вызов эпизода фильма и включение автоактивной кнопки выполняющей команды закрытия меню.
Подсветка текущего эпизода.
При нажатии кнопки "Эпизоды" будет выбрана страница и кнопка соответствующая текущему эпизоду. Основной смысл заключается в в том что бы узнать значение системного регистра PSR[ID:5] Chapter и задать это значение в команде SetButtonPage.
Для начала добавим в каждую страницу виртуальную автоактивную кнопку Chapter Select.
Делаем двойной клик на кнопке Main to Chapters в одноимённой странице, чтобы открыть её в NaviCommand Editor`e и присваиваем ей команды
(Отмечу что проверка должна происходить именно в обратном порядке, если расположить их в прямом порядке то в при значении регистра, допустим, 10 сработает первое условие и мы попадём на вторую страницу, где нет 10-го эпизода.)
Жмём кнопку Register и называем Chapter Number имеющийся свободный регистр, наша задача присвоить ему значения системного регистра PSR[ID:5] и далее назначить этот регистр в качестве ID кнопки эпизодов (на прямую здесь не получится). И вот тут мы сталкиваемся с двумя проблемами: во-первых ID начинаются с нуля, а значения PSR[ID:5] с единицы, во-вторых из-за кнопок автозакрытия кнопки эпизодов идут не по порядку а через одну.
Значит снова придётся заняться вычислениями и приводить значения GPR Chapter Number к требуемым.
Для страницы Chapters 1-4
Для страницы Chapters 5-8
Для страницы Chapters 9-12
Но оставаясь верным идеалам дзен предлагаю поступить проще.
Во первых математически сократить вычисления:
Но такой метод не всегда нормально работает и его применение оставляю на ваше усмотрение.
По этому проще, без лишних вычислений, назначить команды SetButtonPage исходя из логического сравнения, т. е.
Для страницы Chapters 1-4
Для страницы Chapters 5-8
Для страницы Chapters 9-12
Обратные переходы
Можно сделать небольшой финт с переходами по страницам, у нас есть переходы с главной страницы на остальные а можно не выходя из Сценариста создать обратные переходы.
Продублируем страницы перехода Main to Settings, изменим её название и название кнопки в ней на Settings to Main, а затем, сделав двойной клик на кнопке, перетащим изображения активного состояния с права на лево чтобы они расположились в обратном порядке. Далее на странице Settings скопируем команду кнопки Меню и вставим в кнопку Settings to Main, а самой кнопке Меню зададим команду
SetButtonPage Button: Settings to Main[ID:2] Page: Settings to Main[ID:1].
Т. е. теперь при нажатии кнопки Меню будет выполнен переход на страницу Settings to Main, где воспроизведётся анимация замещения графики настроек на графику главной страницы а за тем будет переход на кнопку Settings на главной странице.
Чтобы удостоверится что анимация работает нормально можно просмотреть её в Scenarist`e
В окне IG Editor выберите Activated в Visible Button State и щёлкните на нужной кнопке и станут доступны кнопки просмотра анимации:
Теперь поступим так же с остальными страницами переходов. Только переход из Эпизодов на главную страницу у нас один, а страниц с главами 3, по этому при переходе со страниц Сhapters 5-8 или Сhapters 9-12 будут меняться картинки эпизодов, избежать этого можно будет или путём создания страниц в фотошопе заранее, или путём замены картинок абстрактными рамками (тоже заранее), или же кнопки Меню этих страниц будут возвращать на страницу Chapters 1-4, а от туда уже на обратный переход (что, как бы, не комильфо).
Озвучка кнопок.
Для рассматриваемых проектов я вырезал звуки арфы из начала "Художественной сюиты в 13 частях" Андреаса Фолленвайдера, продолжительность звуков 800 миллисекунд, для выделения нормально, но для активного состояния это многовато, обычно делают 500 мс и меньше.
Чтобы добавить звуки создаём виртуальный звуковой блок. ПКМ на папке Data или в окне Data Editor выбираем New > VirtualAsset, в окне Create Virtual Asset ставим SoundBDMV и жмём ОК.
Теперь перетаскиваем файлы звуков в DataTree или в Data Editor, всплывает знакомое окно Select Coding Type, конечно выбираем Button Sound.
Далее делаем двойной клик на значке SoundBDMV в появившемся окне SoundBDMV Setting жмём Add, в окне Button-Sound List выделяем наши файлы жмём ОК в обоих окнах.
Теперь наши звуки находятся в звуковом блоке и в готовом диске это файл AUXDATA\sound.bdmv.
Назначаем звуки кнопкам. Нажимаем ПКМ на значке меню и выбираем Button Properties Setting. Откроется окно Setting Button Properties, справа стаим чекбоксы Selected и Activated и выбираем наши звуковые файлы, слева ставим чекбоксы на кнопках к которым хотим добавить звуки.
Я назначил звуки выбора всем кнопкам, кроме кнопок Intro и страниц переходов поскольку у них только активное состояние (в поп-ап есть ещё несколько слайсов которым тоже не нужны звуки). Звук активации добавил только в меню Main Menu в кнопку Play и в меню Pop-Up Menu в кнопки Menu.
Связано это с тем что у нас не анимированы активные состояния и для воспроизведеия звуков хватает времени только при переходе на видеозаголовки.
Следующий шаг - нужно согласовать звуковые дорожки с озвучкой кнопок. Выделяем плейлист Флильма и в окне Propertiy в графе Audio Mux App Flag ставим Applied Secondary Audio/Interactive Sound (если этого не сделать сценарист выдаст ошибку с требованием установить нужное значение). Повторяем то же для плейлиста Menu. (Если при готовом звуковом блоке не назначать звуков кнопкам и при этом смуксить диск воспроизводиться он не будет.)
Со звуками всё.
Отладка кнопок и страниц.
Здесь мы рассмотрим немаловажные вопросы авторинга. Я намаренно вывел их в отдельные абзацы. Вопросы эти кажутся второстепенными, но без всего нижеизложенного диск работать нормально не будет. И часто начинающие, да и "матёрые" пользователи забывают об этих вещах.
Состав клипа меню.
В том виде как описано выше в главном меню нельзя будет переключить ни аудио, ни субтитры, это будет работать только в поп-ап меню. В клипе меню должен быть тот же состав дорожек что и в фильме, иначе плееру будет нечего переключать.
Продублируем звуковую дорожку меню (если меню без звука добавим две немые дорожки), дублирование делается копипастом в окне DataTree, а потом дубль добавляется в клип. И сделаем фиктивные сабы, для этого в фотошопе создаём прозрачный Full HD документ и в самом уголке заполняем цветом пару пикселей, переводим в режим Index Color, сохраняем как файл PNG (назовём, например, Fake Sub) и перетаскиваем в Data Editor Scenarist`a
В окне DataTree ПКМ на папке Data > New > Grafic Asset > PG > выбираем частоту кадров и разрешение > далее при запросе состава субтитров просто жмёте ОК.
У нас появляется новый объект субтитров, открываем его, делаем двойной клик на значке DisplaySet#1 - открывается PG Editor - перетаскиваем в него из DataTree файл Fake Sub и выбираем CompositionObject#1.
Всё, можно помещать субтитры в клип.
Чтобы при запуске диска автоматически устанавливались плеерные настройки звука и субтитров в клипе FirstPlay так же должен быть аналогичный фильму состав дорожек.
Ресуминг или резюме.
Это функция позволяет возобновить воспроизведение диска из точки, где вы остановились в прошлый раз. В BD её возложили по большей части на плееры, но программно она тоже осуществляется.
Во-первых, как в наших бонусах, кнопочная команда CallTitle и после плейлиста команда Resume;
Во-вторых ресуминг между главным меню и фильмом который включается в Property фильм-объекта в графе Resume Intention Flag и имеет две позиции:
Suspended - когда информация о фильм-объекте (глава, время воспроизведения, активные дорожки и т. д.) задерживается в памяти плеера до возобновления;
Discarded - когда информация не задерживается. К сожалению многие плееры игнорируют эти установки управляя ресумингом по своему усмотрению, что бы быть уверенными в нормальной работе этой функциии поставим позицию Suspended в МО фильма и добавим команду в кнопку Play, окончательно список команд будет выглядеть так
1 Move (GPR)ChapPLMark[ID:4095] 0
2 Resume
3 JumpTitle Title#1[ID:1]
Т. е. сначала сбрасывается значение маркера главы, затем выполняется попытка ресуминга, если фильм вызывается в первые за сессию, ресуминг невозможен, выполняется переход в заголовок фильма, если вызывается повторно, ресуминг выполняется.
Правда некоторые программные плееры не смогут обеспечить выполнение второй команды после поиска глав через поп-ап меню и повиснут. Так что если планируете использование, например, ArcSoft TotalMedia Theatre версии 5 вторую команду не следует добавлять.
Нужно назначить соседство кнопок чтобы стало возможным переключение между кнопками на пульте ДУ. Делаем двойной клик на значке страницы что бы открыть окно IG Editor, он нам нужен для контроля. Если мешают названия кнопок ПКМ на свободном месте окна IG Editor и выбираем NaveTag > View, в том же контекстном меню выбираем Button Locked, что бы случайно не сдвинуть кнопки. Масштаб отображения регулируется в главном меню кнопками "+" "-".
Выделяем значок кнопки и в окне Property в разделе Neighbor назначаем соседние кнопки.
Upper ButtonRef - ссылка на верхнюю кнопку
Lower ButtonRef - ссылка на нижнюю кнопку
Left ButtonRef - ссылка на левую кнопку
Right ButtonRef - ссылка на правую кнопку
Это можно сделать и в IG Editor перетягивая цветные треугольники на кнопки.
Upper Button Ref - соседняя кнопка сверху. Зелёная стрелка.
Lower Button Ref - соседняя кнопка снизу. Малиновая стрелка.
Left Button Ref - соседняя кнопка слева. Красная стрелка.
Right Button Ref - соседняя кнопка справа. Жёлтая стрелка.
Например нам нужно назначить переход с кнопки "Меню" на кнопку "1" при нажатии на пульте ДУ клавиши "Вниз". Захватываем малиновый треугольник внизу кнопки "Меню" и тянем на кнопку "1".
отпускаем и появляется диалог привязки
One way to <название кнопки> - однонаправленная привязка
Shuttle to <название кнопки> - двунаправленная привязка, когда к целевой кнопке добавляется обратная привязка к исходной кнопке
Хороший метод, но при тесном расположении кнопок бывает трудно разобраться какой треугольник к чему относится, в этом случае приходится ориентироваться по цвету и подсветке исходной кнопки.
Чтобы переключиться между кнопками внутри одной BOG - ПКМ на кнопке и в контекстном меню выбираем нужную.
Для автоматизации процесса можно воспользоваться кнопкой Route в разделе Auto Rute окна IG Editor, если поставить чекбокс Wrap вертикальный или горизонтальный рутинг зациклиться.
Теперь вопрос, что делать на странице Settings, помнится там у нас дополнительное выделение, как объяснить плееру на какую кнопку переходить. Для этого мы создадим виртуальные автоактивные кнопки для каждой реальной кнопки. Соседство теперь будет сведено к ним, а команды в этих кнопках будут на основе тех же логических сравнений, что и в Settings Select.
Проверяем дефолтные и автоматические состояния кнопок.
Делаем двойной клик на значке кнопки Intro и в окне Edit Button Info ставим чекбокс Auto Action, повторяем тоже для кнопки Main to Chapters и для других страниц переходов.
Теперь последовательно нажимая на значки страниц проверяем в окне Property состояния параметров Animated Frame Rate Code, Default Selected Button Ref и Default Activated Button Ref. Для страниц Intro выделеная и активная кнопка по умолчанию должна быть Intro, для страницы Main to Chapters соответственно Main to Chapters и так же для остальных страниц переходов.
На других страницах автоактивных кнопок у нас нет, а выделенные по умолчанию зависят от команды SetButtonPage адрессующей на эту страницу.
От Animated Frame Rate Code зависит скорость воспроизведения анимации, причём это не колличество кадров в секунду а коэффициент. Т.е. если Animated Frame Rate Code равна 0 то анимации не будет, если равна 1 то все кадры воспроизведутся с частотой кадров проекта, если 2 то воспроизведение замедляется, каждый кадр анимации воспроизводится в течении двух кадров видео.
Я расставил везде 1, а для страниц переходов 2 таким образом на этих страницах анимация снизилась в два раза.
Пользовательские функции.
На BD как и на DVD можно запрещать и разрешать выполнение определённых функций при воспроизведении плейлиста. Заперщать функции можно и для плей-айтем и для плейлиста в целом, доминируют запреты плейлиста. Чтобы попасть в настройку функций нужно выделить плейлист, в окне Property найти графу UO Mask и дважды кликнуть в её правом конце, появится окно настоек
Time Control
Resume - функция возврата из меню в точку фильма в которой была нажата кнопка Top Menu на пульте ДУ
Stop - остановка диска
Playback Control
Chapter Search - воспроизведение с указанной главы (средствами плеера)
Time Search - воспроизведение с указанного времени (средствами плеера)
Skip To Next Point, Skip Back To Previous Point - переключение по главам с пульта ДУ
Pause On - пауза
Forward Play, Backward Play - перемотка вперёд и назад
Primary Audio Stream Number Change - переключение аудиодорожек
PG textST Enable Disable - включение выключение субтитров
Angle Number Change - переключение углов зрения
PG textST Stream Number Change - переключение дорожек субтитров
Secondary Video Enable Disable, Secondary Audio Enable Disable - включение выключение вторичных аудио и видеодорожек
Secondary Video Stream Number Change, Secondary Audio Number Change - переключение вторичных аудио и видеодорожек
PIP PG textST Stream Number Change - переключение субтитров сопровождения картинки в картинке
Interactive
Move Up Selection Button, Move Down Selection Button, Move Left Selection Button, Move Right Selection Button - переключение между кнопками с пульта ДУ
Select Button - выделение кнопки
Activate Button - активация кнопки
Select Button and Activate - выделение и активация кнопки
PopUp On, PopUp Off - включение выключение поп-ап меню
Снятие чекбоксов запрещает выполнение функций. Используйте их по желанию, но если плейлист меню не находится в домене меню запрещение некоторых функций обязательно дабы пользователь не нарушил логику его работы.
Если плейлист меню в домене меню достаточно снятия чекбоксов: Primary Audio Stream Number Change, PG textST Enable Disable, PG textST Stream Number Change.
Собираем диск окончательно. Однако если вы в правом нижнем углу увидели такую тревожную картину,
необходимо принять меры. Идём Tool > Disc Layout или нажимаем кнопку Disc Layout
в открывшемся окне Layout Editor выбираем закладку Physical Layout и там жмём кнопку Auto Layout, откроется окно
Select auto layout type, где ставим переключатель Dual Layer.
Жмём везде ОК. Теперь картина более отрадная.
Если вы хотите поставить разрыв слоя в ручную, то в закладке Disc Settings следует выбрать Number of Layer = 2, в Layer Break Point выберите файл вашего фильма (или какого либо клипа близкого к разрыву слоя),
поставьте чекбокс PTS Break и в списке PlayListMark выберите главу которая будет распологаться в начале второго слоя или в графе TimeCode укажите время разрыва слоя.
Для BD на слое 0 всегда должно быть больше информации чем на слое 1.
Если вы уверены что ваши болванки и программа нарезки поддеpживают пересыщение (запись более 25GB на слой) то в графе Layer Size можете ставить 27 (GB)
Нажимаем Tool > MUX и ставим переключатель Partial MUX, поскольку клипы мы вывели раньше, Scenarist смуксит всё что осталось и затратит на это меньше времени, чем на полный муксинг. Так же Partial MUX удобен при доработке и исправлении ошибок навигации - несколько секунд и диск готов для тестирования.
Не забываем удалить папку AACS и проверяем работоспособность диска.
*
Для облегчения понимания авторинга, прилагаю готовый проект описание которого вы читали выше этот проект вмещает в себя только виртуальные составляющие поэтому вы можете использовать его как шаблон, подставляя свои данные.