Jak z MJPEG streamu z kamery ukládat v intervalu jeden snímek

Jak z MJPEG streamu z kamery ukládat v intervalu jeden snímek

Krkolomný název, což? Ale vyjadřuje přesně to, co chceme udělat tj. z webkamery, která nám kdesi třeba nad staveništěm spokojeně bzučí, dostaneme například co 5 minut jeden snímek ve formátu JPEG.

Kamera má navíc HTTP Basic Auth, takže se nám to ještě komplikuje i o toto. Nejjednodušší, jak jsem objevil je přes curl stáhnout kousek streamu:

curl -m 2 --user uzivatel:heslo "http://co.kde.cz/video.cgi?videp.mjpg"
  >output/out.mjpg

Kde parametr „m“ vyjadřuje dobu po kterou se bude stream stahovat – teoreticky stačí i jedna vteřina, ale měl jsem občas problém s kolísavostí kvality internetu na straně stavby, tedy raději 2s. Parametr „user“ nám zabezpečí autentizaci.

Následně pak pomocí ffmpeg vyexportovat z videa snímky:

ffmpeg -i out.mjpg -vcodec copy output/frame%d.jpg

Nakonec vybrat nějaký snímek (uprostřed, chce to vyzkoušet, kolikátý v řadě bude vzhledem k délce streamu) a ten si vytáhnout někam bokem.

Celý script, který následně plácneme do crona, aby se spouštěl například co 5 minut by tedy mohl vypadat nějak takto:

#!/bin/bash
curl -m 2 --user uzivatel:heslo "http://co.kde.cz/video.cgi?videp.mjpg"
  >output/out.mjpg
ffmpeg -i out.mjpg -vcodec copy output/frame%d.jpg
mv output/frame3.jpg final/`date +"%d%m%y%H%M"`.jpg
rm output/*

Ošetření chyb a výstupů nechám plně ve vaší kompetenci.

One thought on “Jak z MJPEG streamu z kamery ukládat v intervalu jeden snímek

  1. Pingback: Jednoduché časosběrné video - Lomítkáři

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *