C-ből videó képkockák elérése?

Fórumok

Kedves HUP-osok!

Sajnos mozgókép terén igen kezdő vagyok, ezért primitív kérdést teszek fel: hogyan lehet egyszerűen egy mozgókép kockáit elérni C alól? Nem megjeleníteni akarom hanem elemezni, tehát valami szép tömbben kellenének az RGB-értékek.

Linux alól érdekelne, de hordozható megoldás még jobb volna.

Gondolom, az mplayer/vlc/ffmpeg ... lib-jeihez van valamiféle API, csak nem tudom, melyik használata célszerűbb, egyszerűbb, melyiknek és hol lássak neki.

Előre is kösz!

Hozzászólások

gstreamert javasolnam, egyszerubb - szerintem - az apija, mint ffmpegnek.

Én valószínűleg úgy oldanám meg, hogy nem közvetlenül a mozgóképet kezdeném kezelni, hanem ffmpeg-gel kiemelném belőle a számomra érdekes képkockákat, azokat PPM-be konvertálnám (egy kocka, egy kép), abban meg már ott vannak az RGB értékek egy egészen egyszerű adatszerkezetben.

---
Science for fun...

Meg is ijedtem! :-)

Nekem csak valami hihetetlenül primitív dolog kellene: egymás után a képkockák RGB-tömbjei. Semmi szinkronizálás, semmi audio, ... Erre a gstreamer tényleg kicsit sok, de talán megbírkózom vele. (Bár ha lenne az én egyszerű problémámhoz egy egyszerű megoldás, annak örülnék leginkább.)

Az eredeti kérdésből nem derült ki, hogy pontosan mi is a cél (például mit takarnak az "üzemi körülmények"), de az a rész, mely szerint "tehát valami szép tömbben kellenének az RGB-értékek" eléggé arra utal, hogy itt tulajdonképpen a PPM lenne a legjobb megoldás.

Persze lehet mindenféle könyvtárakkal zsonglőrködni, de az ember akkor is ugyanazt csinálja, csak legföljebb bonyolultabban, hiszen egy PPM kép nem más, mint az RGB értékek tömbje, meg az elején még 5 szám.

Én amúgy rendszeresen vacakolok PPM képekkel hasonló célból, így erősen érdekelne, hogy szerinted például a gd miért jobb megoldás.

---
Science for fun...

Ha nem felhasznalonak szanod, hanem sajat (kutatasi) celra kell, akkor a legegyszerubb, ha mplayerrel kimented a video kepkockait (mondjuk -vo png), imagemagickkel konvertalod valami konnyebben importalhato formaba (ha a libpng nem tetszik), es feldolgozod. Sokkal egyszerubben meguszod, ugyfelhez persze nem ajanlanam.

--
The iPad: Because the iPhone was too small for other people to notice you.

5 éve foglalkozok video elemzéssel. Mi a célod az egésszel?

Mar csak azert kerdezem, mert ez hatarozza meg az eszkozt.

Ha offline akarsz elemezni, akkor convertald at mplayer-rel pl. png-be, aztan olvasd be Qt-vel (bar az C++).

Ha feltetlenul a video file-lal akarsz dolgozni, akkor nem tudom mi a legjobb megoldas; en ffmpeg-et hasznaltam. De ez sokkal nagyobb szivas, ha pl. pozicionalni akarsz.

ffmpeg libjei nagyon jok, en oket hasznalom.

Elég egyszerű megoldás, ha mencoder kimenetéről bolvasol egyszerűen stdin-ről egy frame-t (pl: rgb32: 640x480x4=1228800 byte -> 4 byte-os csoportokban (RGBA) 1 pixel, vagy rgb24: 640x480x3=921600 byte -> 3 byte-os csoportokban (RGB) 1 pixel).
Ezt a frame-t aztán már fel tudod dolgozni. Csak azt kell tudni, hogy milyen méretű a videód.

Egy példa 640x480-as videóra (az mencoder kitolja a stdout-ra, amit az mplayer jelenít meg a stdin-ről):

mencoder input_file -nosound -vf format=rgb32 -ovc raw -of rawvideo -really-quiet -o /dev/stdout | mplayer -demuxer rawvideo -rawvideo w=640:h=480:format=rgb32 -vc rawrgb32 -fps 25 -

Illetve ha a saját programoddal akarod feldolgzni:

mencoder input_file -nosound -vf format=rgb32 -ovc raw -of rawvideo -really-quiet -o /dev/stdout | beolvasoprogramod