Как известно ZoneMinder хранит Events (События) только в картинках. Поддержки записи сразу в видео нет. Можно конечно выгружать отдельные Events в видео, но делать это массово по нескольким Events нельзя. Так же если у вас режим записи по камерам Motion, то вообще можно утомится выгружать средствами ZoneMinder каждый Event.
Так вот задался я такой задачей как создавать суточное видео по камерам, выгрузки их на файловый ресурс Samba и отправки уведомления об выполнении на почту.
JTVCbm90ZSU1RCVEMCU5NyVEMCVCMCVEMCVCQyVEMCVCNSVEMSU4MiVEMCVCQSVEMCVCMCUzQSUyMCVEMCVBMyUyMCVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4RiUyMFpvbmVNaW5kZXIlQzIlQTAxLjI5LjAlMjAlRDElODAlRDAlQjAlRDAlQjclRDAlQjIlRDAlQjUlRDElODAlRDAlQkQlRDElODMlRDElODIlMjAlRDAlQkQlRDAlQjAlMjBVYnVudHUlMjBTZXJ2ZXIlMjAxNC4wNCUyMExUUyU1QiUyRm5vdGUlNUQ=
Итак выполнять все это мы будем скриптом, так же для скрипта нам понадобится SSMTP (для отправки уведомления на почту, как установить и настроить его можно почитать тут) и кодировать видео мы будем с помощью mencoder.
JTVCbm90ZSU1RCVEMCU5RiVEMCVCRSVEMCVCNCVEMSU4MSVEMCVCQSVEMCVCMCVEMCVCNyVEMCVCQSVEMCVCMCUzQSUyMCVEMSU4MyVEMSU4MSVEMSU4MiVEMCVCMCVEMCVCRCVEMCVCMCVEMCVCMiVEMCVCQiVEMCVCOCVEMCVCMiVEMCVCMCVEMCVCNSVEMCVCQyUyMG1lbmNvZGVyJTIwJUQwJUI4JUQwJUI3JTIwJUQxJTgwJUQwJUI1JUQwJUJGJUQwJUJFJUQwJUI3JUQwJUI4JUQxJTgyJUQwJUIwJUQxJTgwJUQwJUI4JUQwJUI1JUQwJUIyJTIwVWJ1bnR1JTNB
c3VkbyUyMGFwdC1nZXQlMjBpbnN0YWxsJTIwbWVuY29kZXIlMjAteQ==
JTVCJTJGbm90ZSU1RA==
В итоге вот такой скрипт по выгрузке получился. Скрипт с подробными комментариями, поэтому не должно возникнуть вопросов по тому как он работает.
# Скрипт для автоматического создания видео файлов за последние 24 часа.
#Создаем папку для временных файлов
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++ ));
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
# Выводим уведомление об успешном создании списков.
echo Списки картинок по каждой камере в ZM успешно созданы !
# Начинаем цикл создания видео из полученных списков по каждой камере в ZM.
for ((i=0; i<${cameraNum}; i++ ));
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
# Выводим уведомление об успешном создании видео.
echo Видео файлы по каждой камере в ZM успешно созданы !
# Выкладываем полученные видео файлы на Samba ресурс, отправляем уведомление на почту об успешном выполнении
# и чистим за собой временные файлы.
# Создаем каталог (если его не существует) на Samba сервере формата (Год/Месяц/День)
mkdir -p /home/admintemp/videos/`date +%Y`/`date +%m`/`date +%d`/
# Ищем полученные видео файлы и перемещаем их на Samba сервер.
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++ ));
echo Выгрузка по камере: ${cameraname[$i]} завершена. >> /home/admintemp/report_zm.msg
echo "" >> /home/admintemp/report_zm.msg
# отправляем созданное письмо на указанный адрес
/usr/sbin/ssmtp jakondo@jakondo.ru < /home/admintemp/report_zm.msg
# Подчищаем за собой, удаляем отработанный шаблон письма
rm /home/admintemp/report_zm.msg
#!/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 Задание выполнено !
#!/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 Задание выполнено !
На выходе мы получаем структурированную иерархию папок по датам и видео файлами за прошедшие сутки в них.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
А что за ось такая: Ubuntu Server 1.29.0 LTS
Такой оси нет, опечатка произошла! 1.29.0 это версия Zoneminder, а используемая ОС Ubuntu 14.04
Поправил синтаксическую ошибку.. спасибо!
Скрипт не работает вообщем
Выводит ошибку mencoder-script.sh: 8: mencoder-script.sh: Syntax error: «(» unexpected
В какой строке скрипта ошибка ?
cameraname=(`ls /usr/data/zm/events/ | grep ‘[a-zA-Z]’`), скорее всего не нравятся круглые скобки, ставлю либо { либо [, далее при выполнении скрипта вылазит другая ошибка, строка 18, Syntax error: Bad for loop variable
Ошибка Syntax error: «(» unexpected, возникает в строчке 8, cameraname=(`ls /usr/data/zm/events/ | grep ‘[a-zA-Z]’`), видимо ему не нравятся круглые скобки, ставлю [, либо {, далее при запуске вылазит другая ошибка Syntax error: Bad for loop variable, строка 17, ОС Ubuntu Server 18.04, ZoneMinder версии v1.30.4, благодарю за отклик.
Странно, сейчас попробовал скрипт и в частности обработку проблемных у вас строк и все нормально отрабатывает…
Вопрос, а в какой ОС вы выполняете скрипт ?
Ubuntu Server 18.04, ZM v1.30.4
># Получаем список картинок за последние 24 часа по каждой найденной камере в ZM.
> find $eventsFolder${cameraList[$i]} -mmin -60 -name \*capture.jpg > /tmp/alarmvideos/${cameraname[$i]}.list
Может -mmin -1440?
Не, тогда -mtime -1, так правильней будет. А -mmin -60, это видимо я что то проверял и такой листинг выложил, сейчас поправлю.