Timelapse на Raspberry Pi — ускоренное видео
Как сделать ускоренное видео на Raspberry Pi? Вопрос, ответ на который можно легко найти в интернете. Несмотря на это, мы решили ещё раз про это подробно написать, как всегда основываясь на личный опыт.
Предпосылки
Для чего вдруг становится нужно timelapse-видео? Вообще, есть мечта снять движение млечного пути по ночному небу. Да, это уже сто раз все делали, но хочется свой млечный путь, с блекджеком и звёздами. Но пока эта задача отложена, появилась другая, более насущная.
Дело в том, что в нашей лаборатории иногда происходят разного рода инциденты. То входную дверь кто-то не закроет, то инструмент странным образом прячется в немыслимые места, то ещё какая аномалия случится. Для того, чтобы пресекать подобное безобразие, мы решили установить у себя видеонаблюдение. По сути, требовалось сделать устройство, которое будет записывать всё происходящее в помещении, и сохранять видеофайл на флешку.
Решение
С выбором аппаратной платформы долго не думали. Поскольку у нас есть некоторое количество свободных Raspberry Pi — выбрали её. Малый размер, низкое энергопотребление, производительность соизмеримая с каким-нибудь Atom-устройством — что ещё нужно для простого сервера видеонаблюдения.
Помимо самой RPi, разумеется, потребовалась веб-камера. Поставили Logitech C110, которая раньше наблюдала за работой одного из наших 3D-принтеров.
Что касается программной части, то здесь выбор пал на уже известный проект mjpg-streamer. Это удобный пакет, очень известный в Linux-сообществе, который ранее использовался для трансляции видео с RPi в интернет в задаче создания телеуправляемого робота.
mjpg-streamer умеет как транслировать кадры в сеть, так и сохранять их в виде jpg-файлов. Получается, чтобы сделать ускоренное видео, нам нужно собрать все jpg-файлы, созданные за день, и склеить их в один видеофайл. Для склеивания нам понадобится приложение avconv.
Также, чтобы сделать процесс склейки видео автоматическим, воспользуемся стандартным планировщиком cron. Обо всём этом читаем ниже.
Установка и настройка
Итак, установим всё по порядку на RPi. Здесь нам понадобится консоль, например, стандартный LXTerminal.
1. Заходим в консоль и устанавливаем пакет libv4l-0, он нужен для mjpg-streamer
sudo apt-get install libv4l-0
2. Устанавливаем пакет mjpg-streamer-rpi
Можно скачать его через браузер по ссылке http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi, а можно с помощью wget:
wget http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi
Полученный wget-ом файл переименовываем:
mv get\?download\=36\:mjpg-streamer-rpi mjpg-streamer-rpi.tar.gz
Определимся с местом, где у нас будет лежать пакет. Рекомендуем папку /home/pi. Распаковываем наш архив в заданную папку:
tar -zxvf mjpg-streamer-rpi.tar.gz -C /home/pi/
3. Настраиваем автоматический запуск демона, который будет делать снимки каждые 5 секунд.
Открываем в редакторе файл /etc/init.d/rc.local, и в самом низу дописываем такую строку:
sudo su pi /home/pi/mjpg-streamer/mjpg_streamer -i "/home/pi/mjpg-streamer/input_uvc.so" -o "/home/pi/mjpg-streamer/output_file.so -f /home/pi/mjpg-streamer/images -d 5000"
Примечание
Как видно из команды, мы задали целевую папку для кадров: /home/pi/mjpg-streamer/images. Эту папку нужно предварительно создать. Также мы указали период съёмки — 5000 мс, что равно 5 секундам.
4. Создаём и настраиваем скрипт склейки
Теперь нам нужно как-то склеивать эти кадры. Как уже писали выше, для этих целей мы будем использовать приложение avconv.
Для начала установим пакет libav-tools, в котором живёт avconv:
sudo apt-get install libav-tools
Затем в папке /home/pi/mjpg-streamer создадим такой bash-скрипт:
#!/bin/bash
fname=$(date --rfc-3339=date)
i=0
for f in `ls -tr /home/pi/mjpg-streamer/images/*.jpg 2>/dev/null`
do
newf=`printf %06d $i`.jpg
echo $f "-->" $newf
mv $f $newf
i=$((i+1))
done
avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 /home/pi/mjpg-streamer/images/$fname.avi
rm *.jpg
Сохраним скрипт как make_avi.sh, и выдадим ему права на запуск от имени пользователя pi.
sudo chmod 744 ./make_avi.sh
Затем приступим к настройке планировщика.
5. Cron
Будем запускать сборку видео каждый день в 23:00. Для этого отредактируем таблицу Cron у текущего пользователя pi.
crontab -e
Совет
Записи планировщика имеют вид: минута час день месяц день_недели код_для_запуска
В нашем случае запись будет иметь вид:
00 23 * * * bash /home/pi/mjpg-streamer/make_avi.sh
Добавим эту строчку вниз файла, и сохранимся.
6. Запуск
После успешной установки всех компонентов остаётся только перезапустить RPi, чтобы все изменения вступили в силу.
Итоги
Ну вот и всё. Ставим камеру в подходящее для съёмки место.
Совет
Рекомендуем навесить на камеру fish-eye объектив, чтобы увеличить угол обзора.
Подключаем питание к RPi, и система видеонаблюдения готова!
Чтобы посмотреть видео, достаточно вынуть флешку, и вставить её в Linux-комп для проигрывания, например, в VLC. В случае Windows, имеет смысл настроить SSH-связь с RPi, чтобы сливать видео по локальной сети.
Примечание
В планах настроить автоматическое удаление устаревших видеофайлов, чтобы не засорять флешку.
Видео
Timelapse на Raspberry Pi. Один день из жизни лаборатории AlashEd.