Sopár Adrián Sopár Adrián személyes weblapja.
Nyelv
Sopár Adrián 2021 © Minden jog fentartva
Blog/Cikkek

Videó az összes lehetséges android mintáról

Készítettem egy videót, amiben látható az összes lehetséges minta, amivel le lehet zárni egy androidos készüléket. Ebben a cikkben ezen projektem részleteit ismertetem.

A minta szabályai

Ebben a részben ismertetem, hogy milyen feltételeknek kell teljesülnie egy érvényes mintára. Ha a szabályokat már ismered, akkor ezt a részt nyugodtan átugorhatod.

Adott 9 pont, amik egy 3x3-as négyzetrács mentén vannak elhelyezve. Azaz 3 sorban és 3 oszlopban. Ezek közül a pontok közül kell kiválasztanunk 4≤l≤9 darabot úgy, hogy a sorrend számít. Továbbá bármely x és y pontra, ahol x-et közvetlenül y követi a mintában teljesülnie kell a következőnek: a négyzetrácsos megjelenítésben össze lehet kötni őket egy egynes szakasszal úgy, hogy bármely más pont, ami még a szakszra esik (az x és y-on kívül) már szerepelt a minta x-et megelőző részében.

A szoftver

Az első feladat az volt, hogy legeneráljam a lehetséges mintkákat képekként, hogy azokat majd össze tudjam fűzni egy videóvá. Ehhez írtam C nyelven egy programot, amit itt lehet elérni: plock. Ezután kigeneráltam a szükséges képeket SVG formátumba a következő parancsal:

plock -p svg -os SVGs/pattern_%d.svg

Aminek a futásával kapcsolatos részletek (a kód optimalizálása nélkül) a következő voltak:

time du -sh
real user sys
0m36,226s 0m21,465s 0m14,309s 1,5G

A program jelenlegi változata fixen 500x500-as méretet állít be a generált SVG képeknek.

A képek számából természetesen kiderült, hogy a lehetséges minták száma: 389112

A videó

A képeket az ffmpeg nevű parancssoros videószerkesztő programmal fűztem össze egy videóvá. Először azzal próbálkoztam, hogy minden minta pontosan egy képkocka (frame) erejéig látszódjon és a framerate-nek olyan értéket adtam, hogy az így készült videó nagyábból 12 óra hosszú legyen. Azonban ez a megoldás nyilván nem szabványos framerate értéket eredményezett, amit sajnos a legtöbb lejátszó program nem tud kezelni, ahogy ezt a VLC esetében is megtapasztalhattam. Szóval ezután a következővel próbálkoztam:

ffmpeg -framerate 9.009 -i SVGs/pattern_%d.svg -r 25 all-patterns.mp4

Itt a bemeneti framerate-et a -framerate kapcsoló határozza meg, a kimenetit pedig az -r. Ha az -r nincs explicit megadva, akkor az értéke a bemeneti framerate-el lesz egyenlő. Ez már megfelelő eredményt adott, de mivel a videót az általam bérelt VPS-ről terveztem elérhetővé tenni, így a generált videó méretét is célszerű lett volna minnél jobban csökkenti. Szóval a végső megoldás a következő lett:

ffmpeg -framerate 9.009 -i SVGs/pattern_%d.svg -r 25 -preset veryslow -tune animation all-patterns.mp4

A -preset veryslow mondja meg az ffmpeg-nek, hogy olyan tömörítési algoritmust használjon, ami több CPU erőforrást használ (lassabb), de ezáltal hatékonyabb is.

Ezen két parancs futtatásának eredménye a következő táblázatban látható:

Verzió time size bitrate
real user sys
1. parancs 98m44,197s 316m44,632s 4m1,423s 583M 113 kb/s
2. parancs 297m59,601s 1097m54,172s 5m56,486s 276M 53.5 kb/s

Az eredmény

A fő videón kívül csináltam egy rövidebb részlet videót is, ha csak belenéznél és nem szeretnéd a teljes hosszúságú videót letölteni. A videók tulajdonságait és a linkeket az elérésükhöz a következő táblázatban találod:

letöltés időtartam méret
patterns-video-sample.mp4 10 perc 27 másodperc 4,2MB
all-patterns.mp4 11 óra 59 perc 51 másodperc 276MB

SHA256 összege a nagyobb videónak:

85c8c94f35ff2fda566545e4d691bde542cf13a4c5ce9d8552356c8e1c059f29  all-patterns.mp4

Egyéb tulajdonságok, amik megegyeznek mindkét videónál:

felbontás kompatibilitás
firefox chrome VLC mpv
500x500 nem igen igen igen

A táblázatban a kompatibilitási oszlopok a generált videók különböző böngészőkben és lejátszó programokban történő lejátszhatóságára vonatkoznak.