Ha egy régi számítógép kimenetét akarjuk fölvenni, akkor több alternatíva is van. Sokan egyszerűen emulátor kimenetét rögzítik, de amikor egy adott gépet szeretne az ember bemutatni, akkor arra nem jó az emulátor. Kicsit bonyolultabb, ha felveszem a monitor képét egy kamerával. Az eredmény nagyban függ a felvevőeszköztől, a külső körülményektől és a monitortól. Ha túl sok a fény, akkor az becsillanhat, tükröződhet, ha túl kevés, akkor meg a monitor kávája nem látszik. Pontosan tengelyszimmetrikusan elhelyezni sem egyszerű és akkor még nem beszéltem arról, hogy a rögzítési és a monitor képfrissítési frekvenciája milyen csíkosodást, utánhúzást, moarét tud produkálni. A harmadik lehetőség, hogy a kimeneti jelet valamilyen digitalizáló kártya segítségével rögzíti az ember, a bejegyzés erről a harmadik módszerről szól.
A cél tehát a lehető legjobb képminőség. Sokan egyszerűen rákötik egy valamilyen digitalizálóra, felveszik felskálázzák és kész. Az egyszerűbb szoftvereknél a megjelenített képpontok számát lehet megadni, de ezzel több baj is van. Az analóg videójel sokkal bonyolultabb, elég sok részből áll. Ha nem sikerül a teljes sorra vetített képpont frekvenciát eltalálni, akkor az több hibát is okoz. Első hiba, amit egyszerű belátni, hogy amennyiben nem egyezik a gép által megjelenített és a rögzített képpontok száma, akkor két eset lehetséges. Ha a mintavételezés gyakrabban történik, mint a megjelenítés, akkor egyes képpontok többszöröződni fognak, míg másoknál ez nem történik meg. Két azonos vastagságú vonal így a videón már nem lesz az. Még rosszabb eset amikor a mintavételezés túl alacsony és információt veszítünk, lesznek képpontok amiket nem rögzítünk. Az ideális az, hogy minden egyes képpontot a megjelenítéshez tartozó időintervallum közepén, tökéletes fázispontossággal mintavételezünk. Esetleg még az egész számú többszörös mintavétel is megfelelhet, de ilyenkor megtörténhet, hogy a megjelenítési időintervallum elején vagy végén még nem lesz stabil a jel, többet kell játszani a fázissal, már ha sikerül egyáltalán beállítani.
A megfelelő pontosságú mintavételezéshez szükség van egy kártyára aminél lehetőség van az összes paraméter szabályozására. Egy VisionRGB-ES1-re esett a választásom pár éve, mert megfizethető áron sikerült hozzájutni. A megadott linken elérhető a hozzá tartozó alap szoftver, linuxra nem jelentett igazán kihívást a kernel modul lefordítása. A csomaghoz tartozó Vision-nel viszont meggyűlt a bajom. Lefordítani nem volt gond, de a stabilitása nagyon halovány, például ha váltani szeretnék a megjelenítési ablak és a bemeneti jel beállításai között, akkor dob egy hibát és kilép. A rossz tapasztalataim miatt maradtam a VCS-nél ami Windows és linux alatt is képes megbízhatóan működni. A Microsoft rendszerére van előre fordított verzió, Linux Mint-hez magamnak kellett lefordítanom a függőségével együtt a meglévő dokumentációk alapján, azokat csak pár ponttal szereném kiegészíteni:
- A VCS az opencv-re épül, ennek a doksija szépen leírja még a függőségeket is. Alig néhány parancs és kb. 45 perc egy 3. generációs i5-ön a fordítás. A doksitól eltérően én csak 4 szálon (-j4) fordítottam, mert 7 szál esetén kifutott a 8GB memóriából.
sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev [optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev git clone https://github.com/opencv/opencv/tree/3.2.0 cd opencv cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 sudo make install
- A RAM-ból kifutás mellett az is boldogított, hogy az opencv és visionrgb include-okra szüksége van a VCS-nek. Ezeket átlinkeltem a megfelelő helyre, persze lehetett volna a PATH-ot is birizgálni, de az egyszerűbb utat választottam. Ha a Vision forrását máshová csomagoltátok ki, akkor természetesen azzal kell a linket létrehozni.
sudo ln -s /usr/local/include/opencv4/opencv2 /usr/local/include/opencv2 sudo mkdir /usr/local/include/visionrgb/ sudo ln -s /usr/src/Vision/include /usr/local/include/visionrgb/
- A VCS fordítása már csak két lépést igényelt
git clone https://github.com/leikareipa/vcs.git qmake && make
- Az utolsó lépés egy indító ikon létrehozása volt, de ezt mindenki a saját ízlése szerint kell, hogy megugorja.
Miután a VCS végre bevethető állapotba került már csak be kell azt állítani. Erről készítettem egy videót amin jól láthatóak a képhibák és az, hogy a beállítások változtatásával miként lehet azokat eltüntetni.
A videóban látható főbb lépések:
- Bemeneti jel felbontásának beállítása az elvárt értékre. Ide a megjelenített képpontok számát kell megadni (640×200)
- Felskálázás egész számú többszörösre
- Nearest skálázási algoritmus kiválasztása
- Bemeneti video preset létrehozása a bemeneti jelre illeszkedően (640×200, 60Hz)
- Vízszintes képpont növelése egy saccolt értékre. Ez a teljes soridőhöz tartozó képpontok számát jelenti szinkronnal, elő és utóvállakkal, visszafutással. (880 képpont) Ezekről részletesebben itt olvashattok: Link
- Kép középre tolása, hogy a hibák jól láthatóak legyenek
- Vízszintes képpontok növelése/csökkentése amíg a hibák el nem tűnnek (esetünkben a horizontális méret 912 képpont)
- Kép végleges középre igazítása (horizontálisan: 182, vertikálisan 37)
- Fázissal kis játék ellenőrzésként
Az eredmény szerintem magáért beszél, a pixelre pontos felvétel szép kockás képet ad vissza. Már csak az a kérdés, hogy ezt hogyan érdemes rögzíteni és feltölteni mondjuk youtube-ra. Erről a videóban nem beszélek, de már kialakult a módszertan, hogy a szép pixeles kép ne mosódjon el. A felskálázást elintézem a VCS-sel. Olyan felbontást (640×200 -> 1280×1000) kell választani ami vízszintes és függőleges irányban is egész többszöröse az eredetinek, közel van a 1080p magasságához és a 4:3-as képarányt is közelíti. A felskálázott ablakot OBS-sel rögzítem nagy bitrátával. 20 Mbit/sec CBR mellett már egész jó eredményt ad és az i5 is meg tud még vele birkózni. Az elkészült anyagot úgy illesztettem be a vágószoftverbe, hogy az megtartotta az eredeti felbontását, ehhez fekete kerettel vettem körbe. Persze az egészet úgy is megugorhatnám, hogy eredeti méretben rögzítem, majd azt a vágás során skálázom fel, de akkor a monitoron bélyeg méretű ablakkal kellene dolgozni amit nem kényelmes. Ez az a pont ahol csak azt tudom javasolni, hogy kísérletezni kell.
Akit mélyebben érdekel a téma, annak azt ajánlom, hogy angolul keressen rá a pixel perfect recording vagy game capture szókapcsolatokra. Remélem ez a rövid bejegyzés segítség lesz annak aki még csak most kezd el ismerkedni a témával.
Views: 325