Timelapse видео

Здравейте,

Преди около месец с колегата Андрей пуснахме метео станция за град Добрич (за нея ще пиша друг път) – и покрай този проект решихме да сложим камери при станцията за да правим timelapse видео.

За цялата направа на timelapse видео-то използвах :

  1. Крон който да тегли моментна снимка от камерата през 1 минута и да я записва с уникално име (дата-час-минута)
  2. Скрипт който да събира всички тези снимки в timelapse видео
  3. Скрипт който да забързва това видео за да се получи клипче от минута в която са заснети 24 часа

Ето и как изглеждат нагледно нещата :

Cron:

*/1 * * * * root curl -s "http://111.112.111.33:8889/webcapture.jpg?command=snap&channel=1" > "/var/www/cdn.root.bg/weather-pics/$(date +\%Y\%m\%d\%H\%M\%S).jpg"
30 5 * * * root /root/scripts/timelapse.sh &> /dev/null

тук е важно да се спомене, че скрипта който прави видеото се пуска всяка сутрин в 5:30 за да може да хване изгрева!

Timelapse скрипт:

#!/bin/bash
rm -f /var/www/cdn.root.bg/timelapse.mp4
rm -f /var/www/cdn.root.bg/weather-pics/out.mp4
cd /var/www/cdn.root.bg/weather-pics/ ; cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - -vcodec libx264 out.mp4 ; ffmpeg -i out.mp4 -vf "setpts=(PTS-STARTPTS)/10" -r 10 ../timelapse.mp4
rm -f /var/www/cdn.root.bg/weather-pics/*.jpg ; rm -f /var/www/cdn.root.bg/weather-pics/*.jpg.webp

За да няма никакъв кеш от уеб сървъра nginx, съм добавил специално правило което да сервира всеки път на ново от cdn-а timelapse.mp4

location = /timelapse.mp4 {
        # kill cache
        add_header Last-Modified $date_gmt;
        add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        if_modified_since off;
        expires off;
        etag off;
        add_header "Access-Control-Allow-Origin" "*";
        add_header P3P "Can I help you? Contact me via https://root.bg/contacts/, CP=CAO ADMa DEVa IND PHY ONL UNI COM LOC";
}

PS. версията на ffmpeg която използвам е : 3.4.6 – преди това бях пробвал с по-нова инсталирана от snap но не работеше както исках.

И резултата е следния :

Това е!