Portál AbcLinuxu, 27. dubna 2024 01:26

Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg

24.11.2021 18:57 | Přečteno: 5912× | Výběrový blog

Asi znáte takové ty záběry rychle letících mraků, rozkvétajících kytiček, hnijícího jídla atd. Tomu se říká časosběr, protože sbíráme snímky v průběhu delšího času. Vytváří se tak, že kameru nebo foťák umístíme na stativ (rukou by to nešlo) a v pravidelných intervalech děláme fotky. Ty pak poskládáme za sebou třeba rychlostí 25 snímků za sekundu nebo rychleji, pokud chceme vyšší kvalitu, a uděláme z nich video.

Dá se použít třeba zrcadlovka, která má vstup pro dálkové ovládání (které budeme emulovat pomocí nějakého toho Atmelu, ESP32, RISC-V atd.) či kompaktní foťák ovládaný přes USB. Dneska si ale ukážeme, jak tohle udělat s webkamerou - což může být ta běžná spotřební, kterou teď asi všichni používáte na videokonference, nebo nějaká "průmyslovější" třeba i s C-mount výměnnými objektivy, která má ale stejné rozhraní - hardwarově UVC (USB video device class) a v GNU/Linuxu je to Video4Linux (v4l2, /dev/video*).

Po připojení webkamery k USB si o ní můžeme zjistit základní informace:

dmesg -H | grep uvc | tail
ls -l /dev/video*
v4l2-ctl --all

Zobrazení živého náhledu - asi nejprimitivnější způsob je tento:

vlc v4l2:///dev/video0

problém je tu zpoždění (viz níže) způsobené tím, že VLC používá cache/buffer, což se nám ale při náhledu živého videa vůbec nehodí. Výhoda tohoto přístupu naopak je, že tu máme GUI pro nastavení kamery: Nástroje / Efekty a filtry / Ovládání v4l2 - záleží na konkrétní kameře, co tam jde nastavit (vyvážení bílé, expozice, zaostření atd.).

Uložení jednoho nebo několika snímků pomocí ffmpeg:

ffmpeg -f video4linux2 -s 1920x1080 -i /dev/video0 -ss 0:0:2 -frames 3 "%03d.jpeg";

Parametrem -frames zadáváme počet snímků, které chceme najednou vyfotit. Do názvu je potřeba přidat ještě třeba datum/čas nebo soubory následně někam přesouvat, aby nedocházelo k jejich přepisu. Nevýhoda je v tom, že když budeme tenhle příkaz volat v cyklu, bude se kamera pokaždé otevírat a zavírat (myslím tím softwarově) a někdy se pak může "unavit" a přestat fungovat - takže pak po několika hodinách nebo dni přijdeme a zjistíme, že se nám udělalo jen pár fotek a pak už to jen logovalo chyby (to se mi fakt stalo). Asi by to šlo nějak ošetřit, chyby detekovat a přidat případný reset USB zařízení... ale víc se mi osvědčil následující přístupu.

Použijeme přehrávač mpv:

mpv --no-cache --untimed /dev/video0 --input-ipc-server=mpv

díky tomu vidíme okno s živým náhledem videa, takže můžeme kameru hezky zaměřit a i průběžně sledovat, jestli je vše v pořádku. Parametry --no-cache a --untimed nám zajistí, že video bude téměř v reálném čase (nějaké minimální zpoždění tam je, ale je to dost dobré). A poslední parametr řekne mpv, aby vytvořil unixový soket s daným názvem. Přes tento zvláštní soubor pak můžeme přehrávači zadávat příkazy. Snímky bychom mohli vytvářet i klávesovou zkratkou "s", ale přes ten soket je to lepší.

echo "screenshot-to-file \"$(date --iso-8601=ns).jpeg\"" | socat - ./mpv

Tenhle příkaz můžeme volat v cyklu a snímat fotky pro náš časosběr:

while true; do ...; sleep 60; done

Pokud tam nepotřebujeme mít datum, tak stačí:

for ((n=1;;n++)); do echo "screenshot-to-file $n.jpeg" | socat - ./mpv; sleep 60; done

Kamera se otevře jen jednou na začátku a mpv ji celou dobu drží (a zároveň zobrazuje okno s náhledem). Jen jsem nepřišla na to, jak mpv přimět, aby při ukončení udělal unlink() toho soketu, takže ho musím mazat ručně, ale to je detail.

Mimochodem, přehrávač ukončíme pomocí klávesy "q" a nekonečný cyklus pomocí Ctrl+C.

Z té hromady obrázků pak vyrobíme video příkazem:

ffmpeg -framerate 25 -i '%d.jpeg' -vf setsar=1 -c:v libx265 -crf 15 -preset ultrafast -pix_fmt yuv444p -c:a copy video.mkv

Dá se to ještě všelijak vylepšovat, ale jako základ si myslím, že to stačí. Doufám, že vám to k něčemu bude a že se v diskusi pochlubíte se svojí tvorbou :-)

P.S. Tento článek původně vyšel na Farmě Trollí hnízdo (dostupné přes Tor): Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Gréta avatar 24.11.2021 19:02 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin

supr blogísek :D ;D

btw ten onion link je asi blbě protože tam torem nejde vlízt

oslavná píseň na pana soudruha generalisima prezidentčíka Petra Pavla Pávka 🎶🫡🦚🎶
24.11.2021 19:19 Monika Kokešová | skóre: 4 | blog: Kokeshka
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg

supr blogísek :D ;D

Díky :-)

btw ten onion link je asi blbě protože tam torem nejde vlízt

Teď jsem to zkoušela a funguje mi to. Jiné stránky na Toru ti fungují?

24.11.2021 19:26 _
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
no je to uz druha stranka u ktere tvrdi, ze ji dnes nefunguje :)))
Gréta avatar 24.11.2021 19:46 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Teď jsem to zkoušela a funguje mi to. Jiné stránky na Toru ti fungují?

z tor browseru na android mobilu se tam dostanu ale tady mi to vrací todlecto :O :O

Invalid Onionsite Address The provided onionsite address is invalid. Please check that you entered it correctly. Details: 0xF6 — The provided .onion address is invalid. This error is returned due to one of the following reasons: the address checksum doesn't match, the ed25519 public key is invalid, or the encoding is invalid.

dělá to i po uplným vypnutí zapnutí torbrowseru

Gréta avatar 24.11.2021 20:09 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg

dělá mi to jenom v torbrowseru na desktopu a si myslim že by to mohlo bejt verzí toru :O :O

když jakoby udělám

torsocks curl http://xaqbcbskm7otauau.onion/t/vitejte-na-farme-trolli-hnizdo/7

tak se tam dostanu protože tam má debian starou verzi 0.4.5.10 toru

starou verzi mam i na mobílku ale tor browser má vod 8mýho listopadu verzi 4.6.8 hele :O :O

24.11.2021 22:50 jejda | skóre: 23 | blog: jejda
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
A nové 56 znaků dlouhé onion adresy ti taky nejdou? Mě před nedávnem přestaly fungovat krátké 16 znaků dlouhé adresy. Tor web prohlížím obyčejným firefoxem. Něco se o tom piše tady. Nepodařilo se mi zjistit, jak nastavit tor aby v prohlížeči fungovaly současně obě verze adres.
Gréta avatar 25.11.2021 12:28 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg

nefungujou jenom ty starý v2

v3 fungujou

In September 2020, Tor started warning onion service operators and clients that v2 will be deprecated and obsolete in version 0.4.6. Tor Browser started warning users in June, 2021.

In July 2021, 0.4.6 Tor will no longer support v2 and support will be removed from the code base.

In October 2021, we will release new Tor client stable versions for all supported series that will disable v2.

24.11.2021 19:40 Miriam | blog: RychlovarnaKonvice
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin
přes onion proxi mi to nejde :-(
24.11.2021 20:28 Kdysi
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin
Na trochu větší hraní bylo pod Linuxem tohle

http://slowmovideo.granjow.net/download.html

a vypadá to, ze to ještě není úplně mrtvé
Max avatar 24.11.2021 21:27 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin
Před dvěma roky jsem dělal časosběr výstavby jednoho našeho křídla. Fotky jsem dělal 4k IP kamerou. Jednalo se o roční časosběr. Můj první pokus.
Problémy, které jsem musel vyřešit, byla změna počasí, posun času a jiné délky dnů a nocí v rámci celého roku. Skriptem jsem si tedy vytahal range fotek z nějakého času, u kterého bylo zaručeno, že už nebude noc (dělal jsem fotky kjaždou hodinu od 6:00 do 18:00). Zároveň, že sluníčko bude v podobné poloze. Z vytažených fotek jsem pak udělal video pomocí ffmpeg podobně jako ty.
Pokud poloha Slunce nebyla stejná, nebo nějaký den byla tma, tak video blikalo. Výběr vhodných fotek by šel řešit analýzou (naskriptovanou) konkrétních fotek, ale to už by bylo poněkud na delší dobu.
Nastřílel jsem to tenkrát od oka a pak předal managementu.
Jeden bývalý kolega zkoušel časosběr během jednoho dne, což je mnohem jednodušší a jde to udělat úplně snadno samo pomocí GoPro kamery, která to umí moc dobře by default.
Zdar Max
Měl jsem sen ... :(
24.11.2021 21:37 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin
Jen jsem nepřišla na to, jak mpv přimět, aby při ukončení udělal unlink() toho soketu, takže ho musím mazat ručně, ale to je detail.
Žeby?
mpv --no-cache --untimed /dev/video0 --input-ipc-server=mpv; rm mpv
Mimochodem, přehrávač ukončíme pomocí klávesy "q" a nekonečný cyklus pomocí Ctrl+C.
Tak sa dá:
for ((n=1;;n++)); do if [ -e mpv ]; then echo "screenshot-to-file $n.jpeg" | socat - ./mpv; else break; fi; sleep 60; done
alebo
for ((n=1;;n++)); do echo "screenshot-to-file $n.jpeg" | socat - ./mpv || break; sleep 60; done
debian.plus@protonmail.com
25.11.2021 01:56 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin
Miesto:
for ((n=1;;n++)); do echo "screenshot-to-file $n.jpeg" | socat - ./mpv; sleep 60; done
je lepšie:
while [ 1 ]; do echo "screenshot-to-file $n.jpeg"; sleep 60; done | socat - ./mpv
debian.plus@protonmail.com
25.11.2021 08:38 jb
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin
Pěkné. Vyzkouším. Já mám z webkamery třeba tady toto.

Ale to je z windows pomoci BooruCam a snímky jsem spojoval Avidemuxem. Poslední dobou jsem zpohodlněl a časosběry dělám GoPročkem.
25.11.2021 13:54 jejda | skóre: 23 | blog: jejda
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin
Jsem si kdysi zkoušel nahrát podobným způsobem webkameru na náměstí v Kroměříži. Ta ale dávala přes web jenom asi dva obrázky za sekundu. ffmpeg si to tahal napřímo a rychlost videa jsem reguloval filtrem setpts.
ffmpeg -use_wallclock_as_timestamps 1 -f mjpeg -i 'http://217.197.157.7:7070/axis-cgi/mjpg/video.cgi?camera=1&resolution=1024x768&fps=2&compression=10' -c:v libx264 -r 60 -vf "setpts=0.03333*PTS" kmcam-x30.avi
Takto se to nahrálo 30x zrychleně. Když jsem se na to chtěl podívat normální pomalou rychlostí, bylo potřeba to zpomalit přehrávačem.
mpv --framedrop=no --speed=0.033 kmcam-x30.avi
Dneska už ona webkamera nevímproč nejede.
JiK avatar 25.11.2021 15:50 JiK | skóre: 13 | blog: Jirkoviny | Virginia
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Co je k vidění na náměstí v Kroměříži? Jsem z celkem blízkého okolí a i přes lokální patriotismus je to považováno za prdel světa.
25.11.2021 17:53 jejda | skóre: 23 | blog: jejda
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Nevím, mám k tomu místu docela vztah. Ono jak člověk trochu pozná svět a má možnost srovnávat, tak občas zjistí, že všude je chleba o dvou kůrkách a že na rodným hnoji nebylo kolikrát zas až tak nejhůř. Taky jsem tam nebyl naživo spoustu let. Asi začínám být sentimentální neboco :-D. Protože nemám webkameru ani foťák ani nic co by umělo zachytávat obraz, napadlo mě ten pokus s timelapse videem vyzkoušet online. Jestli je ta webkamera v Kroměříži nebo v Paříži není technicky moc důležité. Na všech je plusmínus stejná nuda. S tím časosběrným zrychlením už je to zajímavější podívání.
25.11.2021 20:53 kolcon | skóre: 15 | blog: kolcon
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg
Odpovědět | Sbalit | Link | Blokovat | Admin

da se nejak udelat i opacny postup, tj. pustim video a neco z toho vytvori zarizeni /dev/video1?

Gréta avatar 25.11.2021 23:45 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: Časosběrná videa pomocí webkamery, v4l2, mpv a ffmpeg

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.