23 января, 2022

Эффект "Reroute | Перенаправление" и Alpha Matte в Cinelerra (p. 1)

В этой статье я расскажу о таком эффекте Cinelerra как 'Reroute | Перенаправление', в частности, о работе с альфа-маской (alpha matte), создаваемой при помощи этого эффекта. Публикация является продолжением темы "Прозрачные титры в Cinelerra", начатой в предыдущей публикации. Эффект относительно малоизвестен в сообществе Cinelerra -- информации по нему мало, так что нередко даже опытные пользователи ошибочно считают что он и вовсе нерабочий.

Сначала базовая информация.

Эффект 'Reroute (c 25.05.2022 г. в РФ, РБ сайт по ссылке доступен только через VPN/proxy)| Перенаправление' - это мультитрековый, работающий в режиме реального времени видеоэффект.
Работа с ним подразумевает использование техники 'Shared effect | Общий эффект'.
Эффект используется для избирательного перенаправления Alpha channel и/или Components ('RGB' или 'YUV') с одной дорожки на другую (с дорожки-источника на целевую (выводящую) дорожку). При этом содержимое целевой (выводящей) дорожки частично или полностью переписывается.

Результат применения эффекта (все фотографии взяты с интернета, требуют тоновой коррекции, но заниматься ей я не посчитал нужным):

Cinelerra: how to create Alpha Matte with the Reroute effect.

Cinelerra: settings of the Reroute effect. Cinelerra: настройки эффекта Перенаправление.

В параметрах эффекта пользователь может выбрать какая из дорожек будет 'Целевой (выводящей) | Target (output) track'. Подробнее о целевой дорожке смотрите в постскриптуме.
Кроме того, 'Reroute' предоставляет на выбор три операционных режима:
- 'Replace Target | Заменить цель':
содержимое целевой дорожки переписывается содержимым (Alpha channel и Components (RGB или YUV) дорожки-источника в пределах участка применения эффекта. Эффект применяется согласно очерёдности применения эффектов в программном конвейере.
- 'Components only | Только компоненты':
RGB | YUV компоненты целевой дорожки переписываются RGB | YUV компонентами дорожки-источника.
Содержимое альфа-канала целевой дорожки не изменяется. Эффект применяется согласно очередности применения эффектов в программном конвейере.
- 'Alpha replace | Только альфа-канал': тот же принцип, что и выше, но наоборот: содержимое альфа-канала целевой дорожки переписывается содержимым альфа-канала дорожки-источника. RGB | YUV компоненты не изменяются. Т.е. эффект позволяет построить альфа-канал на одной дорожке и перенаправить его к другой дорожке.

Эффект кроме того, что работает как 'Общий эффект | Shared effect', несёт в себе часть функционала 'Общие дорожки | Shared tracks' и может (при наличии на дорожке-источнике изображения !) перенаправлять параметры инструмента 'Camera' в окне 'Compositor'.  'Shared tracks — это очень большая тема, заслуживающая отдельной серии публикаций. В рамках данной серии я остановлюсь на использовании эффекта в контексте создания прозрачных титров.

Самый популярный вариант применения эффекта 'Reroute | Перенаправление
 это создать при его помощи (в комбинации с эффектом 'Title | Титры' или 'Chroma Key | Хромакей') альфа-маску (alpha matte) и перенаправить её на другую дорожку, тем самым заменив содержимое альфа-канала этой дорожки.
По сути это 'Alpha Matte', известный пользователям, например, Adobe Premiere по эффекту 'Track Matte Key'. И аналогично 'Track Matte Key',  'Reroute' (режим 'Alpha replace') в Cinelerra позволяет отображать фоновый материал через накладываемый материал, используя подложку, создающую прозрачные области в накладываемом материале.

Создадим в Cinelerra три дорожки. На верхней 'Video 3' расположим изображение переднего плана fgr.jpg (все изображения взяты с интернета), на средней дорожке 'Video 2' — фоновое изображение bkgr.jpg, на самой нижней дорожке 'Video 1' создадим подложку.

Для создания подложки применим к дорожке 'Video 1' эффект 'Титры | Title' и введём текст; затем применим эффект 'Reroute | Перенаправление' и выберем в нём режим 'Только альфа-канал | Alpha replace'; затем сделаем щелчок RMButton | ПКМыши по целевой дорожке 'Video 3' и в открывшемся меню выберем 'Применить эффект | Attach effect..'; теперь в открывшемся окне в поле 'Общие эффекты | Shared effects' выберем 'Video 1: Reroute' и нажмём зелёную "птичку" 'Ок'.

Cinelerra: howto attach effect. Как применить эффект в Cinelerra.


В результате у вас должно получиться как на скриншоте ниже:

Cinelerra: how to create alpha matte with Reroute-effect. Как создать альфа-маску в Cinelerra.


Cinelerra: alpha mask with Reroute plugin


В рассматриваемом примере альфа-канал с дорожки 
'Video 1' используется в качестве подложки (alpha track matte): чёрные участки определяют прозрачные области в материале дорожки, куда пользователь перенаправляет эффект, а текст, введённый в эффекте 'Титры | Title', определяет непрозрачные области.

Если пользователь желает, чтобы материал, находящийся на нижележащей дорожке, был виден сквозь текст (как на скриншоте ниже), 

Invert alpha matte with Reroute in Cinelerra.

то к дорожке 'Video 1' следует применить эффект 'Инверсия видео | Invert video' и включить в его настройках инвертирование альфа-канала, по сути создав тем самым 'Alpha Inverted Matte' :

Cinelerra: Invert video effect

В Cinelerra эффекты обрабатываются (применяются к временному кадру) в порядке очерёдности сверху вниз. Очерёдность применения эффектов — важный момент в понимании работы 'Reroute'. 
В рассматриваемом примере сначала применяется 'Title', затем на титры накладывается 'Blur', а после 'Reroute' всё это перенаправляет к целевой дорожке. 
Поэтому эффект 'Инверсия видео | Invert video' (равно как и другие эффекты, которые вы захотите перенаправить) должен быть расположен до (выше) эффекта 'Reroute'. Если расположить 'Invert video' после 'Reroute', то инвертирования альфа-канала на целевой дорожке не произойдёт, потому что 'Reroute' не перенаправляет эффекты, лежащие в стопке эффектов ниже его.
Как я уже говорил, перенаправляемая альфа-маска — это трафарет, согласно которому отсекается часть картинки на целевой дорожке 'Video 3'. 
Например, если применить к дорожке 'Video 3' эффект 'Вихрь | Whirl':

cinelerra: the whirl effect

и расположить его (применить его) перед "расшаренным" 'Reroute', то сначала 'Whirl' отработает изображение, а затем применится трафарет альфа-маски:

How to use the Reroute effect in Cinelerra. Как работать с эффектом Перенаправление в Cinelerra.

Alpha Matte with Reroute in Cinelerra.


А если эффект 'Вихрь | Whirl' расположить (применить его) после "расшаренного" 'Reroute', то 'Whirl' применится уже к результату применения трафарета альфа-маски:


Reroute effect in CInelerra.

Alpha mask with Cinelerra


Итак, еще раз: значение непрозрачности для материала на той дорожке, куда перенаправляется (копируется) альфа-канал, устанавливается в соответствии со значением альфа-канала подложки. То есть, эффект использует значение альфа-канала одного медиаресурса (подложки), чтобы задать значение непрозрачности для другого медиаресурса. При этом непрозрачные участки 100 % непрозрачны, а прозрачные участки 100 % прозрачны.
Если необходимо, чтобы материал на целевой дорожке получил промежуточные значения прозрачности между 0 и 100, то следует разместить на дорожке-источнике 'Video 1' изображение, содержащее в себе градиент прозрачности. Тогда 'Reroute' будет использовать этот градиент как карту прозрачности, в соответствии с которой будет устанавливать значения прозрачности для материала на дорожке 'Video 3'. Я приведу пример в следующей публикации.

Создавать 'Luma Matte', когда значение непрозрачности устанавливается в соответствии со значениями светимости (яркости) пикселов, а не значением альфа-канала, 'Reroute' не умеет. В этом легко убедиться, например, разместив на дорожке непрозрачный градиент какого-либо цвета. Впрочем, м
ожно выкрутиться, задействовав эффекты 'Chroma key' или 'Difference Key' в режиме 'Use Value' (когда кеинг происходит по яркости (Luma) ), но называть это 'Luma Track Matte' было бы неверным, потому что в любом случае 'Reroute' будет использовать значение альфа-канала, а не Luma.

В Cin-HV|GG в эффекте 'Титры | Title' инструмент выбора цвета 'Text Color' позволяет регулировать непрозрачность текста, тем самым внося дополнительные изменения в 'Alpha Matte'. Однако этот параметр по своей сути - 'Fade' и с изменением непрозрачности текста, будет исчезать и сам текст. В Cin-CV в рассматриваемом примере с этой же целью можно использовать регулятор 'Fade' на панели управления дорожкой 'Video 3'. На панели управления также есть удобная кнопка, позволяющая свернуть/развернуть "лестницу" применённых к дорожке эффектов.


Пользователь может регулировать какие участки изображения переднего плана на дорожке 'Video 3' будут попадать в трафарет, то-бишь из каких участков картинки будут строиться текстовые символы.
Делать это можно путём:
— перемещения текста в окне параметров эффекта 'Title'. В этом случае альфа-маска будет перемещаться по картинке и материал внутри букв будет изменяться
— перемещения инструмента 'Camera | Камера' в окне 'Compositor | Составитель' на дорожке 'Video 3'

При помощи инструмента 'Проектор | Projector' в окне 'Compositor' на дорожке 'Video 3' можно перемещать и масштабировать результат применения эффектов и перенаправленной альфа-маски, т.е. вы 'Проектором' перемещаете текст на дорожке 'Video 3'. Содержимое букв при этом, разумеется, не изменяется.


В представленном выше примере к нижней дорожке у меня применён эффект 'Blur | Размытие':


Сделано это для того, чтобы немножко сгладить края букв, тем самым частично нивелировав проблему сглаживания шрифтов в Cinelerrа (я говорил о ней в предыдущей публикации). С этой же целью дополнительно можно применить 'Blur' к дорожке Video 3 (разместить после 'Reroute') и, в зависимости от фона, включить размытие отдельных каналов R, G, B)
А теперь попробуем ещё один трюк. 
На скриншоте ниже: самая нижняя дорожка 'Video 1' перемещена вверх (щелчок RMB | ПКМ по дорожке и в открывшемся меню щелкнуть 'Move up | Вверх'). Для дорожки 'Video 3' выбран режим наложения 'Умножение | Multiply'. Остальные настройки эффектов не изменяются (только в 'Title' 'Drop shadow | Тень' = 2).

Cinelerra: Reroute effect and Multiply overlay mode.

В результате плоские края букв стали более чёткими, оконтуренными:

Cinelerra: Multiply overlay mode with Reroute plugin


Установив для дорожки 'Video 3' режим наложения 'Subtract | Вычитание',  получим:

Cinelerra: Reroute with Subtract


Добавлю: если после перемещения дорожки 'Video 1' вверх, пользователь изменил при помощи 'Projector | Проектор' расположение / масштаб букв в изображении на дорожке 'Video 3', необходимо соответственно изменить расположение / масштаб букв на дорожке 'Video 1'.

Ещё один пример применения режима наложения 'Умножение | Multiply' представлен ниже.
На скриншоте проект собран как было уже описано в начале статьи. 'Multiply' установлен для дорожки 'Video 3'.

Cinelerra: Reroute effect and Multiply mode.

В этом режиме буквы становятся полупрозрачными и возникает иллюзия того, что караван путешественников расположен впереди (на фоне букв):

Cinelerra: a trick with Multiply overlay mode


В режиме 'Normal | Нормальный' буквы перекрывают путешественников:


 
В следующей публикации я продолжу рассказ о 'Reroute', в частности, приведу ещё один классический пример использования 'Reroute | Перенаправление' в комбинации с 'Chroma Key | Хромакей'.
На дорожке располагается статичное или анимированное изображение на однородном фоне. Фон удаляется в Cinelerra при помощи эффекта 'Хромакей | Chroma Key', а дальше всё происходит как было описано выше. 
Также можно применять 'Reroute' в комбинации с 'Difference Key | Ключ разности' или 'Blue Banana | Модификация цвета'. 

P. S.
Автор этого эффекта бывший разработчик Cin-CV, а ныне Lumiera  Herman Vosseler .
'Reroute' имеется в Cin-CV и Cin-GG. В Cin-HV он отсутствует (портирован не был), но в сборках HV после февраля 2024 можно использовать модифицированный 'Swap Channels' эффект. Ссылка в конце статьи. 
Эффект присутствует также в Cin-CVE, однако в этом форке введён ряд лимитов как на сам эффект, так и на технику 'Shared effects | Shared Track', что значительно ограничивает их совокупные возможности.
------------------------------------------

А теперь подробнее о параметре 'Target track | Целевая дорожка' в Cin-CV, Cin-GG.
Возникает вопрос: Какая дорожка считается целевой (выводящей), а какая дорожкой-источником ?
В принципе, как выводящей, так и источником может быть как дорожка, на которой расположен собственно эффект, так и дорожка, на которую он "расшарен", т.е. распределён.

В рассматриваемом выше примере, трек V.1 - дорожка-источник (источник альфа-канала), а V.3 - целевая (акцептор), что задано в настройках как 'Верх' (так как V.3 находится сверху дорожки V.1). Т.о. происходит замена альфа-канала дорожки V.3 альфа-каналом дорожки V.1.
Тот же результат будет получен, если к дорожке V.3 применить 'Reroute' как основной, установить целевой дорожкой V.3 (в настройках как 'Верх') и расшарить эффект с V.3 на V.1. Тогда V.3 (акцептор) возьмёт содержимое альфа-канала c V.1 и заменит им содержимое своего.

А теперь пример, когда целевой дорожкой установлен 'Низ'.

Cinelerra-reroute-alpha-mask-target-bottom

Здесь к V.2 эффект применён как основной и затем расшарен с V.2 на V.3. В настройках целевая дорожка (акцептор) = 'Низ'. Так как дорожка V.2 расположена снизу по отношению к V.3, то V.2 считается как целевая дорожка (акцептор), а V.3 - дорожка-источник. V.2 берёт альфа-канал c дорожки V.3 - дорожки-источника альфа-канала и заменяет им свой.

Тот же результат будет получен, если к дорожке V.3 применить 'Reroute' как основной, установить целевой дорожкой V.2 (в настройках как 'Низ') и расшарить эффект с V.3 на V.2.

В обоих случаях следует заглушить изображение на V.3 (кнопка 'Mute' на панели задач), чтобы оно не перекрывало материал на V.2. 
---------------------------------------------------------------------------------                           
Как я уже говорил выше, в форке Cinelerra-CVE содержит модифицированную версию эффекта. Параметр 'Target track | Целевая дорожка' удалён. После задействования эффекта в технике 'shared effect' на "расшареной копии" появляется пункт 'Swap with main'.
В этом форке плагин 'Reroute' всегда выводит результат через собственно эффект и никогда через его "расшареную" копию. На мой взгляд это снижает гибкость и удобство в работе, так как пользователь ограничивается в вариантах размещения эффекта, так главное, что комбинирование 'Reroute' c другими эффектами показывает, что эффекты работают неправильно. Кроме того, Reroute в CVE не работает должным образом, если на дорожках изображения или дорожки разных размеров. А это происходит потому, что в Cin-CVE внесён ряд "модификаций" в программный композитинг (pipeline), в частности в поведение 'Track Size' (к чему тоже есть ряд вопросов).

Кстати, параметр 'Целевая дорожка' в форке Cinelerra-CVE удалён также и в эффекте 'Overlay | Наложение', который как и 'Reroute' работает в технике 'Shared effects'. Это привносит ряд неудобств и ограничения.

Если же продолжать разговор об ограничениях в форке Cin-CVE функционала 'Shared effect | Общий эффект', 'Shared track | Общая дорожка', на базе которого работают мультиканальные плагины, то надо сказать, что ограничения не позволяют применить более одного мультиканального эффекта (Reroute).

Вообще, они ещё много чего не позволяют:

The order of multichannel plugins can't be changed.

Do not allow to share plugin more than once on one track. Allow only one multichannel shared plugin slave on same time.
Several multichannel shared plugins on same track at same time may deadlock playback and rendering.

Do not allow sharing multichannel plugin to shared track slave. Tracks that share multichannel plugin can't be shared.
Remove shared track when it contains multichannel shared plugin.
Rendering of multichannel plugins on shared tracks goes to indefinite loop.

Can't render transition on shared track. Edits of different tracks are at different positions and transition is part of edit.
Removed output track parameter from Reroute plugin. Output of multichannel plugin goes to the track of main instance.

Казалось бы, судя по описанию к коммитам, разработчик руководствуется благими намерениями: предотвращение deadlock playback and rendering, indefinite loop. Вот только эти deadlock и indefinite loop можно воспроизвести только в гипотетической ситуации, с которой пользователь на практике никогда не столкнётся (далее цитата):
Simple example:
Two shared multichannel plugins PluginA, PlugibnB. Plugins are applied from left to right:
Track1: PluginA, PluginB
Track2: PluginB, PluginA
How to solve this problem? PluginA can't be rendered before PluginB and PluginB can't be rendered before PluginA.
The current solution is not to allow to create such project.
Possible solution: shared multichannel plugin gets frame without any appiled effect. This means on track 2 PluginB is ignored and on Track1 pluginA is ignored. This is quite confusing too. May be checks of shared track are too restrictive.
--------------------------------------------------------

UPDATE: Alpha Track Matte в Cinelerra можно создать и при помощи эффекта 'Swap Channels'.
Статью смотрите здесь.

Комментариев нет:

Отправить комментарий