25 марта, 2025

Cinelerra — how to create "fake" 3d text effect.

 Эта публикация представляет способ создания псевдо-3D титров в Cinelerra HV/CV. Ранее я уже обращался к этой теме и предлагал в < этой статье > варианты для Cin-CV/GG . 

Но Cin-CV нынче пользуются только те, кто хорошо понимают, что они хотят получить и где разложены < грабли >. 
В Cin-GG создание объёмных титров ограничено рядом проблем (описаны в той же статье). 
А вот в Cinelerra HV 9, после того, как был модифицирован эффект 'Swap Channels', создание таких титров проходит на ура. Проект на #2 был предложен Адамом в ходе обсуждения вышеупомянутой статьи. Проект отличается от представленных в статье по ссылке выше. 
Поехали.
#1

Результат выше получен при помощи такой конструкции:
#2   

В 'Title' параметры 'Drop shadow'=0 , 'Outline' = 0.
#3

Что здесь происходит ? V5 и V4 создают маску. Вы увидите её, если отключите (зелёная кнопка на панели управления) V3, V2 и V1(фон):
#4

Такую же маску можно воспроизвести при помощи эффекта 'Reroute' (см. по тегу) в CV/GG:
#5

То есть в обоих примерах на верхней дорожки создаются непрозрачные титры, а вокруг них - прозрачность. С нижележащей дорожки V2 при помощи 'Swap Channels' или 'Reroute' портируются RGB-компоненты на V3, которыми "раскрашиваются" титры. Альфа-канал не меняется. Т.о. создаётся альфа-маска. И 'Swap Channels', и 'Reroute' задействованы в режиме 'shared effect'. Как это работает я подробно рассказывал в предыдущих публикациях.

Зачем в примере #5 глушится изображение на V2, надеюсь, понятно. А зачем глушится в примере #2 со 'Swap Channels', я смотрите в публикации "Edge+Swap Channels".

'Blur' на V5 сглаживает резкие, неровные края титров. 'Blur' на V4 размывает содержимое этой дорожки и, следовательно, внутри титров, что на V5 (ведь мы портируем с V4 RGB-компоненты).
Размытие будет значительно лучше видно, если на V5 и на V1 будет разный футаж.

На дорожке V5 вы видите два экземпляра титров.  Тот, что выше - центр. надпись, тот, что ниже - название блога. Титры на V3 и V2 - это "расшаренные"копии титров с V5. Зачем их так много ? Затем, что они нужны для создания объёмности. Ибо и на V3, и на V2   'Projector' смещает содержимое этих дорожек. Уловили суть фокуса ?
#6
Слева - настройки для V3,  Справа - для V2:

Значительную роль играют режимы наложения. 'Subtract' на V3, собирает воедино титры с трех дорожек и даёт оконтуренность и тень. 'Blur' на V3 сглаживает и убирает чрезмерную тень. 'Addition' на V2 даёт белую подсветку краям титров. 'Blur' на V2 тюнингует эту подсветку.

Разумеется, эти настройки не высечены на камне. На скриншоте ниже я изменил (установил) в 'Title' на V5 параметры:  'Drop shadow'=1, 'Outline' = 1. Они автоматически применились ко всем "расшаренным" копиям.
                                                                                       #7

Вы можете снять глушение с V4, но заглушить V5 и сравнить результат. Или вовсе снять глушение. Можете включить инвертирование RGB на V3.
В целях увеличения иллюзии объёмности можно увеличить смещение проектора на V3. Или сбросить его на V2. Для переключения следует навести указатель мыши на красную кнопку 'Arm track' и щёлкнуть ЛКМ, зажав при этом Shift.  Есть и другие хоткеи для этого - смотрите в руководстве.

Имеет также смысл вместо "расшаривания" титров, применить к каждой дорожке собственный эффект. Это может дать большую гибкость в настраивании результата. 
Или наоборот, создать отдельный проект, в котором настроить титры, а потом загрузить его на соответствующие дорожки в режиме "Вложенная последовательность | Nest sequence" (кнопка в окне 'Load'). Более того, все вот эти пять дорожек с футажом и эффектами можно загрузить в режиме "Nest sequence" в другой проект, и они будут представлены на дорожке всего лишь как один видеофайл. Очень удобно.

В примере выше с дорожки на дорожку перенаправляются RGB-компоненты. Но можно сделать всё и через замену альфа-канала.
#8 
(щёлкните ЛКМ для увеличения)
Я меняю местами дорожки V5 и V4, затем основной 'Swap Channels' перемещаю на V4, а его "расшар." копию -- на V5. И меняю его настройки: альфа-канал берется с V5, RGB-компоненты на V4 не меняются. Все остальные настройки прежние.

#9
-------------------------------
Точно такой же проект как на #2 в HV, можно собрать и в Cin-CV (в обеих цвет. моделях) при помощи 'Reroute':
'Reroute' "расшарен" c V4 на V5 в режиме 'Components only'. Остальные настройки те же, что и в HV.
(щёлкните ЛКМ для увеличения)
#10

#11

***

И только в Cinelerra-GG традиционно получится чёрти-что (точнее, ничего не получится). Даже с учётом специфики режима Subtract. Впрочем, там нынче принято называть проблемы спецификой, прописывать их как "фичи" в руководстве и строить на этом какой-то код, перекладывая таким образом проблемы на плечи доверчивых пользователей. 
Впрочем, пробуйте. Может у вас получится. Или ставьте Cin-HV и не морочьте себе голову.

19 марта, 2025

Эффект 'Edge | Край' в Cinelerra

В этой публикации речь пойдёт об эффекте 'Edge | Край'. 

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

В Cinelerra 'Edge' впервые появился в Cin-HV, а позже был портирован в Cin-GG. Выдавал в Cin-HV/GG результаты, аналогичные эффекту 'Charcoal' в Kdenlive. В конце апреле 2024 в эфф. 'Edge' в Cin-HV был исправлен параметр 'Amount', эффект был переработан и ныне выдаёт результаты аналогичные 'Edge' в GIMP (Aдам подтвердил это). В Cin-GG эффект остался прежним (≈ 'Charcoal' in Kdenlive).

Возьмём картинку:

После применения к ней эффекта:  слева - Cin-HV,  справа - Cin-GG:


Чтобы отобразить картинку на белом фоне, следует добавить эфф. 'Invert Video' (rgb=on) (слева - Cin-HV,  справа - Cin-GG):

Познакомимся с эффектом поближе. Случалось ли вам рисовать авторучкой на салфетке в кафе, ожидая друзей ? Давно? Тогда давайте порисуем. В качестве салфетки - холст в Cinelerra, в качестве ручки - эффекты 'Edge' & Co. 

Следующие примеры сделаны в Cinelerra HV 9 . 'Edge' в HV мне представляется гораздо интересней.

На скриншоте ниже: слева - оригинал, справа -- он же после применения 'Edge', затем 'Blur', который убирает излишнюю детализацию, после тюнингуем результат эффектом 'Histogram' и инвертируем RGB-каналы эффектом 'Invert Video'.

                                                                                                     #1

#1.1


Если добавить размытие канала 'Blue', то крен в сторону синего сменится на черный. 
А теперь телепортируем корабль во мрак ночного океана, отключив эфф. 'Invert Video':
#2

*** ***
На скриншоте ниже комбинация эффектов: 'Blur' (rgb=3.0) и 'Edge' (Amount=6). Порядок применения эффектов изменён: 'Blur' применён первым, затем 'Edge' (значение увеличено).  ColorModel = RGBA-8bit
#3

***
На скриншоте ниже та же комбинация, только увеличено значение параметра Amount=10
#4

***
Та же комбинация (Amount=10) 
#5:

***

На скриншоте ниже комбинация эффектов: 'Blur' (RGB=8.0), 'Edge' (Amount=10), + добавлен 'Invert Video' (RGB=On, A=off). 'Blur' применён первым (степень размытия увеличена), затем 'Edge', затем 'Invert Video' (RGB=On, A=off).  ColorModel = RGBA-8bit

#6

А если отключить 'Invert Video', то будет так: #7


*** ***
Возьмём Cinelerra-GG и загрузим в неё эту картинку: #8


Применим к ней комбинацию эффектов:   
#8.1  (Color Model = RGBA-8bit)


 Если отключить нижн. дорожку, хороша видна область действия градиента: #8.2


Blur убирает чрезмерную детализацию Edge. 
В результате получим: Слева: 'Invert Video'=On , Справа: 'Invert Video'=Off (отключен)  
#8.3

*** ***
Усложним комбинацию эффектов. Возьмём пару картинок:


и соберём конструкцию снова в Cinelerra-HV 9:   #8.4
Здесь 'Swap channels' переводит изображение в grayscale, а затем значение Blue channel перенаправляется в Alpha channel дорожки (то есть канал синего используется как Alpha Matte). Прозрачность создаётся по каналу синего. Имейте в виду, что оригин. изображение ship.jpg не имеет альфа-канала, так как формат JPEG не поддерживает альфа. 
Есть принципиальная разница между внутренним форматом программы и форматом JPEG. Например, на скриншотах ниже вы видите полупрозрачный ship.jpg на дорожках, но вывести из программы такую полупрозрачность в отдельный ship.jpg, разумеется, не получится. 
Кстати, вот цитата от разработчика: "Loading a media converts it to unpacked internal format what isspecified in settings/format. Everything happens on internal format. Then the result is rendered to output. The editing process does not depend on input or output format.".

Получим:
#8.5

*** ***
Усложним комбинацию. Возьмём пару картинок:


и соберём конструкцию тоже в Cinelerra-HV 9:  #8.6


Получим:  #8.7


На скриншоте выше: 
'Blur' на V.2 (blue=2.0) слегка размывает содержимое 'Blue' канала, в результате чего 'Edge' выдаёт меньшую детализацию. 'Swap Channels', "расшаренный"  с V.3 на V.2, заменяет альфа-канал дорожки V.3  каналом 'Blue' дорожки V.2.  Т.е. канал синего дорожки V.2 используется как Alpha Track Matte.  Таким образом прозрачные и непрозрачные участки содержимого дорожки V.3 определяются каналом 'Blue' содержимого дорожки V.2. Так как в Cin-HV фон представлен шахматкой, к V.1 применён эфф. 'Background' и установлен черный цвет фона.

Давайте детально разберём как это работает.
Отключим дорожки V.3 и V.1 , нажав зелёную кнопку 'Play track' на панели управления слева;  отключим 'Blur', 'Edge' на дорожке V.2  =>  ну вот, собственно, на скриншоте ниже (#8.8) маска по 'Blue' каналу:
Участки, где значение синего равно 0, становятся полностью прозрачными, с повышением значения канала синего нарастает непрозрачность:


Включим 'Play track' для V.3.  Эффекты 'Blur', 'Edge' дорожки V.2 оставим отключенными  => на скриншоте ниже - Alpha Track Matte по 'Blue' channel с V.2 , применённое к V.3:  
#8.9


Однако на этом чудеса не заканчиваются. 
Цитата из описания эффекта 'Swap Channels' в руководстве по Cin-HV 'Secrets of Cinelerra': 
"If swap channels is shared between multiple tracks, the source track is selected by the source buffer. Source buffer 0 is the top track. Higher numbered source buffers are the lower tracks in the timeline.
The same output is copied to all the shared tracks so some projects can perform different processing on each output track. The alpha in 2 overlapping tracks will accumulate, so you must mute the lower tracks to avoid this.".

Зажав клавишу Shift, щёлкнем ЛКМ по красной кнопке 'Arm track' дорожки V.2. В результате для V.3 и V.1 будет заблокирована правка. Теперь включим инструмент 'Projector' в 'Compositor' (одноим. кнопка на вертик. панели в Compos.). Сместим проектором содержимое дорожки V.2 вправо.  Надеюсь, что вы всё-таки сможете разглядеть на скриншоте ниже, что в 'Compositor' справа появилась ещё одна "маска-кораблик":

#8.10

На скриншоте ниже я заглушил выход дорожки V.3, нажав на кнопку Mute track (Don't send to output) ->  
#8.11  (так лучше видно):


Откуда взялся этот "Летучий Голландец" ? А это вот как раз то, что подчёркнуто в цитате из руководства. В исходном примере я не глушу вывод с V.2 так как в этом случае изображение становится слишком тёмным, а вообще, нередко имеет смысл заглушить дубликат.

Включим наконец 'Edge' на V.2: #8.12


Включим теперь 'Backround' на V.1 ->
#8.13  (много ненужных мелких штрихов, так как Blur ещё отключен):


Понятно ? Вот потому и глушится обычно. 
----------------------------------------------------------
А теперь тоже самое в Cinelerra-GG.
Color Model: RGBA-8bit; Overlay mode: Normal; Font: URW Chancery L (Italic), (sz.=50)
#9

Результат: #9.1


На скриншоте выше: 
'Blur' слегка размывает картинку, в результате чего 'Edge' выдаёт меньшую детализацию,  'Swap Channels' в Cin-GG, в отличие от Cin-HV, не умеет брать информацию с содержимого другой дорожки. Поэтому сначала создаётся альфа-маска по цвет. каналу 'Red' на V1, а затем 'Reroute' перенаправляет её на верхнюю дорожку. Выход изображения с нижней дорожки заглушён, чтобы оно не отправлялось в вывод и не смешивалось с альфа-маской в 'Compositor'. Однако это не мешает работе 'Reroute', так как сам трек не выключен (кнопка 'Play track' на панели управления). 
А если вывод не заглушить, то будет так: #9.2


***
Ну и ещё порисуем в Cinelerra-GG: 
#10

#10.1

#10.2

В примере выше связка 'Swap Channels' и 'Reroute' работает в CinGG аналогично 'Swap Channels' в Cin-HV.  
Разберём пример на детали.
Отключим 'Edge', 'Invert Video' на V.1 . Сместим проектором изображ. на V.1 .

На скриншоте #10.3 (ниже): в выводе смешиваются альфа-маска по красному каналу с V.1 (справа) и альфа-маска с V.3 (слева) (перенаправленная с V.1). Если добавить сейчас ещё одну дорожку под V.1 и применить к ней градиент, он будет просвечивать через прозрачные участки картинок слева и справа.
#10.3

На скриншоте #10.4 ниже - совмещенные изображения ("Projector" сброшен):


На скриншоте #10.5 ниже -- включен 'Edge':


На скриншоте #10.6 ниже -- включен 'Invert Video'.
Ну, вы уже знаете, что тут надо глушить вывод с V.1


Заглушён ниже на #10.7:


Зачем инвертировать ? Ну, если не инвертировать, то будет вот такое: #10.8


*** ***
А можно ли тот же результат получить в Cin-GG более простым образом ? Да не вопрос, сделаем. Следите за руками скринами.
Собираем конструкцию: #10.9


Получаем уже знакомый вам светящийся кораблик: #10.10

***
Ну а чтобы получить более простым образом ещё одного знакомого из примеров выше #10.11:

надо в настройках на #10.9 отключить 'Invert Video' и уменьшить в 'Edge' параметр 'Amount' до 3.
Ключевую роль здесь играет 'Overlay Mode' = DstOut (PorterDuff). С тем же результатом можно использовать Logical->XOR. Если выбрать OR, то цветом карандаша станет белый.
------------

Ну что, всё ?  Или ещё что-нибудь показать ? Хотите, покажу как собрать результат, аналогичный 'Edge' эффекту, но не применяя последний ? Прогуляемся в репозиторий исходного кода Cinelerra HV на GitHub. В директории <root>/cinelerra/tests находятся разного рода проекты, использовавшиеся Адамом для тестирования функционала программы. Нам нужен overlay2.xml . Воспроизведём его в HV 9 (разумеется, со свои футажом).
#10.12

'Overlay mode' = Subtract дорожки V.3 используется здесь только для наложения титров. Он не играет никакой роли в создании штрихового рисунка. Эффект 'Overlay' "расшарен" с V.2 на V.1 .
 К оригинальному проекту Адама я добавил 'Invert Video' и 'Blur' на верхнюю дорожку. И отключил размытие 'Green', 'Blue' каналов в 'Blur' на обеих дорожках. Это позволило перевело рисунок в однотонный
#10.13
Слева: 'Invert Video' = On. Cправа: 'Invert Video' = Off, 'Overlay mode' for V.3 = Addition , иначе титры не будут видны.


Настройки: 
#10.14

 А если включить размытие , то будет так:
#10.14.1

***

И ещё картинка (комбинация эффектов и настройки те же, что на #10.14):
#10.15

Ну вот и всё. Пока.
P.S. 
Эх, люблю кораблики ! Детство... , книжки про пиратов... 😇

P.P.S.
Воспроизвести проект из репозитория HV в Cinelerra-GG традиционно не получится. Ну потому что в результате чёрти-что получится (конечно же, с учётом специфики режима Subtract). Впрочем, пробуйте:.