/FestEngine

Our humble attempts to create a player for live shows that is capable to display images and play video or audio tracks from a single-window control

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

Build status

Сидел я однажды на региональном Аниме-фесте, смотрел как на проекторе на глазах у зрителей мышкой таскают файлы и моё терпение лопнуло.

Миру нужна простая и бесплатная система, через которую можно одновременно показывать картинку на проекторе (задник), включать аудио и при необходимости включать видео вместо картинки.

На одном компьютере.

В одном приложении.

Как было до Fest Engine

  • AIMP для аудио на первом компе/операторе без проектора.
  • Cosplay2 Timer для обратного отсчета на втором компе, который на проекторе.
  • FastStone для задников на втором компе/операторе.
  • Нейтральная картинка на рабочем столе, скрытая панель задач. Копия этой картинки в FastStone, чтобы включать ее не сворачивая FastStone.
  • VLC для видео, хитро настроенный автоматически разворачиваться на втором мониторе (обязательно нужно его закрыть на втором мониторе, чтобы он именно там в следующий раз открылся при простом запуске файла из проводника).
  • Чтобы добраться до которого, надо убрать фокус с FastStone и перейти в проводник.

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

Идея Fest Engine не нова, вот список дорогих и/или неполноценных программ, которыми можно его заменить:

Как выглядит Fest Engine

скриншот окна

Как работает Fest Engine

  • Разворачиваемся по инструкии ниже или качаем бинарик.
  • Запускаем src/main.pyw через Python 3 или FestEngine.exe (для минимальной версии бинарика, нужно сначала запустить Install.bat от админа). Открываются пустые настройки.
  • Натравливаем FestEngine на свои материалы и тестируем что всё работает. Проверяем что все файлы на месте и воспроизводятся, если нужно, перекодируем.
  • Приходим на фест (с тем же ноутом).
  • Указываем в настройках какой из мониторов -- проектор.
  • Выбираем нужную строчку, ждём объявления участника, топим F1 -- Задник на проектор пошёл.
  • Участник готов выступать? Топим F2 -- Звук пошёл. Если у него видео а не звук, всё работает само.
  • Уходит участник -- жмём Esc чтобы убрать задник (и плавно увести его трек если тот не обрезан).
  • Если на сцене длинная интермедия, ставьте подложку (фоновую музыку) нажатием F3. Можно использовать F3 вместо Esc.
  • Повторяем пока есть участники.
  • Профит, все любят ваш фест! Только не забудьте отслушать все материалы на предмет низкого битрейта и отсмотреть все видосы именно на том компе который будет на фесте.

Как настроить Fest Engine

Пример настроек:

настройки

Из чего это сделано

  • Python 3 -- Самый простой и удобный язык в мире.
  • wxPython 4 -- Мощнее, чем tcl/tk. Нативнее, чем Qt.
  • VLC Python bindings -- оказывается, можно показывать видео через VLC, не запуская VLC.

Соответственно, Linux, Windows и MacOS нативно поддерживаются сразу из коробки (самом деле нет, надо получше потестить, сейчас хорошо поддерживаются только Windows и Linux, но у последних есть проблемы, связанные со странностями Gtk)

Предупреждение для разработчиков

Код FestEngine выглядит дико и совсем не энтерпрайзно, отказ от сложной модульной архитектуры был осознанным выбором. Главным принципом при разработке на данный момент является минималистичность: минимализация кодовой базы, времени разработки и фанатичное избегание всяческого вспомогательного кода. Всё сделано на 100% в лоб самым прямым и тупым методом. Это привело к тому что большенство кода находится в основном классе MainWindow и совершенно никак не тестируется, поскольку код плотно завязан на UI. Да, это не есть хорошо. Считайте, что это спайк. Если у Вас есть время спроецировать этот спайк на нормальную архитектуру, будет просто замечательно, но у нас его, как видите, нету. Надо фесты делать, а не классы наследовать, да интерфейсы имплементить. Гляньте на bCNC, у них тоже всё плохо ))) я хотя бы по PEP8 пишу.

Какие ещё киллер-фичи?

  • #4: Если в поле комента вписать какой-нибудь ID (например ">183 maybe"), строчка сдублируется в нужном месте. Это удобно если участника паренесли и надо не забыть об этом. Такие строки можно удалять и обновлять комент в них изменяя комент в исходной.
  • #2: Офигительный поиск. Самый минималистичный, быстрый и удобный из возможных. Есть только одно текстовое поле -- туда можно вводить что угодно, по мере ввода таблица фильтруется. Выбираем что нужно в отфильтрованной, кликаем правой кнопкой по полю поиска и переходим в полную таблицу! Чтобы не забыть выйти из фильтра, фон отфильтрованной таблицы меняет цвет.
  • #7: Фоновая музыка на интермедии и удобный плеер к ней. Можно запускать и паузить одной кнопкой, а можно открыть полноценный плеер. В плеере можно включать конкретную композицию, смотреть какие отыграли а какие были скипануты, можно переходить к нужному времени в треке, есть Fade In/Out, в планах Crossfade.
  • #29: Можно сделать резервный трек без видео для тех у кого видео.
  • #26: Можно заменить трек или задник участника, особенно полезно для тех кто заменяет трек на репетиции. Но не забудьте заменить трек во всех резервных копиях или следить за тем откуда воспроизвоядся файлы
  • #5: Аналог Cosplay2-Timer. Можно вывенсти на проектор обратный отсчет до начала фестиваля или до конца перерыва. С этой штукой задержать начало намного сложнее ^_^
  • #41 (beta): Текстовое окно, которое поможет световику ставить свет на ленту и позволяет узнать полную информацию о каждой заявке прямо в Fest Engine. Работает через SQLite базу данных из Cosplay2.

Если ты чувствуешь в себе силу что-нибудь из этого запилить, будешь няшкой и сделаешь звук на фестах чуть лучше!

Как развернуть среду для разработки?

Windows

  • Выбрать разрядность (x32 или x64) и придерживаться этой разрядности во всех дальнейших установках
  • Установить последний Python 3 выбранной разядности. При установке отметить чекбокс Добавить python.exe в PATH (если это единственный Python, который у вас будет).
  • Открыть консоль или PowerShell от администратора и установить wxPython (для графического интерфейса) и VLC Python Bindings (для управления плеером VLC)
    pip install --upgrade setuptools pip
    pip install wxpython python-vlc
  • Установить последний VLC выбранной разядности (если у вас ничего не запускается, проверьте разрядность VLC. Это common issue).
  • Установить Git, Fork, GitKraken, SourceTree или GitHub и cклонировать репозиторий: git clone https://github.com/Himura2la/FestEngine.git
  • (не обязательно) Скомпилировать локализацию путём запуска msgfmt.bat
  • Запустить Fest Engine: из папки src выполнить py main.pyw
  • Качнуть тестовые данные и запустить Fest Engine с данными.
  • Писать код в PyCharm или Visual Studio Code и отправлять Pull-Request'ы.
  • Писать в Gitter, по поводу и без ))

Debian-based

Внимание! wxPython при установке из pip обожает начинать компилироваться из исходников. Это безнадежное занятие, ему надо явно указать .whl наиболее подходящий для вашей системы (желательно, конечно, совсем подходящий, но вроде бы билды для чужих систем иногда работает). Официальная инструкция, вам нужен раздел -- Yes, we have Linux Wheels. Sort of.

sudo apt install git python3 python3-pip vlc -y
pip install --upgrade setuptools pip
pip install python-vlc
pip install -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04 wxPython
git clone https://github.com/Himura2la/FestEngine.git
cd FestEngine/src/locale && ./msgfmt.sh && cd ..
python3 main.pyw

CentOS 8

python3 -m venv .venv
. .venv/bin/activate
.venv/bin/python3 -m pip install --upgrade pip setuptools
.venv/bin/python3 -m pip install python-vlc
.venv/bin/python3 -m pip install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/centos-8 wxPython
sudo dnf install SDL

Кто это использует?

С помощью Fest Engine проводились следующие мероприятия

Как это дебажить?

Если не запускается на винде, возможно поможет использование версии с правильной разрядностью, или установка Visual C++ Redistributable for Visual Studio 2015. При использовании минимальной версии, у вас должен быть установлен VLC той же разрядности, что и ваша система. Но вам еще Install.bat про это расскажет ))

Если не запускается на линуксе, попробуйте запустить приложение до и после исполнения install.sh. Еще можно установить/переустанвоить vlc. Больше мы ни с какаими проблемами не сталкивались, должно работать, пишите в Gitter или пишите баги.

Если появляется окно с ошибками от wxPython, смело пишите баги с содержанием ошибок, это значит что вы или ваша система делаете что-то, на что мы не рассчитывали ))