Программа SEZE II

Если вам интересна 2D графика и видео фильтры, то предлагаю вам ознакомиться с SEZE, программой применяющей пользовательские фильтры к видео, которые можно написать самому на C++.

Пример эффектов

Как вообще можно сделать видео фильтр?

Существуют программы, для которых можно написать свой видео плагин и он будет что-нибудь делать с кадрами видео. Это похоже на плагины ladspa, которые обрабатывают аудио сигналы в Audacity или плагины к Фотошопу. Вот некоторые из этих программ:

  • GStreamer — этот фреймворк может использоваться другими приложениями для манипуляциями над видео, но он так же может самостоятельно открывать файлы и конвертировать их через программу gst-launch-1.0. Для GStreamer можно написать видео плагин пользуясь этой документацией. Мне показалось что юзерам будет сложно скачать 150 мб программы и завести всё это, поэтому я отказался от создания плагинов для GStreamer.
  • FFmpeg — эта программа способна конвертировать видео любого формата. Вы конечно можете написать весь видео фильтр через -filter_complex, но FFmpeg поддерживает frei0r плагины, которые можно написать на C++. Я же захотел немножечко свой велосипед, поэтому мне это не подошло.
  • OBS Studio — для этой программы тоже можно написать фильтр. Его так же надо писать на сях и компилировать как и в случае с первыми вариантами. Видео фильтр будет применяться для всех кадров получаемых при записи через OBS.
  • VirtualDub — на Хабре есть статья как писать плагин к этой программе. Но VirtualDub доступен только для Windows.
  • AviSynth — тоже поддерживает возможность создания плагинов, но работает только в Windows.
  • Shotcut — открытый видео редактор, почти весь работает на сторонних видео и аудио фильтрах. Ну а как там писать плагины — гайды есть. Даже frei0r поддерживается. К сожалению у меня в Линуксе Шоткат не видит некоторые фильтры и разрабы мне не помогли советом перекинуть фильтры с билда на Юбунту к себе в Арч. На Винде-то всё работает; -/
  • Kega Fusion — это эмулятор игр для Сеги. Его автор Stive Snake расщедрился на создание графических плагинов к которым ещё и прикрепил исходники (см. раздел с плагинами). Хоть это и эмулятор, но его эффекты очень интересны и я, зная как работает API плагинов, пытался воссоздать декодер плагинов, но не вышло. Я не понял как там кадры устроены, слишком длинный pitch у битмапа, если вы в этом разбираетесь, то помогите мне и я добавлю декодер этих плагинов себе в SEZE.
  • MPV — универсальный видео плеер позволяющий накладывать на видео пиксельные шейдеры и даже конвертировать всё в файл.

Теоретически, даже в VLC плеере можно сделать фильтр на вывод, но как вы поняли, ни одни из этих вариантов я не выбрал и сделал свой православный конвертер с эффектами и выложил на Гитхабе. Если вы ничего здесь не поняли, то сразу перейдите к разделу Коллекция плагинов, там демонстрация работы программы.

SEZE II

Программа имеет такое название, потому что я допустил ошибку в слове size и ничего больше не придумал как назвать программу именно так. Кстати, оказалось что в китайском языке слово seze обозначает цвет, что символично, учитывая назначение программы. II это римская цифра 2, потому что это моя вторая попытка сделать эту прогу, теперь она с интерфейсом и более юзер-френдли.

Упрощённая схема работы SEZE II
Упрощённая схема работы SEZE II

Программа SEZE написана на С++ и использует FFmpeg API для работы с видео. Кадры из видео преобразуются в нужный создателю плагина формат и раздаются потокам процессора для обработки. Затем, прошедшие через фильтр кадры выводятся на экран посредством SDL2 и записываются в выходное видео в высоком качестве (libx264rgb, crf 0, RGB24, без звука).

Сама по себе программа консольная (спойлер, интерфейс тоже есть) и чтобы узнать все её команды, запустите seze в консоли без параметров или с -h ключом. Так же есть простая GUI версия, но она не имеет всех опций CLI версии. Для применения эффекта требуется файл фильтра, который является. dll или.so файлом и подключается при запуске программы. В репозитории проекта есть API к плагинам в виде одного хедера, его можно использовать для создания собственного плагина. Автор плагина сам решает какие опции будет получать плагин, в каком формат будут изображения из видео и какие оптимизации применять при компиляции. Как сделать плагин, можно узнать здесь. Для обладателей Windows доступны Drag’N'Drop-батники, на которые можно перетащить ярлык с видео файлом и обработка сразу начнётся без ручного выставления настроек.

Коллекция плагинов

Зацените видео с демонстрацией эффектов, так же в нём есть инструкция по установке и запуску программы:

Как пользоваться программой SEZE II

В папке plugins есть реализации моих видео фильтров, они оптимизированы для Pentium II MMX на Windows x32 и для SSE2 на Linux x64. Если вам интересно, то вы можете написать собственный фильтр и отправить его мне, исходники не обязательны. Я добавлю ваш эффект в следующий релиз. Так же вы можете скинуть и исходники, тогда они пойдут в репозиторий и я напишу вас как автора в ридми.

Ну а сейчас я буду издеваться над картинкой Лены:

tvsim color noise.bat
tvsim color noise.bat
tvsim bw ringing.bat
tvsim bw ringing.bat

TVsim — эффект имитирует работу аналогового телевизора. Доступны стандартные разрешения, ЧБ цвет и NTSC формат. AM-модуляцию не вышло добавить. Имитируется ТВ сигнал с гасящими импульсами, пустыми строками, уровнями напряжения и на это всё накладывается шум, из-за чего получаются правдоподобные помехи. Так же есть затухание кинескопа, интерлейсинг и эффект Гиббса (Ringing artifact).

colorop rnd.bat
colorop rnd.bat

Colorop — этим эффектом можно применять математические операции к цветовым компонентам, например к красному оттенку применить операцию XOR со случайным числом

YUVA classic.bat
YUVA classic.bat

YUVA — это мой очень старый видео эффект. Он не в папке свободных плагинов, потому что его код настолько убогий и медленный, что его лучше не видеть никому.

lineswap.bat
lineswap.bat

Lineswap — строки случайным образом копируются вверх или вниз несколько раз.

pixelsort h.bat
pixelsort h.bat

Pixelsort — популярный эффект, пиксели сортируются по яркости или другим признакам в пределах интервалов. Пока что выглядит не так шикарно как на картинках в интернете.

rdither.bat
rdither.bat

Rdither — дизеринг со случайным узором, использует 3-битную палитру из 8-и цветов.

stars lights diagonal.bat
stars lights diagonal.bat

Stars — рисует звёздочки с 8-ю лучами, которые появляются на самых ярких пикселях.

Почти у каждого эффекта есть собственные команды для настроек, которые можно увидеть в консоли при их запуске. Команды передаются через ключ --opts «всё что в кавычках уже будет относиться к командам для плагина».

Примечания

Почему файлы большие? — они в lossless качестве, поэтому большие. Используйте параметр запуска --noraw и тогда видео будет сжато получше, но качество будет хуже.

Как скомпилировать? — используется система сборки SCons, так что вам понадобится интерпретатор питона и сама система сборки. Её можно скачать через pip. Другие подробности смотрите здесь.

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

Почему хэши не совпадают? — однажды меня спросили почему libstdc++ имеет не тот размер что в официальном релизе и нет ли там вирусов. Вирусов нигде нет, все программы и библиотеки урезаны с помощью утилиты strip и пожаты с помощью UPX с опцией --ultra-brute. Если вы не доверяете моим билдам, то можете лично собрать всё из исходников.

Это лучше чем альтернативы? — конечно нет, я эту программу только вчера выложил, но думаю что лёгкий вес и многопоточность являются её преимуществом. FFmpeg сам по себе быстро работает, а собрано всё с оптимизациями на C++. Оптимизировать остаётся только сами алгоритмы эффектов.

Ссылки

  • Репозиторий SEZE II на Гитхабе — MIT лицуха. Можете скопировать себе реп и делать что угодно. Предлагайте свои улучшения и рассказывайте друзьям прогерам.
  • Современный гайд по FFmpeg API — модерн-уроки. Примеры кода в FFmpeg года аж 2001-го и компилятор часто ругается что функции устарели, поэтому используйте именно это руководство.
  • Паблик в ВК — тут будет инфа о новых эффектах.

Автор статьи является разработчиком программы, поэтому вы можете спросить что-то по коду или предложить улучшения в комментариях к публикации. На самом деле это копия статьи с Хабра, но с небольшими изменениями. На Хабре же на статью было 0 реакции, что странно, ведь моя предыдущая статья вызвала интерес в первый же день публикации и было много комментариев. Думаю, что на DTF народ заинтересованнее. Может хабровчане испугались черепушек с превьюхи?

3232
5 комментариев

А есть какой-то намёк на прогресс бар? А так прога достойная, моё почтение.

Ответить

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

1
Ответить

Сама по себе программа консольная

Дальше приуныл, думал для хлебушков и счас как начну обрабатывать (

Ответить

так там есть вполне нормальный интерфейс (не консольный). в видео пример использования программы показан

Ответить

Хлебушки ето кто такие? Там да, с интерфейсом есть и даже без интерфейса можно сразу видео файл на значок перетащить и он эффект наложит

Ответить