Cоздание суточного видео по камерам в ZoneMinder

Как известно ZoneMinder хранит Events (События) только в картинках. Поддержки записи сразу в видео нет. Можно конечно выгружать отдельные Events в видео, но делать это массово по нескольким Events нельзя. Так же если у вас режим записи по камерам Motion, то вообще можно утомится выгружать средствами ZoneMinder каждый Event.

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

Заметка: У меня ZoneMinder развернут на Ubuntu Server 1.29.0 LTS

Итак выполнять все это мы будем скриптом, так же для скрипта нам понадобится SSMTP (для отправки уведомления на почту, как установить и настроить его можно почитать тут) и кодировать видео мы будем с помощью mencoder.

Подсказка: устанавливаем mencoder из репозитариев Ubuntu:

sudo apt-get install mencoder -y

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

#!/bin/bash
# Скрипт для автоматического создания видео файлов за последние 24 часа.
# jakondo.ru 2016

#Создаем папку для временных файлов
mkdir -p /tmp/alarmvideos

# Получаем список имеющихся камер
cameraname=(`ls /usr/data/zm/events/ | grep '[a-zA-Z]'`)
cameraList=(`ls /usr/data/zm/events/ | grep '[0-9]'`)
cameraNum=${#cameraList[@]}
eventsFolder=/usr/data/zm/events/
echo Число заведенных в ZoneMinder камер: ${#cameraList[@]}

# Начинаем работу над получением списка картинок по каждой камере за последние 24 часа и последующая их сортировка для
# правильной склейки видео файла.
# Начинаем цикл создания списка картинок по каждой найденной камере в ZM.
 for (( i=0; i<${cameraNum}; i++ ));
 do
 echo Делаю выборку событий по камере: ${cameraname[$i]}

# Получаем список картинок за последние 24 часа по каждой найденной камере в ZM.
 find $eventsFolder${cameraList[$i]} -mtime -1 -name \*capture.jpg > /tmp/alarmvideos/${cameraname[$i]}.list

# Сортируем полученный список картинок для корректного создания суточного видео.
sort /tmp/alarmvideos/${cameraname[$i]}.list -n -o /tmp/alarmvideos/${cameraname[$i]}-sorted.list

# Используем локальное время для точной сортировки.
LC_ALL=C sort /tmp/alarmvideos/${cameraname[$i]}.list -d -o /tmp/alarmvideos/${cameraname[$i]}-sorted.list
done

# Выводим уведомление об успешном создании списков.
echo Списки картинок по каждой камере в ZM успешно созданы !

# Начинаем цикл создания видео из полученных списков по каждой камере в ZM.
 for ((i=0; i<${cameraNum}; i++ ));
 do
 echo Создаю суточный видео файл по камере: ${cameraname[$i]}
mencoder mf://@/tmp/alarmvideos/${cameraname[$i]}-sorted.list -mf w=640:h=480:fps=5:type=jpg -ovc lavc -lavcopts vcodec=mpeg4 -ofps 5 -oac copy -o /tmp/alarmvideos/${cameraname[$i]}.avi
done

# Выводим уведомление об успешном создании видео.
echo Видео файлы по каждой камере в ZM успешно созданы !

# Выкладываем полученные видео файлы на Samba ресурс, отправляем уведомление на почту об успешном выполнении
# и чистим за собой временные файлы.
# Создаем каталог (если его не существует) на Samba сервере формата (Год/Месяц/День)
mkdir -p /home/admintemp/videos/`date +%Y`/`date +%m`/`date +%d`/

# Ищем полученные видео файлы и перемещаем их на Samba сервер.
cd /tmp/alarmvideos
find *.avi -size +5k -exec mv {} /home/admintemp/videos/`date +%Y`/`date +%m`/`date +%d` \;

# Удаляем отработанные списки картинок по камерам в ZM.
rm -rf /tmp/alarmvideos/*.list
rm -rf /tmp/alarmvideos/*.avi

# Отправляем уведомление на почту об выполнении задания.
# Создаем шаблон письма и указываем кому оно адресовано
echo "To: jakondo@jakondo.ru" > /home/admintemp/report_zm.msg

# Дописываем в созданное письмо тему письма
echo "Subject: $(date --date "yesterday") Суточная выгрузка видео по камерам ZM 192.168.1.2" >> /home/admintemp/report_zm.msg

# Дописываем в созданное письмо основной тест письма
for (( i=0; i<${cameraNum}; i++ ));
 do
 echo Выгрузка по камере: ${cameraname[$i]} завершена. >> /home/admintemp/report_zm.msg
done
echo "" >> /home/admintemp/report_zm.msg

# отправляем созданное письмо на указанный адрес
/usr/sbin/ssmtp jakondo@jakondo.ru < /home/admintemp/report_zm.msg

# Подчищаем за собой, удаляем отработанный шаблон письма
rm /home/admintemp/report_zm.msg
echo Задание выполнено !

На выходе мы получаем структурированную иерархию папок по датам и видео файлами за прошедшие сутки в них.

БесполезноСлабоватоПриемлемоОтличноПревосходно (Еще нет оценок)
Загрузка...

Всего комментариев: 2 Комментировать

  1. Artem /

    ># Получаем список картинок за последние 24 часа по каждой найденной камере в ZM.
    > find $eventsFolder${cameraList[$i]} -mmin -60 -name \*capture.jpg > /tmp/alarmvideos/${cameraname[$i]}.list

    Может -mmin -1440?

    1. Жаконда / Автор записи

      Не, тогда -mtime -1, так правильней будет. А -mmin -60, это видимо я что то проверял и такой листинг выложил, сейчас поправлю.

Оставить ответ

1 × 4 =