Reolink Timelapse


DNS / DHCP / Nagios / Gammu / Asterisk / MusicPlayerDaemon / Arduino RaspberryPI / OpenVPN | Créer son image pour Raspberry PI | DJI Fade | Reolink Timelapse | K8S on Raspberry Pi


Récupération de photos tous les jours depuis une caméra Reolink, et création d’un Timelapse a l’aide de ffmpeg

L’objectif est de programmer la récupération d’un snapshoot tous les jours en haute résolution depuis une camera Reolink en lui demandant de se positionner à differents endroits mémorisés par le PTZ, puis de créer une video de type timelapse avec ffmpeg

Déplacement de la caméra par la fonction PTZ

Il faut avoir définit des positions enregistrées dans la configuration de la caméra Reolink, ensuite il est possible de demander à la caméra de se positionner en utilisant la commande PtzCtrl depuis un curl.

$> curl -v -k -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    "https://W.X.Y.Z/cgi-bin/api.cgi?cmd=PtzCtrl&user=USER&password=PASSWORD" \
    -d '[{"cmd":"PtzCtrl","action":0,"param":{"channel":0,"op":"ToPos","speed":32,"id":5}}]'

Remplacer W.X.Y.Z par l’ip de la caméra Reolink Remplacer USER par le login sur la caméra Reolink. Remplacer PASSWORD par le Password sur la caméra Reolink.

Ici la position demandé est celle de l’id dans le payload JSON : 5

Prise d’une photo depuis la caméra

$> curl -v -k \
    "https://W.X.Y.Z/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=abc123&user=USER&password=PASSWORD" \
    --output foo.jpg

Pour chaque caméra j’utilise la regle suivante pour nommer les snaps :

${nom_camera}_snap_${ID_PTZ}_17_04_2023-14:00:17.jpg

Par exemple je vais avoir pour la caméra foin, les fichiers :

$> $ ls -l foin_snap_1_??_04*
-rw-rw-r-- 1 ptro ptro 1520197 avril  1 18:07 foin_snap_1_01_04_2023-18:07:27.jpg
-rw-rw-r-- 1 ptro ptro 1663158 avril  2 14:03 foin_snap_1_02_04_2023-14:03:47.jpg
-rw-rw-r-- 1 ptro ptro 1714644 avril  3 14:05 foin_snap_1_03_04_2023-14:05:08.jpg
-rw-rw-r-- 1 ptro ptro 2042921 avril  4 14:06 foin_snap_1_04_04_2023-14:06:29.jpg

Génération du timelapse

###
#  foin_snap_1
index=1
for fich in `ls -t -r foin_snap_1_*`
do
    echo "cp ${fich} timelapse_${index}.jpg"
    cp ${fich} timelapse_${index}.jpg
    index=`expr $index + 1`
done

rm -f foin_1.mp4
echo "build foin_1.mpg"
ffmpeg -framerate 2 -i "timelapse_%d.jpg" -s:v 3840x2160 -c:v libx264 -crf 17 -pix_fmt yuv420p foin_1.mp4
rm timelapse_*.jpg
#
###

Le script commence par aller chercher tous les fichiers correspondant au flux foin_snap_1, et il les ordonne par date inverse avec les options -t -r, pour générer des fichiers respectant le nommage timelapse_1.jpg, timelapse_2.jpg … timelapse_n.jpg. Ensuite la commande ffmpeg est utilisée pour générer le timelapse, en utilisant la pattern timelapse_%d.jpg les captures sont ainsi bien ordonnées.

Construction d’une video de type Mosaic

$> ffmpeg -i foin_1.mp4 -i foin_2.mp4 -i cabane_1.mp4 -i cabane_2.mp4 \
    -filter_complex "nullsrc=size=3840x2160 [base]; \
        [0:v] setpts=PTS-STARTPTS, scale=1920x1080 [upperleft]; \
        [1:v] setpts=PTS-STARTPTS, scale=1920x1080 [upperright]; \
        [2:v] setpts=PTS-STARTPTS, scale=1920x1080 [lowerleft]; \
        [3:v] setpts=PTS-STARTPTS, scale=1920x1080 [lowerright]; \
        [base][upperleft] overlay=shortest=1 [tmp1]; \
        [tmp1][upperright] \
        overlay=shortest=1:x=1920 [tmp2]; \
        [tmp2][lowerleft] overlay=shortest=1:y=1080 [tmp3]; \
        [tmp3][lowerright] overlay=shortest=1:x=1920:y=1080" \
    -c:v libx264 output.mkv

DNS / DHCP / Nagios / Gammu / Asterisk / MusicPlayerDaemon / Arduino RaspberryPI / OpenVPN | Créer son image pour Raspberry PI | DJI Fade | Reolink Timelapse | K8S on Raspberry Pi