Иногда лучше потратить немножко времени, чтобы потом его сберечь.
(Евгений Шварц)
OFX, он же OpenFX, он же OFX Image Processing API — открытый стандарт создания визуальных 2D эффектов и композинга видео. А выдано нам все это в виде plugin-подобного паттерна разработки приложений. Т.е. у нас есть как минимум Host — приложение предоставляющее набор методов, и Plug-in приложение или модуль реализующее этот набор, что как-бы позволяет бесконечно расширять функционал хостового приложения.
И тут я начал было определять, что такое plugin-ы в целом. Как хостовая система может реализовывать методы взаимодействия с внешними модулями или программами. Что такое точки входа. Почему есть плагины и плагины. И даже хотел подробно написать почему OFX в целом морально устаревший подход, а XPC сервисы — модно, круто и почти не больно. Но потом подумал, что если вы вообще добрались до этого текста, и прочитали первый абзац, то вся эта возня с терминами и уточнениями должна быть никчёмной тратой времени читателя. В общем OpenFX — это про модули и стало быть вы можете забыть про небрежность и срезание углов, если ваша задача чуть более чем сложна. Неловкое движение и… вы уложили хост в краш вместе с данными пользователя. Поэтому далее будет больше не про что можно сделать с помощью Metal, а про как.
Итак, чтобы продолжить чтение убедитесь, что вам это нужно. Вы отчетливо понимаете почему так случилось, что не самый удобный и надежный способ расширения больших систем таки развивается и вполне даже успешно. Осознаете многое про системы монтажа, редактирования и создания визуальных эффектов, которые за последние несколько лет разрослись настолько, что позволяют себя расширять сторонним разработчикам (доверяют видать окаянным…). А в этом посте поговорим про то, как нам приделать Metal в одну из таких систем, хотя возможно даже не одну. По итогу у вас в руках будет, по сути, длинный снипет из кода, который можно будет взять за основу для создания практически любого, самого лютого способа трансформации видеопотока в одной из самых продвинутых систем редактирования видео. Причем, можно заметить, в ней монтируется и красится добрая половина голивудских блокбастеров, не говоря уже о сериалах от Netflix (но это не точно). Энжой!
Вот если загрузить PNG или вектор — то запросто. А обычный JPEG вызывает у редактора отторжение. И пока не создашь выделение или слой с выделением — меню трансформации остается неактивным. А еще мне порядком, поднадоела вот эта тестовая картинка (та что за меню торчит), точнее не сама картинка, а то как камера iPhone с её широко-угольным объективом портит пропорции лица. Конечно, в PS есть Lens Correction, исправляющий дисторсии и прочие недостатки оптических систем (хотя на картинке не недостаток, а фича), но во-первых: он тормозной, во-вторых: не всегда хочется исправить просто «бочку» или «подушку».