понедельник, 2 ноября 2009 г.

Навигация по видео презентации

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

В моем распоряжении был ноутбук с KDE4, последним я и воспользовался точнее многогранным плазмоидом Folder View.

Я хотел получить следующее:
Миниатюры слайдов расположенные в порядке следования.
При нажатии на миниатюру плеер переходит на соответствующее место.
Возможность вызвать список миниатюр не нарушая работы плеера.

Для простоты добавим еще один активити, а по центру разместим плазмоид Folder View. В настройках Folder View укажем для показа папку ~/presentation/control/ (имя не важно, но я назвал ее так) в ней будут находится desktop файлы, управляющие плеером. В еще одной папке ~/presentation/pic/ позже поместим кадры из ролика, соответствующие разделам.

Должно получится следующее:

#Папка с desktop файлами для Folder View
~/presentation/control/

#Папка с иконками для desktop файлов
~/presentation/pic/

#Скрипт для управления плеером
~/presentation/setslide

#Собственно презентация
~/presentation/presentation.avi

Код скрипта (~/presentation/setslide) для управления плеером:

#! /bin/bash

#Плеер я выбрал dragon потому, что им можно управлять через dbus
#но постоянного адреса на dbus у него нет поэтому здесь получаю текущий
DRAGON=`qdbus | grep dragonplayer`


#Прошлая инструкция сработает только в случае если плеер уже был запущен
#запускаем его если прошлый шаг не удался и снова пробуем получит адрес
if [ -z $DRAGON ]
then
dragon ~/presentation/presentation.avi &
sleep 2
DRAGON=`qdbus | grep dragonplayer`
fi

#Перематываеи видео в плеере до нужного момента
#позицию передаем как аргумент
qdbus $DRAGON /Player org.freedesktop.MediaPlayer.PositionSet $1

#после перемотки плеер автоматически становится на паузу
#если мы хотим продолжение воспроизведения нужно раскомментировать строчку ниже
## qdbus $DRAGON /Player org.freedesktop.MediaPlayer.Play

#Разворачиваем плеер на полный экран
qdbus $DRAGON /dragonplayer/MainWindow_1/actions/fullscreen com.trolltech.Qt.QAction.setOn true



Заполним Folder View слайдами.
В папке ~/presentation/control/ нужно создать desktop файлы в количестве "слайдов" презентации.

Содержимое desktop файла:

[Desktop Entry]
Exec=~/presentation/setslide XXXXXXXX
Icon=/home/user/presentation/pic/X.png
Type=Application
StartupNotify=false



Где XXXXXXXX - это позиция на которую нужно перевести плеер. Что бы узнать это число нужно перейти в dragon на нужную позицию, поставить его на паузу и выполнить команду в консоли:

qdbus `qdbus | grep org.mpris.dragon` /Player org.freedesktop.MediaPlayer.PositionGet


Имена desktop файлов должны соответствовать именам разделов, в моем случае получилось так:

~/presentation/control/Linux
~/presentation/control/Виртуализация
~/presentation/control/Вредоносное ПО
~/presentation/control/Вредоносное ПО в Linux
~/presentation/control/Все равнозначны
~/presentation/control/Начало
~/presentation/control/Не все приложения под Linux
~/presentation/control/Отвлекающие приложения
~/presentation/control/Отсутствие центрального управления
~/presentation/control/Режим киоска
~/presentation/control/Упрощенная оболочка
~/presentation/control/Централизованное управление

Теперь назначим иконки desktop файлам.
Иконки могут быть любыми. Я сделал скриншоты основных моментов каждой части, изменил их размер до 256x256 (это не обязательно) и сохранил в папку ~/presentation/pic/ под номерами в последовательности следования слайдов т.е. 1.png, 2.png, ... 12.png. В соответствующем desktop файле нужно установить значение Icon на соответсвующий файл картинки.
Здесь поджидает неприятность. Иконки в Folder View не будут обновляться. Правится это удалением файлов:

~/.kde/cache-spider/kpc/kde-icon-cache.data
~/.kde/cache-spider/kpc/kde-icon-cache.index

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

Как это выглядит:


Правильная последовательность настраивается методом перетаскивания иконок в Folder View на нужные места. Нужно заблокировать позиции иконок в настройках Folder View иначе они будут перемешиваться при обновлении и изменении размера плазмоида.

Что бы "красиво" переключать "слайды" во время презентации нужно назначить горячую клавишу для вызова "Show dashboard" в настройках горячих клавиш Plasma. Это значит, что все плазмоиды будут временно показаны поверх всех окон, в данном случае поверх плеера.

Выглядит это так:


Ну и на последок вот презентация, которую я показывал:

Presentation of Linux (and some custom made software) for classrooms from dik123 on Vimeo.


На странице vimeo размер картинки побольше.

И для владельцев смартфонов, которые обычно умеют играть исключитьно YouTube, тоже самое в доступном виде:

или на странице YouTube.