Эта публикация представляет способ создания псевдо-3D титров в Cinelerra HV/CV. Ранее я уже обращался к этой теме и предлагал в < этой статье > варианты для Cin-CV/GG .
25 марта, 2025
Cinelerra — how to create "fake" 3d text effect.
04 января, 2025
Time displacement in Cinelerra: Time Front effect | Смещение во времени

Плагин является аналогом Time Displacement effect in Adobe After Effects. Это временно́й варпинг.
Аналогично TD in AAE, Time Front эффект использует карту смещения, значения яркости/прозрачности пикселей карты и на основании этих значений производит расчёт смещения пикселей во времени, искажая тем самым изображение.
В основном эффект применяется при работе с кадрами, снятыми статичной камерой (при двигающейся камере сложнее обеспечить плавность движения), когда хотят придать постепенное ускорение или замедление отдельным частям изображения. То есть возможно замедлить течение времени в определенной пространственно-временной области и ускорить его в другой области.
Некоторые более сложные вещи (не все из них можно сделать с помощью этого плагина) представлены <здесь> .
"Time Front" - это мультитрековый, работающий в режиме реального времени видеоэффект. Эффект работает как с видео, так и со статич. изображениями.В настройках программы должна быть выбрана цветовая модель с альфа-каналом. Иначе "кина не будет".
Пройдёмся подробнее по режимам (их всего три).
Карта смещения накладывается на изображение. Диапазон значений интенсивности от 0 до 255.
На основании значений уровней интенсивности пикселей (ступенчатых уровней яркости (градаций серого)) производится искажение изображения путём смещения пикселей.
Участки изображения в текущем кадре заменяются пикселями из кадров, предшествующих текущему кадру, в той же позиции в том же самом изображении или предшеств. изображении (в зависимости от величины TimeRange).
Чем больше значение интенсивности, тем больше смещение.
Максимальная величина смещения (в кадрах, в форке Cin-CVE в секундах) задаётся параметром 'Time Range | Максим. диапазон смещения'.
Участки изображения, соответствующие пикселям карты со значением интенсивности 0 (чёрный), не получают никакого смещения. Участки изображения, соответствующие пикселям карты со значением интенсивности 255 (белый), получают максимальное смещение: такие участки заменяются пикселями из кадра, заданного параметром TimeRange. Участки изображения, соответствующие пикселям карты с промежут. значениями интенсивности (оттенки серого) также получают соответствующее смещение, но меньшее, чем максимальное. Более светлые пиксели карты вызывают большее смещение, более тёмные - меньшее. Т.е. замена производится из кадров, входящих в диапазон Time Range.
Для создания и настройки карты предлагается несколько параметров.
Для отображения и настройки карты смещения поставьте галочку в чекбоксе 'Show grayscale for tuning'.
С помощью параметров Inner/Outer Radius настраивается ширина и позиция сегментов градиента карты смещения. Таким образом, вы можете установить участки кадра, подлежащие замене.
По умолчанию линейный градиент идёт сверху вниз.
Параметр Angle изменяет угол поворота сегментов (по часовой и против часовой стрелки) путём задания направления.
Параметр X:Y позволяет позиционировать центр радиального градиента по осям X, Y.
Параметр Rate задаёт скорость периода между сегментами: Linear, Logarithmic, Squared.
Как я уже говорил выше, Time range определяет величину максимального смещения (диапазона), в котором будет происходить замена содержимого кадров. Однако этот параметр определяет лишь максим. границу. Величина смещения конкретного пикселя зависит от значения интенсивности соответствующего ему пикселя карты смещения. При помощи этого параметра вы можете задать число ступеней (сегментов) в карте смещения, и т.о. непрямым способом влиять на ширину и позицию сегментов. То есть речь идёт о выборе временно́го диапазона.
Параметр Inversion: инвертирует значения интенсивности пикселей карты. Черный становится белым, белый - чёрным. Промежуточные значения также учитываются.
Независимо от выбранного режима, для замены пикселей текущего кадра плагин использует пиксели из кадров, расположенных слева от курсора (предшествующие текущему кадру). Пиксели в слое, соответствующие более ярким областям карты смещения, заменяются пикселями в тех же областях, но на указанное количество кадров (секунд в cin-cve) назад во времени. Аналогично, пиксели в слое, соответствующие более темным областям карты смещения, заменяются пикселями в тех же областях, но на указанное количество кадров (секунд в cin-cve) вперед по времени.
Но в любом случае, области для текущего кадра берутся из другого кадра (времени) до курсора воспроизведения (до текущего кадра). Плагин никогда не использует пиксели из кадров, расположенных справа от курсора (текущего кадра), в отличие от Time Displacement effect in After Effects, где текущий кадр может заменяться пикселями как из предшествующих ему, так и из последующих кадров.
Рассмотрим следующий режим.
Alpha as timefront - Прозрачность как карта смещения.
Особо тут рассматривать нечего, ибо всё работает аналогично вышеописанному.
Плагин не расшаривается на другую дорожку. Временна́я карта смещения генерируется на треке, к которому плагин применён как основной (не расшаренный).
Генерируемая в этом режиме карта смещения тоже представляет собой изображение в градациях серого.
Разница с предыдущим режимом в том, что карта смещения строится на основании значений прозрачности изображения к которому применён эффект.
При этом пиксели карты с максим. значением интенсивности (255) (белый) соответствуют полностью непрозрачным пикселям оригинального изображения, а пиксели карты со значением интенсивности = 0 соответствуют полностью прозрачным пикселям оригинального изображения.
То есть полностью прозрачные участки ориг. изображения отображаются в карте чёрным, а полностью непрозрачные -- белым. Промежуточные значения прозрачности отображаются градациями серого.
В этом режиме параметры для настройки карты отсутствуют.
И последний режим:
Other track as timefront -- Карта смещения - другой трек (даже более точнее будет 'Другой трек как временна́я карта смещения' ('Other track as a Temporal Displacement Map').
В этом режиме карта смещения строится либо на основании значений уровней интенсивности пикселей (ступенчатых уровней яркости (градаций серого)), либо на основании значений прозрачности (альфа-маска).
Однако в качестве карты используется стороннее изображение на другой дорожке.
То есть плагин должен быть расшарен на другую дорожку с размещенным на ней изображением, которое будет использовано в качестве карты смещения. Это может быть как статическое изображение (градиент серого, градиент прозрачности), так и видео с альфа-каналом. Вы можете использовать разного рода логотипы, а также титры, созданные на пустой дорожке в Cinelerra.
Расчёт смещения аналогичен вышеописанному. На скриншоте ниже на нижней дорожке расположено изображение с градиентом прозрачности. Time range = 3 .
Теперь убедитесь, что курсор расположен в границах материала на верхней дорожке и сделайте щелчок ПКМ по нижней V1 - дорожке. В открывшемся окне выбираете в средней колонке (Shared effects | Общие эффекты) эффект 'Time Front | Смещение во времени'. ЛКМ по зелёной галочке. Эффект применился к V1 как расшаренный (ведомый).
Можно и по-другому.
Создаёте .., размещаете ... как описано выше. Теперь подымаете глаза к верхнему краю главного окна, щелчок ЛКМ по меню 'Video', в открывшемся меню ЛКМ по пункту 'Attach effect... | Применить эффект', в открывшемся окне выбираете эффект, внизу окна устанавливаете галочку в чекбоксе 'Attach single stanalone and share others | Применить как общий к остальным трекам'. ЛКМ по зелёной галочке. Окно закроется, эффект применится к V1 как расшаренный (ведомый). Если нажмёте кнопку 'Apply', то эффект применится, но окно останется открытым и вы сможете продолжить применять другие эффекты.
Карту смещения можно сделать в GIMP или в Cinelerra при помощи плагинов 'Gradient' и 'Histogram'.
Эффект 'Blur' в комбинации с эффектом 'Invert video' можно использовать для создания эффекта стеклянных, объёмных титров.
При помощи ключевых кадров можно изменять параметры эффекта с течением времени (динамическая автоматизация эффекта). Например, может быть интересным анимировать карту смещения, подвергнув динам. автоматизации параметры 'Inner/Outer Radius'.
Чем больше частота кадров в видео, тем более плавные сглаженные переходы будут между сегментами.
Однако TimeFront эффект довольно медлен и ресурсоёмок. Используйте прокси. И/или материал, сжатый нормальными монтажными кодеками (mjpeg, dnxhd ... ), обеспечивающими покадровое сжатие.
Примеры ниже сделаны в Cinelerra-HV.
GIFs получились великоваты, поэтому дайте время им загрузиться, чтобы воспроизведение было плавным и быстрым.
Простой пример работы эффекта в режиме 'Radial'. YT-video на моём канале. Первая часть GIF показывает вариант с отключенным 'эффектом 'Reverse video' (= Off). Вторая часть - 'Reverse video' = On.
***
Ниже используется комбинация эффектов. Эту комбинацию использовал Herman Robak в < этом > YT-video (Demo 1). Я приводил ссылку на < проект > в начале статьи.
13 января, 2024
'Swap channels | Смена каналов' - Cinelerra
Это один из самых первых плагинов Cinelerra. Он появился ещё в Broadcast2000, затем перекочевал в 2002 году в HV и ныне присутствует во всех версиях Cinelerra. Кроме того, в Cin-GG имеется несколько плагинов группы FFMPEG, выполняющих те же задачи.
Рассмотрим стартовые настройки эффекта:
В вертикальной колонке справа представлены выходные R, G, B, A каналы. В выпадающем меню, отдельном для каждого выходного канала, вы можете выбрать какой из R, G, B, A каналов исходного изображения станет источником для R, G, B, A выходного канала.
Математически, настройки по умолчанию выглядят так:
0, 255, 0 -> G
0, 0, 255 -> B
Alpha -> A
Green - значение зелёного канала исход. изобр., которое будет в выход. канале.
Blue - значение синего канала исход. изобр., которое будет в выход. канале.
Alpha - альфа-канал исход. изображения. Если эта настройка применена к цветовому каналу, то цвет будет отображаться в соответствии с картой прозрачности изображения. В полностью прозрачных участках цвет будет полностью прозрачным, в полностью непрозрачных участках цвет будет полностью непрозрачным. Промежуточные значения прозрачности также учитываются. В этих участках цвет пикселей будет смешиваться с цветом пикселей нижележащего изображения в соответствии с установленным режимом наложения. Однако это не всё ! Значение интенсивности цветового канала будет изменяться в диапазоне 0 - 255: от 0 в участках с нулевой прозрачностью до 255 - в полностью непрозрачных участках. И на основании этих изменений будет рассчитываться выходной цвет для всего изображения.
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) и, исходя из этого значения, рассчитывает выходной цвет. См. примеры #9 #10 #11.
Эффект Swap Channels позволяет перемешивать, дублировать каналы, конвертировать в Cinelerra цветное изображение в изображение в градациях серого (чёрно-белое). Как известно, это такое изображение, в котором значения каналов равны друг другу. Для этого следует установить для R, G, B каналов один и тот же исходный канал. В примере ниже в качестве источника взят канал Red:255, 0, 0 -> R 255, 0, 0 -> R => R (White)
0, 255, 0 -> G 255, 0, 0 -> G => R (Black)
0, 0, 255 -> B 255, 0, 0 -> B => R (Black)
В исходном изображении в красной полосе значение цвета (R255, G0, B0). Так как в настройках для красного и синего установлен зелёный, а значение зелёного в красной полосе исход. изобр. =0, то меняем значение R255 и B0 на значение зеленого в красной полосе = 0 и в результате на выходе получаем чёрный цвет (R0, G0, B0). В зелёной полосе (R0, G255, B0) - аналогично меняем значения красного и синего каналов на значение зелёного 255 - получаем (R255, G255, B255), то-бишь белый цвет. Ну и в синей полосе (R0, G0, B255) меняем на 0 - получаем чёрный цвет (R0, G0, B0).
Здесь всё выглядит просто. В настройках красный меняем на синий, синий на красный и на выходе соответственно:
исходный синий становится красным, зеленый остаётся зелёным, исходный красный становится синим:
Давайте посмотрим на математич. формулу:
255 0 0 0 255 0 R0 255 0 255 0 0 G
0 0 255 0 255 0 B
Сверху вниз значения R, G, B для каждой вертик. цветной полосы до (слева) и после (справа) применения эффекта. Результирующий цвет тоже удобно считать сверху вниз: Green, Magenta, Black.
Более детально. В исходном изображении в красной полосе значение цвета (R255, G0, B0). Так как в настройках для красного установлен зелёный, а значение зеленого в красной полосе = 0, то меняем значение R255 в красной полосе на значение зеленого в красной полосе = 0 . Так как в настройках для зелёного установлен красный, а значение красного в красной полосе = 255, то меняем значение G0 на значение красного в красной полосе = 255 . Так как в настройках для синего установлен зелёный, а значение зелёного в красной полосе = 0, то значение B0 не изменяется и остаётся = 0 . В результате красная полоса на выходе превращается в зелёную: (R255, G0, B0) => (R0, G255, B0). Аналогично ведётся расчёт в остальных полосах.
Технику обмена значениями красного и синего каналов можно использовать при работе с инфракрасными изображениями и для создания эффекта инфракрасного изображения в 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 цветных полосы) и прозрачной рамки вокруг центр. части:
Так как 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 = пурпурный цвет.
В данном примере, прозрачные участки становятся непрозрачными чёрными согласно настройке Alpha=100%, далее плагин рассматривает их как R0,G0,B0 и исходя из этого значения, рассчитывает выходной цвет, применяя к ним настройки цвет. каналов => R255 (то-есть R=100%), а G, B = 0. Если установить 100% и для Blue, то красный везде станет пурпурным. Тот же самый результат можно получить, если переключиться в цветовую модель без альфа-канала RGB-8 bit.
Обратите внимание ! Размер оригинального изображения = 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. Если установить и для зелёного выходного канала источником альфа-канал, то рамка будет синего цвета.
А как работает плагин, если изображение имеет промежуточные значения прозрачности ?
А вот так:
Здесь я использую предварительно модифицированную в GIMP картинку - добавлен градиент прозрачности. Сверху вниз прозрачность убывает.
В Cinelerra в настройках эффекта для выходного изображ. установлено A=100. Для Red задано 'Alpha'. G, B = исходным значениям. И дальше как уже описано выше.
В верхней части красной, зеленой и синей полос значение R=0 так как значение альфа-канала там = 0 и следовательно выходной цвет в красн. полосе R0,G0,B0 , а в зеленой и синей полосах цвет сохраняет свои исходные значения R0,G255,B0 , R0,G0,B255.
Математика понятна ? Значение красного в каждой полосе исходного изобр. постепенно изменяется в соответствии со значением 'Alpha' (градиентом прозрачности) от 0 до 1, т.е. от 0 до 255. И результирующий цвет в выходном изображении пересчитывается соответственно.
Для наглядности примерная схема (3 вертик. цв. полосы):
сер. (A≈50): ≈ R130, G0, B0 | R130, G255, B0 | R130, G0, B255
низ (A=100): R255, G0, B0 | R255, G255, B0 | R255, G0, B255
И вот ещё парочка контрольных тестов на понимание происходящего:
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.
Давайте что-нибудь сделаем. На нижней дорожке - чёрно-белая картинка без альфа-канала
В следующих примерах задействован уже знакомый читателям по предыдущим публикациям эффект 'Reroute |Перенаправление':
Это не всё, что можно сделать с этим плагином. Возможно позже добавлю ещё что-нибудь.
HV 4.6.1 (and CV) actually uses: (Sc > 0 ? Dc / Sc : 1)
Cin-GG actually uses: (Dc > 0 ? Sc / Dc : 0)
So, none of these look like Gimp. But Divide is a bit squirrelly.
It can fail on a per pixel basis because of divide by zero. I prefer src (top track) / dst (btm track) with divide by zero as black (not white). I think this is the way most would like to see it work, since it is a stack of operations, and it easier to work up from zero, than down from 1.
Но этот экспериментальный форк по-прежнему находится в "экспериментальном состоянии" и для работы не пригоден (в том числе и потому, что многие необходимых для работы опции и настройки были удалены или урезаны). А вот для портирования ряда нововведений фундаментального плана его можно и нужно рассматривать. Но заниматься этим должны специалисты, понимающие что они делают - код сложный.
С этой модификацией эффект в Cinelerra HV работает аналогично the 'Set channels' effect in Adobe After Effects и позволяет брать информацию (значение) для определённого канала из другого канала другого изображения, находящегося на другой дорожке. Модификацию следует применять в соответствии с техникой 'Shared effects'. Дорожка, к которой эффект применён как основной, рассматривается как основная (воспринимающая) (0), а дорожка, к которой он применён как "shared effect" - это Source track (источник).
Чтобы получить интересующие меня участки изображения внутри букв, я перевернул картинку на дорожке 'Video 3' эффектом 'Flip' и отрегулировал её положение инструментом 'Camera' дорожки 'Video 3'. Эффект 'Scale' дорожки 'Video 2' масштабировал картинку, убрав ненужные части за пределы холста. Шрифт: 'Glamoure'/'Liberation Serif'. Cin-HV не видит OTF-fonts, поэтому самое простое решение - при помощи онлайн-конвертера конвертировать шрифт в TTF, а затем разместить его в каталоге /home/user/.fonts .
Коротенький < ролик >. И ещё раз: пример на картинке выше сделан в Cin-HV. В прочих форках используйте для таких целей эффект 'Reroute'. Схема будет такая: