13 апреля, 2024

Сепия в Cinelerra | Sepia with Cinelerra

Как создать эффект сепии | sepia (старой выцветшей фотографии) в Cinelerra ? Специализированного эффекта в программе нет. Потому соберём его из подручных средств.

Оригинал:

Например так (в Cinelerra-GG):


Настройки (Color Model = RGBA-8bit, Overlay mode: Logical -> OR, Font: Murometz (TGR) ):


Т.е. в примере выше на верхней дорожке создаётся градиент, на нижней дорожке исходное изображение в Cinelerra превращается в чёрно-белое эффектом 'Hue Saturation' + лёгкое размытие, а потом содержимое дорожек смешивается в режиме 'OR' (группа 'Logical').

А теперь вариант с текстурой:


Настройки (RGBA-8bit, Overlay mode: Graphic Art -> Overlay):


Ниже представлена конструкция без текстуры (Cinelerra-CV):


Настройки (RGBA-8bit, Overlay mode = Add;   Font:  Balkara Free Condensed):



P.S.

В этом скринкасте я использовал эффект 'AgingTV' в комбинации с 'SwapChannel' и 'Brightness/Contrast' с целью создать эффект старой, поцарапаной плёнки.

06 апреля, 2024

Chroma Key HSV в Cinelerra.

Cinelerra имеет два базовых хромакея (во всех форках): "ChromaKey' (в коде HV Адам называет его 'ChromaKey RGB') и 'ChromaKey HSV', а также имеется 'Difference Key'. Кроме того, Cinelerra-GG имеет очень интересный 'CriKey' (a regionally based chroma key with interpolation) и ffmpeg-плагины: F_backgroundkey, F_chromakey, F_chromakey_cuda, F_colorkey, F_hsvkey, F_lumakey.

В статье пойдёт речь о 'Chroma Key HSV'. Этот плагин для Cinelerra-CV был написан Jerome Cornet (France) в феврале 2006 г.
AVID незадолго до этого выпустил тогда в свет свой the SpectraMatte TM chroma key effect; Jerome вдохновился его возможностями: "I told myself that it would be cool to have a similar plugin for Cinelerra. So I completely modified the chromakey plugin to be much more finegrained", взял имевшийся на то время штатный Chroma Key :

и модифицировал его (изменился также диалог выбора цвета): 


В таком виде, как на скриншоте выше, плагин представлен в настоящее время в Cin-CV/E/GG, а также в сборках HV до февраля 2024. О версии от Jerome и пойдёт речь в 1 части статьи. 
Текст 1 части я добавил в руководство по Cinelerra-CV (на англ.). Доступ пользователям из РФ, РБ только через VPN/proxy. Заходите через Opera - там встроенный VPN. Кроме того я сделал скринкаст, наглядно демонстрирующий как работают нижеописанные параметры (версия Jerome).

Модифицированный плагин был хорошо принят в сообществе, ибо выводил работу на качественно новый уровень. По заявкам пользователей Jerome внёс ещё ряд изменений, в частности, внедрив миним. и максим. уровень яркости и написал краткое руководство

Однако, руководство это написано в армейском стиле "делай раз, делай два, повторяй за мной" - оно больше похоже на частный случай применения и практическое применение плагина вызывает немало вопросов. Кроме того, его настройки по-умолчанию тоже не способствуют пониманию. 

А может быть вы хорошо знакомы с ним и даже разобрались с 1 раза ? Крепко "рукопожимаю" вас - это круто. Вы пробовали, но ничего не поняли ? И вас "рукопожимаю". Авансом. Но довольно болтовни - к делу.

Знакомство с плагином я рекомендую начинать с настройками как на скриншоте выше, а не с теми, что по умолчанию. В примерах ниже использовались вот эти картинки (изображения сгенерированы плагином 'ColorSwatch', который будет рассмотрен ниже).

Цвет можно выбрать либо захватив пипеткой "Get color" в окне Compositor (пипетка - на панели слева), а после щелкнув в окне эффекта кнопку "Use color picker | Использовать пипетку", либо щелкнув в окне эффекта кнопку "Color | Цвет" и перейдя в окно выбора цвета. Здесь вы можете использовать Hue и/или R, G, B параметры. 'Saturation' и 'Value' не играют роли, однако рекомендуется установить их на максимум для большей точности. 

Далее, в разделе "Key parameters | Параметры ключа" слайдером параметра 'Hue Tolerance' расширяем или сужаем диапазон оттенков, который будет вырезан из видео. Фон далеко не всегда однороден. Увеличивая значение параметра, мы расширяем диапазон и включаем него оттенки/тона, значительно отклоняющиеся от ключевого цвета. И наоборот.

 Min Brightness, Max Brightness - задаёт минимальные и максимальные пороговые значения диапазона яркости, по которому будет вырезан выбранный диапазон оттенков. Значения выше максим. и ниже миним. значений станут полностью непрозрачными. Т.о. вы можете включить или исключить из диапазона удаления более светлые или более тёмные участки изображения. Увеличьте значение Min Brightness, чтобы удалялся только фон, а не передний план. Уменьшите значение Max Brightness, если вместе с фоном удалились очень яркие участки (полезно при работе с очень тёмным фоном). 

 Saturation Offset, Min Saturation.
В идеале, фон должен быть высоко и равномерно насыщен. Если же фон далёк от идеала, эти настройки могут помочь. 
Оба параметра задают минимальный уровень насыщенности с которого начинается кеинг. 

Ниже этого уровня цвет будет непрозрачным, а выше - вырезан. Перемещение слайдера вправо задаёт более узкий диапазон значений насыщенности согласно которому будет удаляться цвет. Перемещение слайдера влево расширяет диапазон значений насыщенности. 'Saturation Offset' действует, только если 'Min Saturation' > 0. Ниже я ещё вернусь к 'Saturation Offset'.

Show Mask | Показать маску
Черным цветом отображаются прозрачные области, белым - непрозрачный передний план. 

Jerome пишет: "At any time, you can check what the Mask looks like by clicking on Show Mask. This will output a black and white image of the mask." Однако фактически, включив маску, мы получаем отображение непрозрач. участков белым, а вот прозрачные участки не отображ. чёрным, так и оставаясь прозрачными.
Поэтому в HV можно дополнительно применить к нижней дорожке плагин 'Background', чтобы вместо шахматного фона по умолчанию (в Cin-HV), фон был чёрного цвета. В прочих форках можно применить эффект "Gradient" и настроить там чёрный или достаточно заглушить нижележ. дорожку. Я уже предложил Адаму сделать возможность отключения прозрачности и включения чёрного фона непосредственно в плагине и он внёс предложение в список TODO
Далее, говоря о чёрном цвете маски, я подразумеваю, что пользователь воспользовался этим советом.

 
In Slope | Out Slope


После вышеприведённых операций, маска может иметь резкие, несглаженные ("жёсткие") края. Эти параметры могут помочь смягчить края, создав полупрозрачную зону. 'In Slope' создаёт и расширяет её от края непрозрачной части маски в сторону зоны кеинга, создавая таким образом полупрозрачный переход, а 'Out Slope', наоборот, создаёт и расширяет полупрозрачную зону от края прозрачной части маски в сторону непрозрачной части маски, удаляя по мере расширения из последней цвет.


 Alpha Offset | Сдвиг прозрачности

Производится смещение альфа-канала на определённую величину. По сути - это 'Fade', но Jerome назвал его по-другому. При значении = –100  всё изображение исчезает, при значении = 100  всё изображение становится полностью непрозрачным. При помощи ключ. кадров вы можете создать анимированный переход от –100 до 100 объекта переднего плана на фоне остальной композиции.

Spill light control (Spill Threshold, Spill Compensation)

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


'Spill Compensation' - задаёт величину десатурации. Чем выше значение, тем больше десатурация.


Spill Compensation действует, только если Spill Threshold > 0.
Вы можете попробовать стартовать с Spill Compensation = 100%, Spill Threshold = Min, а после постепенно увеличивать Spill Threshold.

 Если края маски остаются резкими, изрезанными примените эффект 'Blur | Размытие'. Включите размытие только для альфа-канала, задав Radius = 2 или 3. 

А сейчас вторая часть статьи.

Если сравнить плагин от Jerome c вышеупомянутым SpectraMatte, то становится ясно, что SM и мощнее, и богаче в настройках. Jerome не удалось тогда сделать полный аналог SM - оригинальный алгоритм сложнее и работает несколько по-другому. Цитирую комментарий Адама в коде: "He was trying to replicate the Avid SpectraMatte but the problem seems to be harder than he thought."

На новый этап плагин был выведен Adam Williams в Cinelerra-HV в феврале 2024. С моей подачи. Дело было так. Если вникнуть в работу параметра 'Saturation Offset', то возникает вопрос: "А в чём разница между ним и 'Min Saturation' ?"

Если вы смотрели скринкаст, то видели, что 'Saturation Offset' действует, только если значение 'Min Saturation' > 0. Оба задают миним. уровень насыщенности, но S.O. не может задать уровень меньший, чем заданный при помощи M.S.  Т.е. в связке S.O.-M.S.  M.S. может действовать как ограничитель. И всё ?

По идее, назначение параметра - смещать сектор кеинга вдоль линии повышения насыщенности. Однако похоже, что либо Jerome не доработал его, либо параметр поломан. Можно "выжать" с него следующее: установим 'In Slope' и 'Out Slope', затем выкрутим 'Saturation Min' на максимум. И немного увеличим 'Sat.Offset' как на скриншоте ниже. Т.е. его текущие возможности позволяют сделать что-то похожее на смещение. Но всё это выглядит неубедительно.

Я посмотрел как параметр работает в прочих форках - везде была/есть одна и та же картина. Вдобавок я столкнулся с тем, что Spill Threshold не работал должным образом в Cin-HV и <Cin-GG> (cin-gg сыпет <артефактами, кроме того, если нижняя дорожка отсутствует, то кеинг вообще не происходит>). Версия от Jerome должна работать <так (это cin-cv)>. Мной был записан скринкаст и отправлен Адаму (автору оригинальной HV). К письму я приложил собранную информацию по плагину (кто его сделал, когда, цели) и ссылки на офиц. документацию по SpectraMatte. Через несколько дней Адам сделал ряд багфиксов и нововведений, написав для плагина алгоритм аналогичный алгоритму SM. Цитирую комментарий Адама в коде: "The current implementation is most of the SpectraMatte algorithm.". 'Saturation Offset' был сначала удалён (с вердиктом 'confused' и прозрачным намёком поинтересоваться у Jerome что он хотел сказать миру этим параметром), а позже снова воскрес, но уже в новом качестве (этот скринкастик я сделал в ходе тестирования).

 Однако прежде чем приступить к рассмотрению нового алгоритма, рассмотрим плагин 'Color Swatch', который был одновременно  написан Адамом как аналог the SpectraGraph display in the SpectraMatte. 

Сначала применяется ColorSwatch, а после Ch.Key-HSV.
Для сворачивания/разворачивания дорожки в Cin-HV, помимо кнопки на панели управления, используются пункты контекстного меню дорожки: Collapse track / Expand track. В примерах ниже я использовал 
"конструкцию" как на скриншоте выше (дорожки пустые). Все примеры ниже сделаны в плагине 'Color Swatch' (плагин генерирует цветовой круг). Если вы решите добавить изображение на дорожку с уже применёнными к ней эффектами, то в меню 'Settings' следует предварительно снять галочку c пункта  'Edit effects', иначе все эффекты сдвинутся в сторону.

 'Color Swatch'

 'Color Swatch' содержит цветовой круг, представляющий цветовую модель HSV, в которой работает плагин, и позволяет наглядно видеть как работает 'ChromaKey HSV' и какие дальнейшие настройки необходимы с целью достичь желаемого результата. Цвет представлен аналогично цветовому кругу в HSV. Оттенок изменяется вдоль окружности. Однако есть специфика. 'Color Swatch' в Cinelerra-HV имеет два режима. 
В режиме 'Constant Brightness' цвета имеют насыщенность 100 в любой точке Color Swatch, а вдоль радиуса изменяется яркость от 0 (в центре) до 100 на периферии. Режим используется для настройки насыщенности.
В режиме 'Constant Saturation' цвета имеют яркость 100 в любой точке Color Swatch, а вдоль радиуса изменяется насыщенность от 0 (в центре) до 100 на периферии. Режим используется для настройки миним. и максим. яркости.
Оба режима могут использоваться для настройки прочих параметров.

 На скриншоте: слева 'C. Br.', справа 'C. Sat.'.



Если включить чекбокс 'Draw source', то на цветовой круг накладывается изображение в стиле вектороскопа, которое показывает распределение цветовых значений (включая яркость и насыщенность) в исходном изображении. Обычно показывается концентрация цвет. значений либо зеленого, либо синего, представляющих цвет удаляемого фона, а также распределение других цветовых значений объекта переднего плана, которые вы намерены сохранить.
Слайдеры 'Brightness', 'Saturation' устанавливают яркость и насыщенность с которой в 'Color Swatch' будет отображаться модель и накладываемое исходное изображение. Диапазон значений от 0 до 100. Назначение параметров - облегчить ориентирование и контроль над цветовыми данными в разных условиях. Т.е. эти параметры не влияют на конечный результат, который будет рендериться в файл.




Изменяя параметр 'Angle', мы можем вращать круг, что позволяет разместить в Compositor интересующий нас диапазон цвета полностью в пределах видимости, а также совместить его с футажом.

Сектор, представляющий выбранный цветовой диапазон, имеет форму клина и расширяется от центра к периферии. Диапазон оттенков, удаляемых кеером, также удаляется из ColorSwatch. Цвета, удалённые кеером, отображаются прозрачной "шахматкой" или чёрным (см. выше 'Show Mask'). Цвета, сохраняющиеся в изображении, отображаются полностью непрозрачными. Диапазон цвета, который эффект смешивает между фоном и передним планом, отображается как частично прозрачный. Результат изменения параметров хромакея немедленно отображается в ColorSwatch, что позволяет оценивать взаимосвязи между текущим результатом кеинга и цветовыми значениями исходного изображения.

Рассмотрим новый алгоритм. 

Hue Tolerance 

 Здесь всё как и в предыдущей версии: параметр задаёт диапазон оттенков ключевого цвета. Диапазон значений от 0 до 100. В Color Swatch - это ширина (или угол) между краями сектора кеинга (не путать со слайдером 'Angle' в Color Swatch !). Чем больше ширина (угол), тем больший диапазон оттенков включается в сектор кеинга. 

В примерах ниже выбран красный. Не используйте красный в качестве фона в сценах, где присутствуют люди.

На скриншоте ниже Color Swatch в режиме 'Constant Brightness':


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

Контролировать допуск можно, включив отображение маски: увеличивайте допуск до тех пор, пока чёрная часть маски не станет чистой, однородной. Однако слишком большой допуск может привести к потере детализации на краях маски, то-есть некоторые участки переднего плана станут частично прозрачными. К тому же, если передний план содержит отражённый от фона цвет, то вместе с удалённым отражённым цветом вы можете потерять детали переднего плана. Если же допуск недостаточен, то фоновый цвет может удалиться не полностью. 

Min. Brightness, Max. Brightness

Работают как и в предыдущей версии. Параметры воздействуют только на пиксели, которые уже подверглись действию 'Hue Tolerance'. Диапазон значений 0 - 100. 

На скриншоте ниже ColorSwatch переключён в режим 'Constant Saturation':


Saturation Start, Saturation Line

В прошлой жизни 'Saturation Start' назывался 'Saturation Offset' (я говорил о нём выше), а 'Saturation Line' - 'Min. Saturation'. Теперь оба работают аналогично 'Key Saturation' и 'Key Sat Line' (соответственно) в SM. 

При помощи этих параметров устанавливают уровень насыщенности с которого начинается кеинг (это их основное назначение, но не единственное - см. ниже).
Увеличение значения этих параметров ведёт к сохранению в композиции цвета низкой насыщенности, который исключается из диапазона кеинга. И наоборот, с понижением параметра всё больше низконасыщенного цвета удаляется.
Возникает вопрос: а в чём разница между 'Saturation Start' и 'Saturation Line' ? Сравним их работу при помощи 'Color Swatch' (режим 'Constant Brightness'). 

Диапазон значений параметра 'Saturation Start' (Key Saturation in SM) от 0 до 100. При этом '0' - это нулевая насыщенность (центр Color Swatch). Значение насыщенности, установленное параметром 'Saturation Start', определяет местоположение вершины сектора кеинга. Параметр позволяет смещать весь сектор кеинга в направлении от центра / к центру Color Swatch вдоль линии изменения насыщенности. 

Диапазон значений параметра 'Saturation Line' (Key Sat Line in SM) от 0 до 100.
При этом '0' для 'Saturation Line' - это текущее значение параметра 'Saturation Start' (Key Saturation in SM). При увеличении значения параметра изменяется форма сектора кеинга: вершина треугольника срезается и он превращается в трапецию. По мере увеличения значения параметра уменьшается высота трапеции, при этом ширина сектора кеинга не изменяется. С увеличением значения всё большее количество низконасыщенных оттенков исключаются из диапазона кеинга и остаются в изображении. Используйте этот параметр для тонкой настройки порога с которого начинается удаление низконасыщенных частей изображения. 

На скриншоте ниже (и далее) Color Swatch в режиме 'Constant Brightness':


На скриншоте ниже то же самое, но 'Desaturate only' = Off :


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

 Если включить отображение маски, то белый представляет участки переднего плана, а чёрный - фон, вырезанный кеером. Увеличение значения параметров 'Saturation Start' и 'Saturation Line' добавляет белого в маску (очищает белый в маске). Если в чёрных участках появляется серый, уменьшите значение параметра.
 Если удалились участки переднего плана, которые планируется оставить в композиции (такое происходит при заданных низких значениях параметра), увеличьте значение, чтобы восстановить их, но чрезмерное увеличение зачастую приводит к увеличению отражённого фонового цвета (ниже мы ещё вернёмся к этом моменту).
Кроме того, чрезмерное увеличение параметров 'Saturation Start' и 'Saturation Line' может привести к отмене результатов действия 'Hue Tolerance', а также снижает эффективность 'In Slope' и 'Out Slope'.

 Как я уже говорил выше, при повышении значения 'Saturation Start' (Key Saturation in SM) возможно ещё большее увеличение отражённого на передний план цвета (рассеивания на передний план). Поэтому 'Saturation Start', как правило, применяется в связке с 'Spill Saturation', который мы рассмотрим в следующем разделе.

 Spill Supression

Раздел 'Spill Supression' включает в себя параметры 'Spill Saturation' и 'Spill Angle' ('Spill Angle Offset' in SM), а также чекбокс 'Desaturate only' задача которых - подавление цвета, который отражается от фона на объект. Также применяются для удаления каймы, окантовки фонового цвета по краям объекта переднего плана.

При помощи комбинации этих двух параметров по обеим сторонам сектора кеинга создаётся охватывающая его дополнительная зона (the spill correction zone), в которой и происходит подавление отражённого цвета.

'Spill Saturation' задаёт уровень насыщенности, с которого начинается подавление рассеивания цвета. Значение параметра 'Spill Saturation' - это значение в точке на острие дополнительной зоны (the spill correction zone), охватывающей зону кеинга. Т.е. параметр определяет положение the spill correction zone. Данный параметр применяется в связке 'Saturation Start' и действует, только если 'Saturation Start' ('Key Saturation' in SM) > 0. Диапазон значений от 0 до 100, при этом за 0 этот параметр принимает текущее значение 'Saturation Start', а 100 - это нулевая насыщенность (центр Color Swatch).

 Если вы увеличили значение 'Saturation Start', то вероятно увеличилось и количество отражённого на объект фонового цвета, так как низконасыщенные оттенки были исключены из диапазона кеинга (потому что сектор кеинга сместился, а вместе с ним и зона подавления).
Поэтому одновременно увеличению 'Saturation Start', следует увеличивать значение 'Spill Saturation' на величину, эквивалентную увеличению значения 'Saturation Start'. Tаким образом, в данном случае, 'Spill Saturation' действует в противоположную сторону от 'Saturation Start' и возвращает низконасыщенные оттенки в диапазон подавления, удаляя тем самым нежелательный отраженный цвет, появившийся после задействования 'Saturation Start'.

Чем больше значение 'Spill Saturation', тем больше ключевого цвета меньшей насыщенности включается в диапазон подавления (или другими словами, с увеличением параметра в диапазон подавления попадают оттенки меньшей насыщенности). 
Чем меньше значение параметра, тем ближе 'Spill Saturation' к значению 'Saturation Start'. То есть, тем больше ключевого цвета меньшей насыщенности исключается из диапазона подавления. Если значение 'Saturation Start' = 0, 'Spill Saturation' параметр оказывает очень незначительное влияние.

Этот шаг необходим, только если вы изменяли параметр 'Saturation Start'; в остальных случаях параметр 'Spill Saturation' не играет роли.

 'Spill Saturation' применяется в комбинации с 'Spill Angle' ('Spill Angle Offset' in SM).

'Spill Angle' - это основной параметр для контроля пропуска цвета (подавления рассеивания). Он задаёт диапазон оттенков, подвергаемых коррекции (подавлению рассеивания цвета).
Диапазон задаётся путём увеличения или уменьшения угла сектора подавления рассеивания. По умолчанию угол сектора подавления рассеивания такой же как и сектора ключевого цвета (Hue Tolerance). 
Значение параметра 'Spill Angle' - это дополнительный угол, на который расширяется с обеих сторон сектор, заданный 'Hue Tolerance'. Диапазон значений от 0 до 100. Расширение добавляется по обе стороны сектора.
В большинстве случаев следует придерживаться низких значений 'Spill Angle', чтобы не затронуть цветовые значения, не требующие коррекции. Высокие значения параметра могут привести к нежелательной цветокоррекции переднего плана.

Подавление отражённого цвета происходит путём замены значений цвета, которые подверглись рассеиванию, цветами, которые не затронуты отражением.
Цветовые значения внутри зоны подавления отражённого цвета  заменяются значениями с участков за пределами зоны подавления отражённого цвета. 
Например, если ключевой цвет - зелёный, то значения зеленовато-синих оттенков заменяются значениями синего цвета, а зелёно-оранжевые пиксели заменяются значениями оранжевого.
Другой пример: частич. прозрачн. красный объект на синем фоне может содержать смесь синего и красного. Повышение значение параметра 'Spill Angle' удалит синий из сине-красных участков и заменит его чистым красным. Чем больше значение параметра, тем больше оттенков подвергнется коррекции. В большинстве случаев устанавливается относительно небольшое значение для этих параметров.
Имейте в виду, что высокие значения параметра, применённые к многоцветному изображению, могут затронуть насыщенность и цветовой баланс в участках где коррекция не требуется. Увеличивайте значение параметра, пока не начнёте видеть изменение цвета; затем отступите немного назад. Возможно, вам придётся снова откорректировать 'Spill Saturation' и найти оптимальное соотношение между этими 2-я параметрами.
Воспроизведите видео полностью, чтобы убедиться, что отражённый цвет удалён на всём протяжении.  

 Если включить параметр 'Desaturate only', то вместо замены цвет. значений будет происходить десатурация цвета. Это поведение исходного варианта от Jerome.

Ниже на составном скриншоте верхняя часть - 'Sat. Line' = 0, нижн. часть - 'Sat. Line' = 20 :

Ниже на составном скриншоте верхняя часть - 'Sat. Line' = 0, нижн. часть - 'Sat. Line' = 20 :


На следующих двух скриншотах Saturation Line = 0 :




 'In Slope' ('Inner Softness' в SM) и 'Out Slope' ('Outer Softness' в SM)

 Данные параметры регулируют градиент смешивания прозрачных и непрозрачных участков, то есть то, как будут смешиваться пиксели переднего плана и фона в финальной композиции. Или другими словами, градуированный переход между прозрач. и непрозрач. участками. 

 'In Slope' устанавливает спад (переход) от опакового до прозрачного в секторе кеинга (градиент расширяется от границ сектора кеинга в направлении значения ключевого цвета (от краёв внутрь сектора) ). В Color Swatch это отображается как участок плавного (градуированного) перехода между границами сектора и сплошным чёрным региона кеинга.

 Изменяя параметр, вы можете задать ширину спада (перехода). Диапазон значений от 0 до 100.
С увеличением значения параметра, цвета на границе сектора кеинга плавно переходят в фон, а не полностью удаляются. Когда 'In Slope' = 100, градиент расширяется внутрь от краёв сектора кеинга в направлении значения ключевого цвета на весь диапазон сектора кеинга. Чем меньше значение, тем уже градуированный переход и больше цветовых значений вблизи границ сектора кеинга будет полностью прокеено (удалено), а не смешено между перед. планом и фоном. Когда 'In Slope' = 0, градиент вообще не расширяется и = 0. 

Параметр также используется для восстановления или удаления частично прозрачных участков, пограничных с краями сектора кеинга. Увеличение параметра увеличивает опаковость частично прозрач. участков в секторе кеинга. Уменьшение параметра увеличивает прозрачность частично прозрач. участков в секторе кеинга и передний план может начать терять детали. Включите отображение маски и уменьшайте параметр до тех пор пока чёрный не станет полностью чёрным, а после немного откатитесь назад, чтобы точно настроить результат.

 'Out Slope' действует аналогично предыдущему, разница в том, что он устанавливает спад (полупрозрачный градуированный переход) для пикселей с внешней стороны сектора кеинга. От внешней границы сектора кеинга в сторону непрозрач. участков переднего плана создаётся полупрозрачный переход, который с увеличением параметра расширяется, превращая захватываемые им непрозрачные участки переднего плана в полупрозрачные.
В Color Swatch это отображается как участок за пределами сектора кеинга, где сплошной полностью непрозрачный цвет переднего плана заканчивается и начинается плавный (градуированный) переход к границе сектора.
Можно описать его работу и по-другому: от полностью непрозрачных участков переднего плана (за пределами сектора кеинга) создаётся полупрозрачный градуированный переход в направлении к границе сектора кеинга. С увеличением параметра место (полностью непрозрачное), где начинается переход, отодвигается в сторону переднего плана. 

 Изменяя параметр, вы можете задать ширину спада. Диапазон значений от 0 до 100. Чем меньше значение, тем уже градуированный переход и больше цветовых значений переднего плана полностью непрозрачны. Когда 'Out Slope' = 0, градиент вообще не расширяется и = 0. И наоборот, увеличение значения параметра уменьшает диапазон полностью непрозрачных цвет. значений переднего плана и расширяет полупрозрачный градуированный переход. 



То же самое, но с увеличением параметра 'Saturation Line':


Параметр также используется для настройки пикселей, лежащих сразу за границами (пределами) сектора кеинга. Увеличение параметра увеличивает прозрачность частично прозрач. участков с внешней стороны сектора кеинга. Уменьшение параметра увеличивает опаковость частично прозрач. участков с внешней стороны сектора кеинга.

 Если включить отображение маски, то видно, что с увеличением 'Out Slope', в белых участках переднего плана появляется серый. Настраивайте этот параметр в связке с 'In Slope', пока не найдёте баланс между тонкой детализацией и однородностью чёрного и белого в альфа-канале. 

То есть речь идёт о том, что, как и в предыдущей версии, после этапа восстановления низконасыщенных участков, маска обычно имеет резкие, жёсткие края. Поэтому вы увеличиваете значение 'Saturation Line' до тех пор, пока не восстановите низконасыщенные участки, а затем переходите на использование 'In Slope' и 'Out Slope', чтобы "смягчить" края, то-бишь создать градиентный полупрозрачный переход, а также задать частичную прозрачность участкам, которые по плану должны быть прокеены частично. Большая часть таких участков на данном этапе обычно полностью непрозрачны, поэтому увеличивайте 'Out Slope' и уменьшайте 'In Slope' до тех пор, пока альфа-канал (маска) корректно их не отобразит. Если участки переднего плана, которые должны быть полностью непрозрачны, стали вместо этого частично прозрачными, уменьшите значение 'Out Slope' и увеличьте значение 'In Slope'.
Если передний план не содержит частично прозрачных участков, требуется лишь минимальная регулировка этих параметров. 

Alpha Offset

 Alpha Offset в Cinelerra-HV - это аналог параметра 'Opacity' в SM.
Работает аналогично предыдущей версии от Jerome (как описано в 1-й части статьи). 

P.S.

Плагину нужен 'Matte Blur' (Blur, Erode, Dilate как в SM). Адам внёс предложение в TODO. Пока же для сглаживания резких краёв можно применять эффект 'Blur', установив 'Blur Alpha' = 2 - 3 и отключив размытие R, G, B.


От теории к практике (в Cinelerra-HV):


Cолнце и его лучи (справа на картинке с верхней дорожки) я убрал маской (такая техника называется 'Garbage mask'), создав её на верхней дорожке:


Настройки:






13 января, 2024

'Swap channels | Смена каналов' - Cinelerra

'Swap channels | Смена каналов' - это плагин для цветокоррекции в Cinelerra, позволяющий брать информацию (значение) для определённого канала из другого канала в том же самом изображении. Вы можете назначить разные источники для каждого из R, G, B, A каналов в том же самом изображении. Эффект работает как со статичными изображениями, так и с видео. UPD.: модификация плагина, представленная в Cin-HV, позволяет брать информацию для канала из другого изображения (см. в конце статьи).

Это один из самых первых плагинов Cinelerra. Он появился ещё в Broadcast2000, затем перекочевал в 2002 году в HV и ныне присутствует во всех версиях Cinelerra. Кроме того, в Cin-GG имеется несколько плагинов группы FFMPEG, выполняющих те же задачи.
 
The Swap channels (Shift Channels) effect  in Cinelerra

Cinelerra: the Swap Channels (Shift Channels) effect.


Рассмотрим стартовые настройки эффекта:

The Swap channels effect's menu - Cinelerra

В вертикальной колонке справа представлены выходные R, G, B, A каналы. В выпадающем меню, отдельном для каждого выходного канала, вы можете выбрать какой из R, G, B, A каналов исходного изображения станет источником для R, G, B, A выходного канала.
Математически, настройки по умолчанию выглядят так:

255, 0, 0 -> R
0, 255, 0 -> G
0, 0, 255 -> B
  Alpha   ->  A
У пользователей, знакомых с Adobe After Effects, глядя на Swap Channels в Cinelerra, может возникнуть состояние Déjà Vu. Да, чувства вас не обманывают - это тот самый 'Shift Channels', но в минималистичном варианте: среди опций здесь нет Luminance, Hue, Lightness, Saturation. А в остальном всё тоже самое и работает точно так же, только некоторые параметры называются по-другому.
Рассмотрим опции подробно, ибо детальное описание этих плагинов в интернете отсутствует. Я встречал лишь объяснения в армейском стиле "делай раз, делай два, повторяй за мной, думать вам не положено - за вас уже подумали":
Red - значение красного канала исход. изображения, которое будет в выходном канале.
Green - значение зелёного канала исход. изобр., которое будет в выход. канале.
Blue - значение синего канала исход. изобр., которое будет в выход. канале.
Alpha - альфа-канал исход. изображения.  Если эта настройка применена к цветовому каналу, то цвет будет отображаться в соответствии с картой прозрачности изображения. В полностью прозрачных участках цвет будет полностью прозрачным, в полностью непрозрачных участках цвет будет полностью непрозрачным. Промежуточные значения прозрачности также учитываются. В этих участках цвет пикселей будет смешиваться с цветом пикселей нижележащего изображения в соответствии с установленным режимом наложения. Однако это не всё ! Значение интенсивности цветового канала будет изменяться в диапазоне 0 - 255: от 0 в участках с нулевой прозрачностью до 255 - в полностью непрозрачных участках. И на основании этих изменений будет рассчитываться выходной цвет для всего изображения.
0 % - отменяет значение исходного канала и вместо него устанавливает для выходного R, G, B канала минимальное значение интенсивности (0). Установив 0 % для всех трёх R, G, B каналов, получим чёрное изображение на выходе (значение альфа-канала должно быть при этом либо 100%, либо Alpha). Для альфа-канала устанавливает полную прозрачность (0), при этом содержимое дорожки становится полностью прозрачным независимо от того какие настройки заданы для R, G, B каналов.

100 % - отменяет значение исходного канала и вместо него устанавливает для выходного R, G, B канала максимальное значение интенсивности (255). Для альфа-канала устанавливает полную непрозрачность (1) (опаковость). Установив 100 % для всех трёх R, G, B каналов, получим белое изображение на выходе (значение альфа-канала должно быть при этом либо 100%, либо Alpha).

Nota bene: Плагин, будучи применённым к временному кадру, сначала применяет установленное значение для альфа-канала, а после применяет цветовые значения согласно настройкам. Если для альфа-канала задано 100 %, то имеющиеся в исходном изображении прозрачные участки отображаются в выходном изображении непрозрачными чёрными (цветовые каналы заполняются zero = black). Если A=100 % и при этом для цветового канала(-ов) задано 100% (255), то такие участки принимают цвет согласно настройкам канала(-ов), для которого(-ых) установлено 100%. Плагин рассматривает исходное значение интенсивности цвета таких участков как (0, 0, 0) и, исходя из этого значения, рассчитывает выходной цвет.

Эффект Swap Channels позволяет перемешивать, дублировать каналы, конвертировать в Cinelerra цветное изображение в изображение в градациях серого (чёрно-белое). Как известно, это такое изображение, в котором значения каналов равны друг другу. Для этого следует установить для R, G, B каналов один и тот же исходный канал. В примере ниже в качестве источника взят канал Red:
#1
Grayscale image in Cinelerra.
#2
Grayscale with cinelerra.

Как работает плагин ? Если в некой XXX-точке исходного изображения значения RGB составляли, например, (R209, G160, B123), то после установки Red для всех выходных каналов, значения R, B каналов в этой XYZ-точке примут значение Red в этой точке, которое равно 209 и на выходе мы получим (R209, G209, B209). А если в некой YYY-точке значения в исход. изобр. были (R53, G48, B12), то на выходе они составят (R53, G53, B53). Таким образом, выходные каналы R, B принимают значения красного канала, заданного в настройках. Более светлые участки в изображении означают большее значение интенсивности цвета, более тёмные - меньшее. И вот вам уже градации серого.
Математически:
Исходное изображ.:                            После смены:
255, 0, 0 -> R                                        255, 0, 0 -> R => R
0, 255, 0 -> G                                        255, 0, 0 -> G => R
0, 0, 255 -> B                                        255, 0, 0 -> B => R

Вы можете проэксперементировать с каждым из каналов и выбрать наилучший вариант.
Давайте возьмём более простой пример:
#3

В исходном изображении в красной полосе значение цвета (R255, G0, B0). Меняем значение R255 и B0 на значение зеленого в красной полосе 0 - получаем чёрный цвет (R0, G0, B0). В зелёной полосе (R0, G255, B0) - аналогично меняем значения красного и синего каналов на значение зелёного 255 - получаем (R255, G255, B255), то-бишь белый цвет. Ну и в синей полосе (R0, G0, B255) меняем на 0 - получаем чёрный цвет (R0, G0, B0).

В примере ниже на верхней дорожке изображение без альфа-канала (взято отсюда) - обрезано инструментом 'Маска' в режиме 'Multiply' (в Compositor) , переведено в grayscale, а затем значение Red channel (в котором контрастность лучше, чем в остальных каналах) перенаправлено в Alpha channel (то есть красн. канал используется как Alpha Matte):
#4
cinelerra - grayscale, mask, color channel

Как это сделано:
#5
create grayscale and mask in cinelerra
Ещё пример (ниже).
Здесь всё выглядит просто. В настройках красный меняем на синий, синий на красный и на выходе соответственно:
исходный синий становится красным, зеленый остаётся зелёным, исходный красный становится синим:
#6
swap channels in cinelerra

А в следующем примере цветоизменение уже не очевидно и для новичка может быть непонятно:
#7

Давайте посмотрим на математич. формулу:

255 0   0         0  255 0   R
0   255 0        255 0   0   G
0     0  255       0 255 0   B

В левой и правой колонках горизонтальные строки - исходные каналы.
Сверху вниз значения R, G, B для каждой вертик. цветной полосы до и после применения эффекта. Результирующий цвет тоже удобно считать сверху вниз: Green, Magenta, Black.
Технику обмена значениями красного и синего каналов можно использовать при работе с инфракрасными изображениями и для создания эффекта инфракрасного изображения в Cinelerra:
#8
How to create an infrared effect with Cinelerra.
Математически:
Исходное изображ.:                                     После смены:
255, 0, 0 -> R                                        0,     0,   255 -> R => Blue
0, 255, 0 -> G                                        0,   255, 0     -> G => Green
0, 0, 255 -> B                                        255, 0,   0     -> B => Red

Углубимся в работу некоторых опций.
На скриншоте ниже я использую Cinelerra-HV - там фон отображается сеточкой.
Изображение 720x576 состоит из центральной части (3 цветных полосы) и прозрачной рамки вокруг центр. части:
#9


R=100%, G=G, B=B, Alpha=100%
Так как Alpha=100%, то выходное изображение будет полностью непрозрачным. R=100% означает, что в любой точке выходного изображения в том числе и бывших прозрачных участках R=255. G=G, B=B означает, что значения зеленого и синего в выход. изобр. = значениям в исходном. В красной полосе в исходном изобр. значения интенсивности цвета равны R255,G0,B0 и значит на выходе будет R255,G0,B0 = красный цвет. В зелёной полосе в исход. изображении R0,G255,B0 и на выходе будет R255,G255,B0 = жёлтый цвет. В синей полосе в исход. изобр. R0,G0,B255 и на выходе будет R255,G0,B255 = пурпурный цвет.
Вопрос: почему прозрач. рамка красного цвета, а не жёлтого или пурпурного ? Как я уже говорил выше, разбирая опции: Если для альфа-канала задано 100 %, то имеющиеся в исходном изображении прозрачные участки отображаются в выходном изображении непрозрачными чёрными. Если A=100 % и при этом для цветового канала(-ов) задано 100% (255), то такие участки принимают цвет согласно настройкам канала(-ов), для которого(-ых) установлено 100%. Плагин рассматривает исходное значение интенсивности цвета таких участков как (0, 0, 0) и, исходя из этого значения, рассчитывает выходной цвет.
В данном примере, прозрачные участки становятся непрозрачными чёрными согласно настройке Alpha=100%, далее плагин рассматривает их как R0,G0,B0 и исходя из этого значения, рассчитывает выходной цвет, применяя к ним настройки цвет. каналов => R255 (то-есть R=100%), а G, B = 0. Тот же самый результат можно получить, если переключиться в цветовую модель без альфа-канала RGB-8 bit.

Возьмём другое изображение - здесь будет более наглядно:
#10
cinelerra - color corrections - shift channels

Обратите внимание ! Размер оригинального изображения = 1280x720. Project size (canvas size) = 1980x1080. Temporary size (track size) = 1980x1080. Временный кадр (temporary) состоит из оригин. изображения (1280x720) и прозрачных полос вокруг, добавляемых программой до размеров холста. В Cinelerra эффект применяется ко всему временному кадру (temporary), что мы и видим на холсте в Compositor. Для простоты усвоения материала новичками я везде выше говорил о "исходном изображении". Но, строго говоря, это неверно. Вы теперь понимаете почему ? Почитайте в блоге материалы по тегу "canvas".

Ещё пример: #11


Заданные настройки: R=Alpha, G,B=100%, Alpha=100%
Центр. часть - белая, а рамка вокруг - циановая. Почему ?
Так как задано Alpha=100%, то альфа-канал выходн. изображ. полностью непрозрачный. Прозрачн. участки стали черными и, как я говорил выше, далее плагин рассматривает их как R0,G0,B0. Каналы G, B имеют максимальное значение 255. Красный выходной канал использует значения альфа-канала исход. изобр.: значение альфа-канала в центр. части исход. изображения = 1, а в прозр. рамке вокруг центр. части = 0. Таким образом, в центр. части выходного изображения R=255 и вместе с G255+B255 составляют белый цвет. А в рамке вокруг центр. части значение красного = 0 (так как в исход. изобр. значение альфа-канала там = 0). Поэтому прозрачная рамка вокруг центр. части цианового цвета: Cy = R0+G255+B255. Если установить и для зелёного выходного канала источником альфа-канал, то рамка будет синего цвета.
 
В примере выше альфа-канал имеет два значения.
А как работает плагин, если изображение имеет промежуточные значения прозрачности ?
А вот так:
#12
Alpha channel in cinelerra

Здесь я использую предварительно модифицированную в GIMP картинку - добавлен градиент прозрачности. Сверху вниз прозрачность убывает.
В Cinelerra в настройках эффекта для выходного изображ. установлено A=100. Для Red задано 'Alpha'. G, B = исходным значениям. И дальше как уже описано выше.
В верхней части красной, зеленой и синей полос значение R=0 так как значение альфа-канала там = 0 и следовательно выходной цвет в красн. полосе R0,G0,B0 , а в зеленой и синей полосах цвет сохраняет свои исходные значения R0,G255,B0 , R0,G0,B255. 
В нижней части красн. полосы мы видим R255,G0,B0 , зелёной полосы исход. изображения - жёлтый R255,G255,B0 , синей исходного - пурпурный R255,G0,B255.
Математика понятна ? Значение красного в каждой полосе исходного изобр. постепенно изменяется в соответствии со значением 'Alpha' (градиентом прозрачности) от 0 до 1, т.е. от 0 до 255. И результирующий цвет в выходном изображении пересчитывается соответственно.
Для наглядности (примерная схема):
верх (A=0):     R0, G0,     B0 | R0,    G255,  B0 | R0,     G0, B255
сер. (A≈50): ≈ R130, G0, B0 | R130, G255, B0 | R130, G0, B255
низ (A=100):   R255, G0, B0 | R255, G255, B0 | R255, G0, B255

И вот ещё парочка контрольных тестов на понимание происходящего:
#13

Почему в верхнем примере: зелёный квадрат, т.е. чёрные полосы стали зелёными, а ниже - чёрная, зелёная, чёрная полосы ?
0% для красного и синего каналов отменяет их исход. значение и устанавливает 0 - это значит, что в любой точке выходного изображения R=0, B=0. В верх. примере зелёный изменяется в соответствии со значением альфа, аналогично схеме выше. В нижнем всё просто - для выходных каналов берётся фиксированное исходное значение зелёного 255, а для красного и синего задан 0. В красной полосе в исход. изобр. было R255,G0,B0, а так как для выходного изображ. мы задали R=0, то значит на выходе будет R0,G0,B0 - чёрный. В синей аналогично. Ну и в зелёной исходной - для выхода установлено фиксированное исходное значение зелёного 255, а для красного и синего у нас задан 0.
Стремился разложить предельно понятно, на пальцах.

Эффект Swap Channel имеет смысл использовать в комбинации с другими эффектами Cinelerra. В этом случае нам открываются более широкие возможности.
Например, eсли вы решили создать alpha track matte key effect in Cinelerrra, но хотите использовать в качестве alpha track matte (подложки) не альфа-канал, а какой-то другой канал, который определяет требуемую область прозрачности лучше, чем альфа-канал (или в случаях, когда исходное изображение не содержит альфа-канала), примените Swap Channels и перенаправьте с его помощью желаемый канал в альфа-канал, а после примените эффект 'Reroute | Перенаправление' в режиме 'Alpha Replace', перенаправив Alpha Matte с одной дорожки на другую и создав таким образом Alpha Track Matte.


Давайте что-нибудь сделаем. На нижней дорожке - чёрно-белая картинка без альфа-канала 
$ pngcheck OK: ./wmn.png (720x576, 24-bit RGB, non-interlaced, 97.2%).

Обращайте внимание на Overlay modes, значение Fade.
Используемый Font: Dubiel, Font Color: #FF1C56
#14

Color correction effects in Cinelerra: shift (swap) color channels, invert color channels, blur color channels.

Те же самые настройки, но с другой картинкой:
#15
Swap color channels in Cinelerra

В следующих примерах задействован уже знакомый читателям по предыдущим публикациям эффект 'Reroute |Перенаправление':                  

#16
(здесь я откорректировал при помощи инстр. 'Camera' участки изобр. с верх. дорожки, которые попадают в альфа-маску):

Cinelerra - swap color and reroute color channel to alpha channel

То же самое, но с другими настройками:
#17

cinelerra - shift color channels

Усложним немного конструкцию:
#18

Cinelerra: a mask on one colour channel and then to change that into a masking track

Сменим режим наложения:
#19

Cinelerra: a mask, colour channel, a masking track

Сменим настройки: 
#20

Cinelerra - replacing one channel with a different channel from the other layer.

Это не всё, что можно сделать с этим плагином. Возможно позже добавлю ещё что-нибудь.
P.S.
Вышеприведённые примеры сделаны в Cinelerra-CV 2.3 на Lubuntu 18.04 64-bit.
C Cinelerra-HV 8 совместимы примеры, в которых отсутствует эфф. 'Reroute' (в HV нет этого эффекта), но задействовав 'Swap Channels' в технике 'shared effects' вы сможете получить аналогичные результаты. Кроме того, смотрите обновление внизу статьи.
C Cinelerra-GG примеры технически совместимы, но с рядом оговорок. 
Во-первых, некоторые режимы работают наоборот.
Например:
Subtract overlay mode
- в HV, CV:
static const char *blend_subtract_frag = 
" result_color.rgb = dst_color.rgb - src_color.rgb;\n";
- в GG  - наоборот:
58 // SUBTRACT     [(Sa - Da), (Sc - Dc)]

Divide overlay mode
- в HV, CV*: dst_color.rgb / src_color.rgb
- в GG - наоборот [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) +  Sc / Dc] и с ним в cin-gg проблемы (даже с учётом переворота).

Поэтому если вы захотите воспроизвести примеры, где задействован Subtract overlay mode, вам потребуется, вероятно, перевернуть всё "вверх ногами".
Во-вторых, в этом форке, похоже, есть ряд проблем как с режимами наложения, так и с альфа-каналом (какие-то невнятные глюки). Я говорил об этом в статье о объёмных титрах в Cinelerra, где привёл ряд скриншотов с описанием проблем GG, а позже добавил ряд вариантов обходных путей (статью читать с конца).

#14, #15 - воспроизводятся.
#16  - воспроизводится, но несколько не то. Addition не выдаёт результат как в CV и его потребуется отключить. Переворот не требуется. А если перевернуть, то получается ерунда.
#17 - ерунда какая-то получается..
#18 - нормально воспроизводится.
#19 и #20 (там Subtract) - я пробовал воспроизвести и как в CV, и с переворотом  -> или вообще чёрти-что, или только часть требуемого результата.

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

P.P.S
В Cinelerra-CVE этот плагин получил новую опцию '50%':


Но этот экспериментальный форк по-прежнему находится в "экспериментальном состоянии" и для работы не пригоден (в том числе и потому, что многие необходимых для работы опции и настройки были удалены или урезаны). А вот для портирования ряда нововведений фундаментального плана его можно и нужно рассматривать. Но заниматься этим должны специалисты, понимающие что они делают - код сложный.
P.P.S.
Добавил в руководство по Cinelerra-CV описание плагина на английском. В РФ, РБ сайт доступен через VPN/proxy (заходите через Opera).
UPD.: В февр. 2024 Адам модифицировал эффект в


С этой модификацией эффект в Cinelerra HV  работает аналогично the 'Set channels' effect in Adobe After Effects и позволяет брать информацию (значение) для определённого канала из другого канала другого изображения, находящегося на другой дорожке. Модификацию следует применять в соответствии с техникой 'Shared effects'. Дорожка, к которой эффект применён как основной,  рассматривается как основная (воспринимающая) (0), а дорожка, к которой он применён как "shared effect" - это Source track (источник).