inleiding
Voor het bewaken van een terein gebruik ik het Opensource Linux bewakingsprogramma ZoneMinder 1.25. In combinatie met een kleine ITX-server pc en een capturecard neemt dit programma alle beelden op bij een "event". En je raad het al een event is bij een bewakingscamera meestal een beweging in het beeld
Alle bewegingen worden met een JPEG bestand opgeslagen (5 per seconde).
Nu heeft dit programma een prima webinterface waar je alles terug kan kijken in zowel "video stream" als JPEG modus. Maar ik vindt het handig om na elke 24 uur een totaal bestand aan te maken van alle gebeurtenissen.
Daarvoor heb ik een script geschreven die alle JPEG bestanden per camera netjes in tijdsvolgorde zet en vervolgens er met memcoder een MPEG4 van bakt. Dit werkt allemaal prima op 1 bug na.
OS: Linux Ubuntu Server 11.04 server 32-bits
Vraag
Ik haal met een variabele de naam van de hoofd directory op (=camera) en daarna ga ik de events met het commando FIND in een tekstbestandje zetten.
Echter bij deze FIND actie krijg ik alle bestanden 2x aangeleverd. Dat komt omdat er in elke map ook een symlink verwijzing staat naar het onderliggende nivo. (deze symlink wordt door het programma aangemaakt als verwijzing naar het database ID van de Event). Nu wil ik deze symlink dus negeren en de FIND actie alleen de "harde" paden laten volgen.
FIND string:
Je zou zeggen dat met de find optie -FOLLOW het zou moeten werken. Maar als die gebruik dan vindt het nog steeds de symlinks. Kan iemand zien wat ik nu fout doe ????
Voorbeeld van de directory
[/URL]
Voorbeeld output van de find actie:
complete code van script:
p.s. zie ook het zoneminder forum voor dit zelfde verhaal..
Voor het bewaken van een terein gebruik ik het Opensource Linux bewakingsprogramma ZoneMinder 1.25. In combinatie met een kleine ITX-server pc en een capturecard neemt dit programma alle beelden op bij een "event". En je raad het al een event is bij een bewakingscamera meestal een beweging in het beeld
Nu heeft dit programma een prima webinterface waar je alles terug kan kijken in zowel "video stream" als JPEG modus. Maar ik vindt het handig om na elke 24 uur een totaal bestand aan te maken van alle gebeurtenissen.
Daarvoor heb ik een script geschreven die alle JPEG bestanden per camera netjes in tijdsvolgorde zet en vervolgens er met memcoder een MPEG4 van bakt. Dit werkt allemaal prima op 1 bug na.
OS: Linux Ubuntu Server 11.04 server 32-bits
Vraag
Ik haal met een variabele de naam van de hoofd directory op (=camera) en daarna ga ik de events met het commando FIND in een tekstbestandje zetten.
Echter bij deze FIND actie krijg ik alle bestanden 2x aangeleverd. Dat komt omdat er in elke map ook een symlink verwijzing staat naar het onderliggende nivo. (deze symlink wordt door het programma aangemaakt als verwijzing naar het database ID van de Event). Nu wil ik deze symlink dus negeren en de FIND actie alleen de "harde" paden laten volgen.
FIND string:
code:
1
| find $eventsFolder${cameraList[$i]} -follow -mtime -1 -name \*capture.jpg > /tmp/alarmvideos/${cameraList[$i]}-FLV.list |
Je zou zeggen dat met de find optie -FOLLOW het zou moeten werken. Maar als die gebruik dan vindt het nog steeds de symlinks. Kan iemand zien wat ik nu fout doe ????
Voorbeeld van de directory

Voorbeeld output van de find actie:
/var/www/zm/events/Oprit/11/09/26/05/12/30/001-capture.jpg /var/www/zm/events/Oprit/11/09/26/05/12/30/002-capture.jpg /var/www/zm/events/Oprit/11/09/26/05/12/30/003-capture.jpg /var/www/zm/events/Oprit/11/09/26/05/12/30/004-capture.jpg /var/www/zm/events/Oprit/11/09/26/05/12/30/005-capture.jpg /var/www/zm/events/Oprit/11/09/26/.680/001-capture.jpg /var/www/zm/events/Oprit/11/09/26/.680/002-capture.jpg /var/www/zm/events/Oprit/11/09/26/.680/003-capture.jpg /var/www/zm/events/Oprit/11/09/26/.680/004-capture.jpg /var/www/zm/events/Oprit/11/09/26/.680/005-capture.jpg |
complete code van script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| # Enumerate existing ZoneMinder Monitors and order events cameraList=(`ls /var/www/zm/events/ | grep '[a-zA-Z]'`) cameraNum=${#cameraList[@]} eventsFolder=/var/www/zm/events/ echo Number of detected ZoneMinder Monitors: ${#cameraList[@]} # Start working through all detected ZoneMinder Monitors for (( i=0; i<${cameraNum}; i++ )); do echo Doing ZoneMinder Monitor: ${cameraList[$i]} # Get a list of images for the last 24 hours from each of the detected ZoneMinder Monitors. find $eventsFolder${cameraList[$i]} -follow -mtime -1 -name \*capture.jpg > /tmp/alarmvideos/${cameraList[$i]}-FLV.list # Sort output file for a consistent movie sort /tmp/alarmvideos/${cameraList[$i]}-FLV.list -n -o /tmp/alarmvideos/${cameraList[$i]}-FLV-sorted.list # Encode each 24hr events into a movie Mpeg4 (edit with&hight for your cam settings) mencoder mf://@/tmp/alarmvideos/${cameraList[$i]}-FLV-sorted.list -mf w=320:h=240:fps=5:type=jpg -o /tmp/alarmvideos/${cameraList[$i]}_`date +%F`.flv -of lavf -ovc lavc -oac lavc -lavcopts vcodec=flv:vbitrate=180:autoaspect:acodec=mp3:abitrate=56 -vf scale=480:360 # Find avi's with actual events-move to new dir cd /tmp/alarmvideos find *.flv -size +50k -exec mv {} /var/www/Bluemotic/videoflow/videos \; # Cleanup temp files rm -rf /tmp/alarmvideos/*FLV*.list rm -rf /tmp/alarmvideos/*.flv |
p.s. zie ook het zoneminder forum voor dit zelfde verhaal..