Показ дописів із міткою zoneminder. Показати всі дописи
Показ дописів із міткою zoneminder. Показати всі дописи

zoneminder: images to avi converter

#!/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

#!/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