• Дистрибутив собранный в Yocto Project

    Berserk

    Мультимедиа центр - платформой для которого является Raspberry PI базируется на версии Kodi 17.6 Версия операционной системы собрана с помощью системы сборки "Yocto Project". читать далее

    Коди в Yocto Project
  • Yocto Project

    Роутер на Raspberry PI

    Сборка маршрутизатора c "нуля" для Raspberry Pi c использованием системы сборки "Yocto Project" читать далее

    Маршрутизатор с нуля
  • Феерический хранитель экрана

    Kodi Universe

    Проект является простым плагином для Kodi. Проект показывает как можно создать очень красивый хранитель экрана целиком опираясь на работу "open source" мирового сообщества. читать далее

    Феерический Хранитель экрана
  • примеры проектов

    Raspberry Pi

    Разное → Raspberry Pi — что можно сделать на основе «малинки»?read more

    Ссылка на статью с Хабрахабра
  • Дистрибутив собранный в Yocto Project

    Berserk

    Мультимедиа центр - платформой для которого является Raspberry Pi базируется на версии Kodi 17.6 Версия операционной системы собрана с помощью системы сборки "Yocto Project". читать далее

Феерический хранитель экрана для
мультимедиа центра Kodi
"Screensaver Kodi Universe"





Описание мультимедиа центра Kodi

Показать/Скрыть

Kodi — универсальный мультимедиа центр, ранее известный как XBMC (Xbox Media Center).


XBMC (Xbox Media Center) — изначально задуманный и разрабатывающийся как открытый мультимедиа плеер для игровой приставки XBox, позже портированный на GNU / Linux. За более чем десятилетний срок разработки приложение не один раз сменило имя, в августе 2014 года было принято решение дать проекту имя Kodi, сохраняя порядок версий и функционал.


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


Расширения Kodi имеет открытый API, что позволяет сторонним разработчикам создавать множество расширений: плагины, скрипты, темы оформления, Web-интерфейсы и многое другое. Разработчики Kodi поощряют создание и распространение пользовательских расширений, предоставляя возможность их установки непосредственно из Kodi. Последние релизы построены по новой архитектуре Addons Framework’а, включают в себя Addons Manager GUI, клиент децентрализованного распространения расширений, который использует сторонние сервисы, предоставляющие контент для Kodi. «Addons Manager» («Addons Browser») позволяет пользователям напрямую загружать расширения.



Назначение хранителя экрана для "Kodi"


Проект предназначен для создания "Феерического" хранителя экрана с минимальным количеством исходного кода на языке Python. Проект является простейшим плагином для мультимедиа центра Kodi.

Проект показывает как можно создать очень красивый хранитель экрана целиком опираясь на работу "OpenSource" сообщества. Проект интеграционный, это пример написания двух независимых компонентов, каждый из которых занимает порядка 80 строчек кода. Первый компонент - генератор контента, shell скрипт, второй компонент - плагин для мультимедиа центра Kodi, отвечает за отображение контента.

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



Преамбула


Бесконечно можно смотреть на три вещи:

как горит огонь, как течет вода и как работают другие люди.



Так как плагин пишется для "Мультимедиа центра Kodi", то и визуализировать я буду работу команды Kodi программистов.




Использование плагинов в Kodi


Мультимедиа центр Kodi является очень мощной и гибкой программой, работающей в связке с внешней библиотекой ffmpeg, для декодирования аудио и видео файлов.


Для создания стороннего приложения Kodi использует механизм расширений "addons" или попросту плагинов. Для создания собственного плагина мне потребуются некоторые навыки и небольшое знание языка программирования Python.


Механизм плагинов Kodi является чрезвычайно гибким и удобным. Python интерпретируемый язык, а это значит что мне не нужно ничего компилировать, собирать в отдельный пакет программного обеспечения, мучиться с файлами сборки типа "makefile" и т.п.


Для конечного распространения Kodi плагина достаточно упаковать его в Zip архив, соблюдая некоторые правила по структуре каталогов. Имея на руках конечный Zip архив его можно установить на любом устройстве в котором работает Kodi: компьютере, планшете, и наконец телевизоре (имеется ввиду связка TV + одноплатник), указав архив в виде источника плагина.



Структура плагина для Kodi


	└── screensaver.kodi.universe
	    ├── README.md
	    ├── addon.xml
	    ├── changelog.txt
	    ├── create.sh
	    ├── fanart.jpg
	    ├── icon.png
	    ├── resources
	    │   ├── language
	    │   │   ├── English
	    │   │   │   └── strings.po
	    │   │   └── Russian
	    │   │       └── strings.po
	    │   ├── settings.xml
	    │   └── skins
	    │       └── default
	    │           ├── 720p
	    │           │   └── kodi-universe.xml
	    │           ├── 1080i
	    │           │   └── kodi-universe.xml
	    │           └── media
	    │               ├── black.jpg
	    │               ├── buran.jpg
	    │               └── kodi-universe.mkv
	    └── screensaver.py
	


корневой каталог плагина включает следующие файлы:


  • README.md - необязательный файл, содержит описание проекта для github.com
  • addon.xml - файл с описанием плагина, содержит тип плагина, кодировку, версию, зависимости, имя автора и т.п.
  • changelog.txt - необязательный файл, со списком изменений проекта
  • create.sh - необязательный файл, bash скрипт предназначен для создания Zip архива screensaver(а) и генерации видео файла по Git истории с помощью инструмента Gource, к самому Kodi плагину файл отношения не имеет, необходим для удобного распространения плагина. Является полностью автономным, т.е. имея только этот файл вы всегда можете создать полный Zip архив плагина (при наличие интернет соединения).
  • fanart.jpg - фоновое изображение плагина
  • icon.png - основная иконка
  • resources - каталог с ресурсами плагина
  • screensaver.py - основной файл плагина, содержит весь исходный код плагина на языке Python, название файла может быть любым, главное, чтобы это название было прописано в файла addon.xml


Описание ресурсов плагина


каталог resources содержит следующие файлы:

  • language/English/strings.po - оригинальные строки интерфейса плагина на английском языке
  • language/Russian/strings.po - перевод на русский язык, файл входит в стандартный механизм Kodi по переводу содержимого на национальные языки стран, в начале файла содержится стандартная текстовая шапка из нескольких строк (пример можно взять на сайте kodi.wiki, раздел плагины), затем идут переводы строк, состоящие из трех полей:
    • msgctxt - ссылка на уникальный номер строки
    • msgid - оригинальный текстовый идентификатор строки на английском языке
    • msgstr - перевод значения msgid на национальный язык, в данном случае на русский (каталог Russian)
    Показать/Скрыть содержимое Russian/strings.po
    	       
    	# Kodi Media Center language file
    	# Addon Name: Screensaver Kodi Universe
    	# Addon id: screensaver.kodi.universe
    	# Addon Provider: berserktv
    	msgid ""
    	msgstr ""
    	"Project-Id-Version: Kodi Addons\n"
    	"Report-Msgid-Bugs-To: alanwww1@kodi.org\n"
    	"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
    	"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    	"Last-Translator: Kodi Translation Team\n"
    	"Language-Team: English (http://www.transifex.com/projects/p/xbmc-addons/language/en/)\n"
    	"MIME-Version: 1.0\n"
    	"Content-Type: text/plain; charset=UTF-8\n"
    	"Content-Transfer-Encoding: 8bit\n"
    	"Language: en\n"
    	"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    	
    	msgctxt "#32001"
    	msgid "Screensaver"
    	msgstr "Хранитель экрана"
    	
    	msgctxt "#32002"
    	msgid "Video file"
    	msgstr "Видеофайл"
    	
    	msgctxt "#32003"
    	msgid "Not Video"
    	msgstr "Не запускать видео"
    	       
    	       

  • settings.xml - основной файл настроек плагина, описывает графическое меню свойств плагина, строковые параметры которого можно изменить, где:
    • id - текстовый идентификатор ресурса
    • label - уникальная числовая метка текстового поля
      (соответствует полю msgctxt в файле strings.po переводов)
    • type - предопределенный тип ресурса
      (все возможные типы описаны на сайте kodi.wiki, раздел плагины)
    • default - значение параметра по умолчанию
      (можно сбросить параметр в это значение с помощью одноименного меню Kodi)
    Показать/Скрыть содержимое settings.xml
    	       
    	<?xml version="1.0" encoding="utf-8" standalone="yes"?>
    	<settings height="800">
    	    <category label="32001">
    	        <setting id="videofile" label="32002" type="video"/>
    	        <setting id="not-video" type="bool" label="32003" default="false"/>
    	    </category>
    	</settings>
    	       
    	       

  • resources/skins/default/1080i/kodi-universe.xml - конфигурационный xml файл
  • resources/skins/default/720p/kodi-universe.xml - конфигурационный xml файл, описывающий расположение управляющих элементов плагина (controls), их геометрию, общие размеры, позицию элементов, тип видимости и т.д. Имя конфигурации определяется в зависимости от режима видео адаптера (например 1080i или 720р)

Медиа ресурсы плагина:

  • resources/skins/default/media/black.jpg -
    черный фон, которым заполняется экран, перед запуском видео

  • resources/skins/default/media/buran.jpg -
    футуристическое изображение космического корабля "Буран, на крыльях Мечты"

  • resources/skins/default/media/kodi-universe.mkv -
    основной видео файл, который циклически проигрывается плагином, до наступления события пробуждения



Корневой конфигурационный файл плагина - addon.xml


Addon.xml - является основным конфигурационным файлом плагина, из которого Kodi берет всю необходимую информацию для запуска плагина и его интеграции в работу мультимедиа центра.

Показать/Скрыть содержимое addon.xml
	
	<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
	<addon  id="screensaver.kodi.universe" name="Kodi Universe" \
	        version="0.1.2" provider-name="berserktv">
		<requires>
			<import addon="xbmc.python" version="2.7"/>
		</requires>
		<extension point="xbmc.ui.screensaver" library="screensaver.py" />
		<extension point="xbmc.addon.metadata">
			<platform>all</platform>
			<source>https://github.com/berserktv/screensaver.kodi.universe</source>
			<summary lang="en">Kodi Universe</summary>
			<summary lang="ru">Вселенная Коди</summary>
			<description lang="en">Screensaver - Kodi Universe  </description>
			<description lang="ru">Хранитель экрана - Вселенная Коди</description>
			<license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
		</extension>
	</addon>
	
	


Основными параметрами плагина являются:

  • Секция addon
    • id - уникальный текстовый идентификатор плагина
    • name - название плагина
    • version - версия плагина
    • provider-name - имя провайдера плагина

  • Секция requires - зависимости
    в этой секции указываются модули от которых зависит работа данного плагина

  • Секция extension - расширений
    в этой секции (их может быть несколько) указывается тип плагина, основная точка входа в плагин:
    point="xbmc.ui.screensaver" library="screensaver.py"
    в нашем случае плагин является "Хранителем экрана", которому передается
    управление с помощью вызова python скрипта с именем "screensaver.py"

    так же в секции расширений может быть указана point="xbmc.addon.metadata"
    с типом платформы на которой плагин может работать, названием и описанием плагина
    на определенном языке/языках, а также тип ЛИЦЕНЗИИ плагина
    Общее количество метаданных, которые можно указать в этой секции extension может быть
    достаточно большим и более подробную информацию вы можете найти на сайте kodi.tv



Реализация плагина


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

Для того, чтобы python скрипт вызывался, я прописал его в файле addon.xml, см. секцию выше

Язык программирования Python достаточно гибкий, он позволяет одно и тоже действие выполнить несколькими способами, и для наглядности я буду использовать объектно-ориентированный подход с классами.


Показать/Скрыть содержимое screensaver.py
	
	# -*- coding: utf-8 -*-
	# Plugin for Kodi mediacenter
	# Kodi Universe - Very Simple Screensaver, autor Alexander Demachev (http://berserk.tv)
	# GNU GENERAL PUBLIC LICENSE. Version 2, June 1991
	
	import os
	import sys
	import xbmc
	import urllib
	import xbmcgui
	import xbmcaddon
	
	__id__ = 'screensaver.kodi.universe'
	__addon__ = xbmcaddon.Addon(id=__id__)
	__path__ = __addon__.getAddonInfo('path')
	def_video_url = __path__+'/resources/skins/default/media/kodi-universe.mkv'
	
	class BsPlaylist:
	    def __init__(self,):
	        pass
	
	    def getPlaylist(self,):
	        try: xbmc.PlayList(1).clear()
	        except: pass
	        self.playlist = xbmc.PlayList(1)
	        item = xbmcgui.ListItem("item1")
	        self.playlist.add(__addon__.getSetting("videofile"),item)
	        return self.playlist
	
	class BsPlayer(xbmc.Player):
	    def __init__(self,):
	        pass
	
	    def onPlayBackStarted(self):
	        xbmc.executebuiltin("PlayerControl(RepeatAll)")
	
	    def onPlayBackStopped(self):
	        return
	
	
	class Screensaver(xbmcgui.WindowXMLDialog):
	    def __init__( self, *args, **kwargs ):
	        pass
	    
	    def onInit(self):
	        video_url = __addon__.getSetting("videofile")
	        if (video_url == ""):
	            video_url = def_video_url
	            __addon__.setSetting("videofile", video_url)
	        if (__addon__.getSetting("not-video") == "true" or not os.path.isfile(video_url) ):
	            return
	
	        li = BsPlaylist()
	        self.vpl = li.getPlaylist()
	        if self.vpl:
	            xbmc.sleep(2000)
	            self.getControl(1).setImage("black.jpg")
	            self.player = BsPlayer()
	            if not xbmc.getCondVisibility("Player.HasMedia"):
	                self.player.play(self.vpl,windowed=True)
	
	    def onAction(self,action):
	        try: xbmc.PlayList(1).clear()
	        except: pass
	        try: xbmc.Player().stop()
	        except: pass
	        try: self.close()
	        except: pass
	
	
	if __name__ == '__main__':
	    scr = Screensaver(
	        'kodi-universe.xml',
	        __path__,
	        'default',
	        '',
	    )
	    scr.doModal()
	    del scr
	
	


class Screensaver(xbmcgui.WindowXMLDialog)


Основной класс хранителя экрана


В Python Kodi API входят несколько базовых модулей: xbmc, xbmcgui, xbmcplugin, xbmcaddon и xbmcvfs. Для работы с графическим интерфейсом Kodi я буду использовать модуль xbmcgui. Этот модуль содержит классы, отвечающие за разные элементы интерфейса


Для создания диалогового окна плагина со своим интерфейсом описанным в конфигурационном xml файле используется класс xbmcgui.WindowXMLDialog

Показать/Скрыть содержимое resources/skins/default/1080i/kodi-universe.xml
	
	<?xml version="1.0" encoding="utf-8" standalone="yes"?>
	<window type="window">
	    <controls>
	        <control type="image" id="1">
	            <description>Background image</description>
	            <posx>0</posx>
	            <posy>0</posy>
	            <colordiffuse>FF555555</colordiffuse>
	            <aspectratio scalediffuse="false" align="center" \
	                         aligny="center">scale</aspectratio>
	            <width>1920</width>
	            <height>1080</height>
	            <texture>buran.jpg</texture>
	        </control>
	        <control type="videowindow" id="2">
	            <description>VideoWindow</description>
	            <posx>0</posx>
	            <posy>0</posy>
	            <width>1920</width>
	            <height>1080</height>
	            <visible>true</visible>
	        </control>
	    </controls>
	</window>
	
	


Конфигурационный XML файл описывает два управляющих элемента:


Первый с идентификатором - 1, представляет собой фоновое изображение - "Буран, на крыльях Мечты", определенных размеров, выровненное по центру экрана.


Второй элемент с идентификатором - 2, является окном для проигрывания Видео, с признаком видимости и определенными геометрическими размерами.


Класс Screensaver наследуется от класса WindowXMLDialog, и имеет три метода:

1) Конструктор __init__ метод вызывается автоматически при создании объекта
2) Метод onInit - графической инициализации, вызывается перед первым отображением окна
3) Метод onAction - метод обработки событий, вызывается при наступлении определенных событий, в данном случае при наступлении события пробуждения, т.е. нажатия кнопки мыши, клавиатуры, перемещении управляющего указателя мыши или прихода любого события от пульта управления.



Класс Screensaver использует два вспомогательных класса:

  • Класс BsPlayer - наследуемого от стандартного XBMC класса видео проигрывателя xbmc.Player
    класс содержит три метода:

    1. Конструктор __init__ метод вызывается автоматически при создании объекта
    2. Переопределение метода начала проигрывания видео onPlayBackStarted
    3. Переопределение метода окончания проигрывания видео onPlayBackStopped

      Примечание: так как я переоределил метод остановки проигрывания и он пустой,
      то сработает правило: Don't Stop Let's Go

  • Класс BsPlaylist - класс списка предназначенный для возврата объекта xbmc.PlayList
    класс содержит два метода:

    1. Конструктор __init__ метод вызывается автоматически при создании объекта
    2. Метод getPlaylist для определения списка воспроизведения, используется стандартный список XBMC - xbmc.PlayList


Общий алгоритм работы Screensaver(а) следующий:
1) При наступлении события вызова Screensaver(a) - отсутствие активности пользователя указанное количество минут и отсутствие активного видео/аудио воспроизведения, Kodi передает управление скрипту screensaver.py
2) На основе конфигурационного xml файла создается основное графическое окно плагина. При инициализации графического окна загружаются строковые ресурсы настроек плагина (меню - "настройки").


В случае если видео файл не указан
__addon__.getSetting("videofile")

он заполняется параметром по умолчанию
video_url = def_video_url
__addon__.setSetting("videofile", video_url)


в случае отсутствия флага - "отключения видео воспроизведения"
__addon__.getSetting("not-video")

происходит показ футуристического изображения "Буран на крыльях Мечты" в течении двух секунд
xbmc.sleep(2000)

далее по идентификатору элемента управления 1, устанавливается черное изображение фона
self.getControl(1).setImage("black.jpg")

и затем запускается XBMC видео проигрыватель со списком воспроизведения из одного файла
self.player.play(self.vpl,windowed=True)

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



Создание визуализации для плагина Kodi в Ubuntu




Примечание:

Все инструкции описанные ниже я буду запускать под операционной системой Linux, а именно дистрибутивом Ubuntu


также возможно выполнить описанные ниже действия в Debian совместимой операционной системе - главным условием запуска будет наличие в системе пакетного менеджера Apt , т.е. менеджера позволяющего установить в системе программное обеспечение в формате Deb. Конечно указанные ниже действия вы можете выполнить в любой Linux системе, но это потребует от вас дополнительных действий и возможно изменение последовательности некоторых команд (как пример: установка RPM пакетов вместо Deb и т.п.)



Gource - очень интересный и завораживающий проект. Gource назван по аналогии с source т.е. исходный код + G(Графика). Это приложение позволяет визуализировать историю изменений в системе контроля версий. Gource нативно понимает Git, для остальных систем например SVN, Mercurial существуют конверторы, которые позволяют преобразовать базу хранения в Git Формат.


Gource - отрисовывает невероятно красиво при помощи OpenGL, и имеет большое количество параметров для своей работы. Вот этот невероятно мощный инструмент для генерации "Феерической" визуализации я и буду использовать.


Для создания визуализации я буду использовать некоторую последовательность команд описанных в bash скрипте

Для генерации видео мне потребуются две основных программы:

Gource - для создания исходного видео файла по Git истории любого указанного проекта
FFmpeg - библиотека для кодирование и декодирования видео и аудио



Скрипт для генерации видеофайла плагина


Показать/Скрыть содержимое create.sh
	
	#!/bin/bash
	# This is script of the generation video from "Gource".
	
	# project: Screensaver Kodi Universe (http://berserk.tv)
	# This script creates a ZIP archive of a Kodi screensaver.
	# GNU GENERAL PUBLIC LICENSE. Version 2, June 1991
	# 
	# скрипт запускается под обычным пользователем,
	# но вначале своего выполнения требует установки пакетов 
	# git zip ffmpeg gource с помощью команды sudo
	
	OUT_DIR="output"
	OUT="kodi-universe.mkv"
	NAME_PROJ="screensaver.kodi.universe"
	MEDIA_PATH="${NAME_PROJ}/resources/skins/default/media"
	NAME_REP="https://github.com/berserktv/${NAME_PROJ}.git"
	
	GSFILE="output.ppm"
	SECONDS_PER_DAY="1"
	GOURCE_FRAME_RATE="30"
	RESOLUTION="-1920x1080"
	CODEC_OUT_FRAME_RATE="25"
	
	# -vcodec  -  кодек для кодирования видеопотока, 
	#  libx264 в настоящий момент наиболее современный и быстрый кодек (h.264)
	# -profile -  профиль для кодека (baseline, main, high, high10, high422, high444)
	# -pix_fmt -  установка пиксельного формата (yuv420p, yuv422p, yuv444p)
	FFPARAM="-vcodec libx264 -profile:v high422 -pix_fmt yuv420p"
	GSPARAM1="--camera-mode track ${RESOLUTION} --stop-position 1.0 \
	          --seconds-per-day ${SECONDS_PER_DAY}"
	
	GSPARAM2="--git-branch origin/master --multi-sampling \
	          --stop-at-end --hide-filenames"
	
	GSPARAM3="--highlight-users --file-idle-time 13 --max-files 0 --hide date"
	GSPARAM4="--title Kodi --bloom-multiplier 1.0 --bloom-intensity 1.0"
	
	VIS="visualize"
	# GIT адрес проекта по которому будем создавать визуализацию работы
	GIT_REP="https://github.com/xbmc/xbmc.git"
	# arg1 - визуализация любого git проекта, 
	#        который можно задать первым аргументом в командной строке
	# example: ./create.sh "https://github.com/facebook/react.git"
	if [ -n "$1" ]; then GIT_REP="$1"; fi
	
	# установка пакетов git zip ffmpeg и gource
	packages="git zip ffmpeg gource"
	for i in $packages; do
	  if ! dpkg -s $i | grep -q "install ok installed"; then 
	    sudo apt-get install -y $i; 
	  fi
	done 
	
	# очистка выходного каталога
	test -d ${OUT_DIR} && rm -rf ${OUT_DIR}
	test -d ${OUT_DIR} || mkdir -p ${OUT_DIR}
	
	cd ${OUT_DIR}
	# загружаю Screensaver Kodi Universe и GIT проект, для визуализации 
	if ! git clone ${NAME_REP} ${NAME_PROJ}; then 
	  echo "Error, not load ${NAME_REP}, exit ..."; exit 1; 
	fi
	
	if ! git clone ${GIT_REP} ${VIS};        then 
	  echo "Error, not load ${GIT_REP},  exit ..."; exit 2; 
	fi
	
	
	# генерация видео для screensaver Kodi Universe - "Вселенная Коди"
	gource ${VIS} ${GSPARAM1} ${GSPARAM2} ${GSPARAM3} ${GSPARAM4} \
	       --output-framerate ${GOURCE_FRAME_RATE} --output-ppm-stream ${GSFILE}
	       
	ffmpeg -y -r ${GOURCE_FRAME_RATE} -f image2pipe -vcodec ppm \
	       -i ${GSFILE} ${FFPARAM} -r ${CODEC_OUT_FRAME_RATE} ${OUT} && sync
	
	mv -f ${OUT} ${MEDIA_PATH}
	rm -f ${GSFILE}
	
	# секция работы с архивом
	# удаляю служебную GIT информацию из проекта screensaver.kodi.universe
	test -d ${NAME_PROJ}/.git &&  rm -fr ${NAME_PROJ}/.git
	zip -r ${NAME_PROJ}.zip ${NAME_PROJ}
	
	


Скрипт должен выполняться под обычным пользователем, но в процессе запуска скрипт требует установки следующих программ
"git zip ffmpeg gource"

В случае их отсутствия скрипт попытается их установить с помощью команды повышения привилегий - sudo.


Вкратце скрипт выполняет следующее:


  • Загружает из Интернета два проекта c Github.
    Первый проект - сам Screensaver(а)
    Второй проект - XBMC

    в случае указания аргумента в командной строки представляющего собой Git путь, можно загрузить любой Git проект для визуализации, пример загрузки другого Git проекта:

    ./create.sh https://github.com/facebook/react.git

    в данном случае я беру для "Визуализации" всем известный движок "Facebook" - React
    (Феерический screensaver от Фейсбука - т.е. полная Бука)

  • Запускает программу Gource c аргументами командной строки, для генерации видео фрагментов в несжатом формате PPM.
    Генерация видео будет происходить до тех пор, пока пользователь не закроет окно Gource мышкой (нажатие на крестик) или же пока пользователь не нажмет клавишу ESC

    Примечание: Не рекомендую вам генерировать видео длительностью больше трех минут, так как это может занять достаточно длительное время и потребует от вас для хранения более 30 Гбайт свободного места на жестком диске. Одна минута изображений с разрешением 1920×1080 (FullHD) и частотой 30 кадров в секунду требует порядка 10 Gбайт на жеском диске. Это временный файл, и после генерации правильного MKV видео контейнера с помощью FFmpeg, этот файл удаляется и остается результирующий файл, который занимает 20 Мбайт на одну минуту видео FullHD c частотой 25 кадров в секунду. C теми настройками Gource, которые использует скрипт вы получаете возможность выбора любого временного участка с начала разработки проекта по настоящее время, за это отвечает линейная шкала внизу Gource окна. Вы можете мышкой выбрать любое время, при этом визуализация начинается с этого момента т.е. все предыдущие объекты на экране исчезают, это делает видео более динамическим.

  • Запускает программу FFmpeg cо списком аргументов для создания MKV контейнера из исходного набора изображений Gource;
  • Создает конечный Zip архив с проектом Screensaver(а) и сгенерированным видеофайлом;


Параметры Gource


  • 01 --camera-mode track режим работы камеры
    (отслеживает текущих активных пользователей)

  • 02 --stop-position 1.0 конечная позиция
    (задает конечную позицию для воспроизведения, диапазон от 0.0 до 1.0)

  • 03 --seconds-per-day 1 количество дней в секунде видео
    (параметр определяет, какое количество работы вы увидите в интервале одной секунды видео)

  • 04 --git-branch origin/master рабочая ветка проекта

  • 05 --stop-at-end остановиться после завершения git журнала

  • 06 --multi-sampling включение сглаживания

  • 07 --hide-filenames убирать названия файлов

  • 08 --highlight-users подсвечивать названия пользователей

  • 09 --file-idle-time 13 время простоя для файла
    (количество времени, через которое имя файла снимается с индикации)

  • 10 --max-files 0 максимальное количество файлов
    (значение 0 снимает ограничение на количество отображаемых имен файлов)

  • 11 --hide date убирать дату, для которой показывается текущий кадр

  • 12 --title Kodi название, которое выводиться в левом нижнем углу видеозаписи

  • 13 --bloom-multiplier 1.0 управление эффектом "легкого цветения" с помощью радиуса.

  • 14 --bloom-intensity 1.0 управление эффектом "легкого цветения" с помощью интенсивности.

  • 15 --output-framerate 30 выходное количество кадров в секунду

  • 16 --output-ppm-stream name название выходного файла в формате PPM


примечание: некоторые параметры могут быть взаимоисключающими,
полный список параметров можно посмотреть здесь

Краткая инструкция по созданию видео для Screensaver(а)


1) Загрузите проект с github:
	git clone https://github.com/berserktv/screensaver.kodi.universe.git
		

2) Сгенерируйте видео и создайте Zip архив плагина:
	cd screensaver.kodi.universe
	chmod u+x create.sh
	./create.sh
		

3) Время генерации видео и использование свободного места на диске:
	Время генерации зависит от количества минут.
	Могу порекомендовать делать видео заставку продолжительностью
	не более трех минут - что займет примерно 20 минут 
	на перекодировку из формата Gource (PPM) в формат MKV видео
	контейнера с помощью утилиты FFmpeg.
	
	Также замечу, что размер Git базы XBMC (Kodi) занимает более 700 Мбайт
	и время загрузки зависит от вашей скорости подключения к сети 
	Интернет.
	
	Размер временного видео файла в формате PPM занимает порядка 
	10Гбайт на одну минуту видео (формат FullHD, 30 кадров в секунду).
	        

4) Установите screensaver в Kodi
	Вы можете установить "Хранитель" экрана в Kodi
	Выбрав меню - "Установка дополнений" => "Установка Zip архива"
	После успешной установки, необходимо 
	еще активировать хранитель экрана Kodi Universe
	в общем списке Screensaver(ов), так 
	как их там несколько.
		


Загрузка screensaver Kodi Universe


Вы можете загрузить следующие версии Screensaver(а):

	версия       - v0.1.2
	Тема         - Kodi, Isengard
	дата         - от 21.12.2017
	MD5          - 606e8f9d56130eaf52ad8c6e99e2f0d8	
	               (контрольная сумма MD5 zip архива)
	               размер архива 56 Мбайт
	
	имя файла    - screensaver.kodi.universe-v0.1.2.zip
	
	ПРИМЕЧАНИЕ:    Размер архива примерно 56 Мбайт, что обусловлено тем,
	               что в состав хранителя экрана входит видео файл, 
	               который содержит 2.5 минуты "Феерической" 
	               разработки программного обеспечения мультимедиа 
	               центра Kodi. Разрешение видео файла Full HD 
	               (:-) Красота требует жертв )
	

	версия       - v0.1.2-facebook-react
	Тема         - Facebook, React
	дата         - от 08.01.2018
	MD5          - cd2dfc56a8b1302688adc46d63799600
	               (контрольная сумма MD5 zip архива)
	               размер архива 34.8 Мбайт
	
	имя файла    - screensaver.kodi.universe-v0.1.2-facebook-react.zip
	

	версия       - v0.1.2-theme-m1
	Тема         - Kodi, Master
	дата         - от 27.12.2017
	MD5          - c15bb9be4231b32d378b5ebd4d45ab43	
	               (контрольная сумма MD5 zip архива)
	               размер архива 58 Мбайт
	
	имя файла    - screensaver.kodi.universe-v0.1.2-theme-m1.zip
	

еще изображения плагина - Kodi Universe













Продолжение следует ...