Trebao sam ovih dana napraviti neki screencast. Nakon malo traženja na netu, naišao sam na zgodni Istanbul (i nešto manje zgodni Byzanz – dobra stvar je što napravi GIF animaciju screencasta, loša stvar je što se većina viewera ruši na multi-megabajtnim GIF datotekama :), no iz nekog razloga i Istanbul, i izravno grabanje koristeći ffmpeg su mi užasno spori i zauzimaju sav CPU. Vjerojatno zato što koristim open-source ati drivere bez neke akceleracije…
Prije (ponovnog) kretanja u avanturu sa ATIjevim binarnim driverima za Linux u nadi da će se stvar time automagično popraviti, probao sam sa GStreamer onelinerom i primjetio da on troši minimalno resursa i radi sasvim dobro. Nakon malo podešavanja parametara, naišao sam na savršenu kombinaciju, a ovaj blog post je način da si to negdje zapišem (tko zna, možda nekome bude i korisno).
Dakle, za GStreamer ste već vjerojatno čuli da je multimedijska platforma za Linux. No zanimljivo za ovu priču, uz njega dolazi i komandnolinijski alat za kreiranje multimedijskih pipelineova kojem samo navedete potrebne elemente/pluginove/module koji obrađuju zvuk ili sliku, potjerate signal kroz njih, i na kraju dobijete nešto.
Prevedeno u problem screencastanja:
gst-launch-0.10 ximagesrc ! ffmpegcolorspace ! \
video/x-raw-yuv,framerate=3/1 ! theoraenc ! oggmux ! \
filesink location="movie.ogg"
Objašnjenje: ximagesrc graba sliku (fullscreen), ffmpegcolorspace to prebacuje iz RGB u YUV format, meni je za screencast bilo dosta 3 FPS-a (za mojih 1600×1050 na tim jadnim driverima i gstreamer pojede sav proc i nije mu dosta na 25fpsa), potom theoraenc zakodira, oggmux spremi u prikladan format i na kraju filesink zapiše na disk.
Kao što se vidi iz priloženog, u screencastu nisam koristio audio pa je pipeline prilično jednostavan. Može se složiti i da se uzima audio s mikrofona (ili neke mp3ce ili slično) uz dosta kompliciraniji pipeline, ali to mi za ovu priliku nije trebalo.