#!/bin/bash
MYSQL_HOST="localhost"
MYSQL_USER="user"
MYSQL_DB="zm"
MYSQL_PASS="pass"
CACHE_DIR="/var/cache/zoneminder/events"
VIDEO_DIR="video-archive"
cameras=(
5 # kafedra
1 # krapka1
2 # krapka2
6 # krapka2in
3 # krapka3
4 # stoyanka
)
for i in ${cameras[@]}; do
echo
echo "Monitor $i"
echo
if [ ! -d $CACHE_DIR/$i/$VIDEO_DIR ]; then
mkdir $CACHE_DIR/$i/$VIDEO_DIR
fi
IFS=$'\t\n'
#MYSQL_RESULT=(`mysql --skip-column-names -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -e "SELECT StartTime, EndTime FROM Events WHERE MonitorId='$i' AND EndTime IS NOT NULL"`)
MYSQL_RESULT=(`mysql --skip-column-names -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB -e "SELECT StartTime FROM Events WHERE MonitorId='$i' AND EndTime IS NOT NULL"`)
IFS=$' \t\n'
for (( j=0 ; j<${#MYSQL_RESULT[*]}; j++ )) ; do
echo "${MYSQL_RESULT[j][1]}"
PARSED_DATE=(`echo ${MYSQL_RESULT[j]} | sed -e 's/[:-]/ /g'`)
YEAR=${PARSED_DATE[0]:2:3}
MONTH=${PARSED_DATE[1]}
DAY=${PARSED_DATE[2]}
HOUR=${PARSED_DATE[3]}
MINUTE=${PARSED_DATE[4]}
SECOND=${PARSED_DATE[5]}
#echo ${PARSED_DATE[*]}
if [ -d $CACHE_DIR/$i/$YEAR/$MONTH/$DAY/$HOUR/$MINUTE/$SECOND ]; then
ffmpeg -f image2 -framerate 5 -r 5 -i $CACHE_DIR/$i/$YEAR/$MONTH/$DAY/$HOUR/$MINUTE/$SECOND/%03d-capture.jpg -s 640x480 $CACHE_DIR/$i/$VIDEO_DIR/${YEAR}.${MONTH}.${DAY}-${HOUR}.${MINUTE}.${SECOND}.avi
rm -rf $CACHE_DIR/$i/$YEAR/$MONTH/$DAY/$HOUR/$MINUTE/$SECOND
fi
done
done
Показ дописів із міткою zoneminder. Показати всі дописи
Показ дописів із міткою zoneminder. Показати всі дописи
zoneminder: images to avi converter
Підбираємо опримальний об'єм пам'яті для zoneminder
#!/bin/sh
# Copyright (C) 2010 Chris "Pada" Kistner
# Modified by PacoLM to check only shared memory settings
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# if you find errors, check that coreutils are installed, if not, run the command below
# apt-get -y install coreutils bc
echo "--- Checking memory setting..."
page_size=$(getconf PAGE_SIZE)
mem_bytes=$(awk '/MemTotal:/ { printf "%0.f",$2 * 1024}' /proc/meminfo)
mb=1048576
mem_bytes_mb=$(expr $mem_bytes / $mb)
shmmax=$(echo "$mem_bytes * 0.90" | bc | cut -f 1 -d '.')
shmmax_mb=$(expr $shmmax / $mb)
shmall=$(expr $mem_bytes / $page_size)
shmmax_cur=$(sysctl -n kernel.shmmax)
shmmax_cur_mb=$(expr $shmmax_cur / $mb)
shmall_cur=$(sysctl -n kernel.shmall)
echo "-- Total memory = $mem_bytes B = $mem_bytes_mb MB"
echo "-- Page size = $page_size B"
echo "-- Current kernel.shmmax = $shmmax_cur B = $shmmax_cur_mb MB"
echo "-- Current kernel.shmall = $shmall_cur pages"
if [ "$shmmax" -eq "$shmmax_cur" ] && [ "$shmall" -eq "$shmall_cur" ]; then
echo "-- Recommended shm values already set"
else
echo "-- Recommended: kernel.shmmax = $shmmax B = $shmmax_mb MB"
echo "-- Recommended: kernel.shmall = $shmall pages"
fi
# Done
echo "--- Done."
Робимо з серії JPEG-файлів відео-файл в Zoneminder
Все просто, r - кількість кадрів за секунду (можна глянути в налаштуваннях камери), -b - бітрейт (якість).
ffmpeg -r 5 -b 1800 -i %03d-capture.jpg out.mp4
Видалення старих фоток в zoneminder
Простенький пайтоновський скрипт, який затирає кеш з фотками з 4 дні
#!/usr/bin/python
import MySQLdb
import sys
import shutil
cache='/var/cache/zoneminder/events'
try:
conn=MySQLdb.connect(host="localhost", user="zmuser", passwd="******", db="zm")
except MySQLdb.Error, e:
print "Error %d: %s" % (e.args[0], e.args[1])
sys.exit (1)
cursor=conn.cursor()
cursor2=conn.cursor()
cursor.execute("SELECT * FROM Monitors")
while (1):
row = cursor.fetchone ()
if row == None:
break
sql = 'SELECT YEAR(StartTime) AS y, MONTH(StartTime) AS m, DAY(StartTime) AS d, DATE_FORMAT(StartTime, "%m") AS mf, DATE_FORMAT(StartTime, "%d") AS df, DATE_FORMAT(StartTime, "%y") AS yf '
sql += 'FROM Events '
sql += 'WHERE MonitorId=%s AND StartTime <= DATE_ADD(CURDATE(), INTERVAL -4 DAY) ' % row[0]
sql += 'GROUP BY m,d; '
cursor2.execute(sql)
while (1):
row2 = cursor2.fetchone()
if row2 == None:
break
directory = "%s/%s/%s/%s/%s/" % (cache,row[0],row2[5], row2[3],row2[4],)
print directory
shutil.rmtree(directory)
cursor.close ()
cursor2.close ()
conn.close ()
zoneminder: підключення звичайної веб-камери
Штатна ноутбучна запустилась відразу, а "Bus 003 Device 003: ID 046d:08da Logitech, Inc. QuickCam Messanger" не захотіла. Тому, що ця камера працює в v4l версії 1, а не у версії 2, яка стоїть за замовчуванням. У файлі: /usr/bin/zmdc.pl робимо відповідні зміни
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
$ENV{LD_PRELOAD} = '/usr/lib/libv4l/v4l1compat.so';
my @daemons = (
'6zmc',
'zma',
'zmf',
'zmfilter.pl',
'zmaudit.pl',
'zmtrigger.pl',
'zmx10.pl',
'zmwatch.pl',
'zmupdate.pl',
'zmtrack.pl'
);
ZoneMinder: Bareword "PROT_READ" not allowed while "strict subs"
/usr/share/perl5/vendor_perl/ZoneMinder/Memory.pm
Міняємо лінію 118
if ( "yes" eq 'yes' ) # 'yes' if memory is mmapped
на
if ( "no" eq 'yes' ) # 'yes' if memory is mmapped
Міняємо лінію 118
if ( "yes" eq 'yes' ) # 'yes' if memory is mmapped
на
if ( "no" eq 'yes' ) # 'yes' if memory is mmapped
Підписатися на:
Дописи (Atom)