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