04 января, 2025

Time displacement in Cinelerra: Time Front effect | Смещение во времени

 В 2006 году один из разработчиков Cinelerra CV Andraž Tori (Slovenija) написал для программы самый загадочный и малоизвестный в сообществе видеоэффект — "великий и ужасный" 'Time Front | Смещение во времени'.
Написал, < спросил > заинтересован ли кто-нибудь в документации к нему.. Энтузиазма в должной мере никто не проявил, и остался плагин недокументированным.
Ныне эффект присутствует во всех версиях программы. При этом полное отсутствие инфoрмации по нему. Считанные единицы заграничных пользователей (2-3) в прошлом ещё < понимали > что это и как с ним работать. Связи с ними нет, их знания были утеряны. Немногие артефакты этой исчезнувшей цивилизации можно посмотреть в < этом > плейлисте на моём YT-канале (внизу плейлиста теперь есть и мои видеоролики). За 18 лет — ни одного видеоучебника или how-to. Из ныне активных пользователей —  никто про эффект ничего не знает. Из старой гвардии, с кем можно войти в контакт по e-mail — тоже никто. Даже сам Andraž, давно отошедший от дел, напрочь забыл как работать c эффектом.
UPD.: Адам сделал краткое < описание > плагина.


Заинтриговал ? Тогда поехали. 
В ходе выяснения как работает этот плагин и сбора информации для написания этой статьи и < статьи на англ. > для руководства CV мне нередко приходилось действовать надёжным, проверенным методом .

Вдохновлялся Andraž идеями из < этой > статьи о варпинге (на англ.). Вы тоже сходите почитать — там познавательно и интересно. Главная идея состоит в возможности манипулирования временным потоком видеоряда, в результате разные участки видео перемещаются во времени с разной скоростью, и эти скорости также можно изменять. Плагин заставляет время по-разному протекать в разных участках видеопоследовательности, создавая в результате новую реальность.

 Спешу "разинтриговать" вас — всё сложное в Cinelerra на самом деле просто.
Плагин является аналогом Time Displacement effect in Adobe After Effects. Это временно́й варпинг.
Аналогично TD in AAE, Time Front эффект использует карту смещения, значения яркости/прозрачности пикселей карты и на основании этих значений производит расчёт смещения пикселей во времени, искажая тем самым изображение.

Смещение пикселей производится путём замены пикселей в текущем кадре пикселями в той же самой позиции, но из предшествующих кадров (пикселями на заданное число кадров назад на шкале времени). Таким образом плагин позволяет манипулировать положением пикселей изображения, исходя из значений пикселей в карте смещения. Карта смещения может генерироваться на основной дорожке, к которой применён эффект, а в режиме 'Other track as timefront' может быть сторонним изображением (изображение в оттенках серого или альфа-градиент), размещённым на отдельной дорожке. В последнем случае необходимо использовать технику 'Shared effect | Общий эффект'.

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

 Эффект позволяет реализовать интересный способ создания титров, когда текст встраивается поверх динамической текстуры (клубящегося дыма, горящего пламени, текущей воды, морских волн, облаков...). Таким образом, вы можете анимировать титры, логотипы.. Плагин позволяет смоделировать Slit-Scan эффект — традиционную технику щелевого сканирования, которая захватывает различные этапы движущегося изображения во времени.

Некоторые более сложные вещи (не все из них можно сделать с помощью этого плагина) представлены <здесь> .

"Time Front" - это мультитрековый, работающий в режиме реального времени видеоэффект. Эффект работает как с видео, так и со статич. изображениями.

В настройках программы должна быть выбрана цветовая модель с альфа-каналом. Иначе "кина не будет".

Пройдёмся подробнее по режимам (их всего три).


 Linear & Radial 
В этом режиме плагин не расшаривается на другую дорожку. Временна́я карта смещения генерируется на треке, к которому плагин применён как основной (не расшаренный). Генерируемая карта смещения представляет собой изображение в градациях серого. Это ступенчатый градиент, имеющий очевидные дискретные переходы от одного тона к другому.
В Linear создаётся линейный, в Radial режиме - радиальный градиент.


Как работает карта ?

Карта смещения накладывается на изображение. Диапазон значений интенсивности от 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 .





Как создать 'shared effect' (как "расшарить" эффект) ?

Создаёте две дорожки:  V1 - нижняя дорожка, V2 - верхняя. Располагаете на верхней V2 материал, с которым будете работать. Располагаете на нижней V1 карту смещения. V2 - это основная дорожка (ведущая). V1 - ведомая.  ПКМ по V2 - дорожке и в контекстном меню выбираете "Attach effect | Применить эффект". В открывшемся окне выбираете 'Time Front | Смещение во времени'. ЛКМ по зелёной галочке. Эффект применился.
Теперь убедитесь, что курсор расположен в границах материала на верхней дорожке и сделайте щелчок ПКМ по нижней 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 ... ), обеспечивающими покадровое сжатие. 

Написав документацию к плагину, я отправил её Адаму Вильямсу и спросил возможно ли ускорить работу плагина. Адам произвёл оптимизацию работы эффекта и в настоящее время TimeFront в Cinelerra HV быстрее, чем во всех остальных форках. Готовые бинарные сборки HV - здесь. Подробнее о репозитории - здесь.

Выше были приведены схематические примеры, демонстрирующие принципы работы эффекта. Давайте сделаем что-нибудь поинтереснее.

Примеры ниже сделаны в Cinelerra-HV.  

GIFs получились великоваты, поэтому дайте время им загрузиться, чтобы воспроизведение было плавным и быстрым.

Простой пример работы эффекта в режиме 'Radial'. YT-video на моём канале. Первая часть показывает вариант с отключенным 'эффектом 'Reverse video' (= Off). Вторая часть - 'Reverse video' = On.



Ниже используется комбинация эффектов. Эту комбинацию использовал Herman Robak в < этом > YT-video (Demo 1). Я приводил ссылку на проект > в начале статьи.


Time Range = 42. YT-video на моём канале. Чем больше степень размытия, тем "жирнее" буквы. При необходимости можно добавить размытие отдельных каналов.  Robak размывал канал красного.


То же самое, но с другим футажом.


В примере ниже использована та же схема эффектов, но на нижней дорожке добавлен эффект ChromaKey, который удалил белый фон. YT-video на моём канале.





Ниже представлена комбинация эффектов, воспроизводящая проект #2 от Herman Robak, представленный < этим > YT-видео (Demo 2).



Если воспроизводить его в Cinelerra-HV, то следует вместо 'Reroute' использовать 'Swap Channels'



Надо сказать, что это очень капризный к футажу проект (#2). Далеко не со всяким материалом получается искомый результат, когда буквы появляются при проезде через них автомобиля и после растекаются и исчезают.