Idée de base
Créer un timelapse quotidien d’une camera de surveillance.
Extension possible
- Créer un timelapse sur demande (choix de l’intervalle de temps)
- Créer un comparatif sur 365 jours
Créer un timelapse quotidien d’une camera de surveillance.
Une caméra TrendNet TV-IP321PI programmée pour placer dans un dossier une image prise à intervalle régulier.
La programmation de l’intervalle sur la caméra IP se fait en 2 temps:
Une vidéo timelapse d’une durée de 60 secondes me semble être une durée adéquate pour un visionnement.
60 secondes à un taux de 24 images par secondes donne 1440 images.
En prenant 1 image par minute, on obtiens nos 1440 images chaque jour.
Après plusieurs tentatives, j’ai finalement trouvé une recette qui fonctionne basée sur mplayer/mencoder
Voici la commande utilisée:
/usr/bin/mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect:vqscale=3 -vf scale=960:540 -mf type=jpeg:fps=24 mf://@fichier.list -o output.avi
Le fichier fichier.list est un fichier texte contenant le nom de toutes les images.
On le crée avec la commande
ls -1tr *.jpg > fichier.list
Il ne reste plus qu’a automatiser le processus complet, via un script qu’on appelle dans la crontab 1 fois par jour
5 1 * * * /path_to/timelapse.sh >> /tmp/timelapse.log 2>&1
#!/bin/bash # Script qui transforme une serie d'image prise a intervalle en video de type timelapse # Les cameras IP sont programmées pour crée une image a chaque minute) # Voir documentation sur http://cvallee.com/creation-de-timelapse-quotidien/ # Comme le script est executer la journée suivante, on recupere les fichiers de la veille yesterday=$(date --date="yesterday" +"%Y%m%d") twodaysago=$(date --date="2 days ago" +"%Y%m%d") #yesterday=$1 echo "Yesterday: $yesterday" workingdir="/var/www/vhosts/valtechnologie.local/httpdocs/camera" timelapsedir="$workingdir/timelapse" #Les fichiers images ont la forme: 192.168.99.6_01_20160629193702_TIMING.jpg echo "Creation dossier $timelapsedir/$yesterday" mkdir -p $timelapsedir/$yesterday echo "Deplacement des fichiers vers le dossier $timelapsedir/$yesterday" mv $workingdir/*_01_$yesterday*_TIMING.jpg $timelapsedir/$yesterday cd $timelapsedir/$yesterday #On efface les fichiers vides, sinon l'encodage s'arrete sur un EOF find $timelapsedir/$yesterday -size 0 -print0 | xargs -0 rm #On recherche les adresses des fichiers des cameras et on cree la video for camera in `ls -1tr 192.168.99.* | awk -F '_' '{print $1}' | sort | uniq`; do ls -1tr $camera*.jpg > $camera.list #Good Quality /usr/bin/mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect:vqscale=3 -vf scale=1024:768 -mf type=jpeg:fps=24 mf://@$camera.list -o ../$camera.$yesterday.avi #Low Quality # /usr/bin/mencoder -idx -nosound -noskip -of lavf -lavfopts format=mp4 -ovc x264 -x264encopts pass=1:bitrate=2000:bframes=0:crf=24 -vf scale=320:240 -mf type=jpeg:fps=24 mf://@$camera.list -o ../$camera.$yesterday.mp4 # echo "On efface les fichiers generer en trop" # rm ../$camera.$yesterday.avi.$yesterday.avi # rm ../$camera.$yesterday.avi.$yesterday.mp4 # rm ../$camera.list.$yesterday.avi # rm ../$camera.list.$yesterday.mp4 done echo "On efface les fichiers source d'il y a 2 jours" rm -rf $timelapsedir/$twodaysago