Timelapse видео
Здравейте, Преди около месец с колегата Андрей пуснахме метео станция за град Добрич (за нея ще пиша друг път) – и покрай този проект решихме да сложим камери при станцията за да правим timelapse видео. За цялата направа на timelapse видео-то използвах :
- Крон който да тегли моментна снимка от камерата през 1 минута и да я записва с уникално име (дата-час-минута)
- Скрипт който да събира всички тези снимки в timelapse видео
- Скрипт който да забързва това видео за да се получи клипче от минута в която са заснети 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 но не работеше както исках.
И резултата е следния :
Това е!