Portál AbcLinuxu, 24. dubna 2024 15:11

Jednoduché formáty souborů (NetPBM, Dot, PCAP…)

5.4.2021 19:15 | Přečteno: 3604× | Linux | Výběrový blog | poslední úprava: 3.5.2021 02:55

Představíme si formáty souborů vhodné pro rychlé bastlení - zpracování obrazu, ladění datových struktur a síťovou komunikaci. Hlavní zajímavostí je jejich čtení a zápis pomocí ad-hoc skriptů bez použití externích knihoven.

Jedná se o přepis mé přednášky ze Smrště 2018. Z různých ostatních přednášek existují záznamy, třeba se vám budou líbit.

Bitmapový formát Netpbm

Formát obrázků Netpbm vypadá takto:

P5
# libovolné množství komentářů
# každá řádka uvozena vězením
šířka výška
255
surová bitmapová data

Číslo za P na prvním řádku udává formát bitmapových dat, číslo před daty udává rozsah (barevnou hloubku), prakticky vždy chcete 255 (1 bajt na pixel, resp. na barevnou složku u barevného obrázku). Zajímavé formáty bitmapových dat jsou:

Černobílé varianty se označují PGM (graymap), barevné PPM (pixmap).

Čtení

ASCII varianty se získají pomocí convert vstupní.png -compress none výstup.pgm (nebo ppm) a hodí se na grepování. Pár příkladů ze života:

Jediné trochu mrzuté je, že pokud chcete grepovat opravdu konkrétní RGB barvu, tak musíte sestavit regexp, který to bere po správně zarovnaných trojicích. Tohle by asi mohlo fungovat (rozdělí pixely na samostatné řádky):

$ cat out.ppm | sed -re "s/([0-9]+ [0-9]+ [0-9]+)/\1\n/g" | sed -re "s/^ //"

Zápis

Co se zápisu týče, tak tam se asi nejvíc hodí binární formáty (P5, P6), pro takové ty situace „mám v paměti pole a potřebuju ho vyklopit do souboru“. Jednoduše otevřeme soubor, vypíšeme do něj ty tři řádky (P5, velikost, 255) a pak do něj vyklopíme to pole. Můžeme přidat komentář.

Komprese

Pokud to dává smysl (tj. data mají nějakou strukturu, takže to jde komprimovat), je nejlepší soubor prohnat bzipem. Mnoho nástrojů (např. GIMP, ImageMagick…) ho i pak rozpozná a automaticky dekomprimuje a otevře. Kompresní poměr je podobný, někdy i lepší (!) než u PNG, které je na obrázky přímo specializované. Prý je to proto, že ačkoli má PNG lepší kódování (nebere to tupě po řádkách, ale umí se odvolat na předchozí řádky), tak má jako poslední krok obyčejné DEFLATE, které je podstatně horší než bzip2.

Zajímavé je, že některé obrázky se podstatně lépe komprimují otočené o 90° (resp. transponované) - pokud vám tedy záleží na účinnosti a rychlosti (!) komprese, stojí za to podívat se, jestli váš typický obrázek nemá například ve sloupcích podstatně podobnější data než v řádcích, a případně ho otočit. Třeba data z radaru se násobně líp komprimují podle azimutu (protože věci blízko u sebe jsou si samozřejmě velmi podobné) než podle vzdálenosti (kdy kompresor dostane celou scanline pokrývající stovky kilometrů a co pak s tím má jako dělat).

Farbfeld

Existuje ještě jednodušší formát farbfeld, který má pouze velikost a pak natvrdo RGBA 4*16bit hodnoty. To mi už přijde příliš omezené a navíc je to 16bit big endian, takže se s tím blbě pracuje a je to velké. Také není tolik podporovaný, PGM/PPM otevřete v Eye of GNOME, v GIMPu, v lecčems.

Video

Stejně jako PPM (syrové RGB pole) můžeme zpracovávat i video. ffmpeg podporuje formát rgb24 a raw kontejner. Nemá to vůbec žádnou hlavičku, takže rozlišení musíme předat ručně (a když se dám blbě, tak se rozbije synchronizace) a pak už čteme framy. Tady je třeba oneliner co vezme první frame z videa velkého 640x480 a uloží ho jako PPM :-).

$ (echo -ne "P6\n640 480\n255\n"; ffmpeg -i test.mkv -pix_fmt rgb24 -f rawvideo -y - | head -c $(( 640 * 480 * 3 )) ) > soubor.ppm

A takhle se zase ze souboru zpátky udělá video:

$ (while true; do tail -c $(( 640 * 480 * 3 )) soubor.ppm ; done) | ffmpeg -f rawvideo -pix_fmt rgb24 -s 640x480 -i - -y out.mkv

Audio

aplay žere surové samply, je vhodné mu říct formát a samplerate. Geiger counter v bashi:

$ while true; do if [ $(( $RANDOM % 200 )) -eq 1 ]; then echo -n "~"; else echo -n "                "; fi; done | aplay -r 16000 -f U8

(tilda a mezera jsou napsatelné znaky s nejvzdálenějším ASCII kódem)

WAV soubory jsou hlavička a pak následují samply. Pokud víte, v jakém jsou formátu (nejběžnější je signed int16 little endian), můžete začátek souboru přeskočit a číst rovnou ty samply.

Dot: grafy

Zejména pro ladění složitých datových struktur s hromadou ukazatelů se hodí dot. Vytvoříme následující soubor:

digraph{
a->b;
b->c;
c->d;
c->a;
}

a spustíme dot -T png file.dot > file.png.

Dot automaticky rozhodí vrcholy aby se hrany nějak zásadně nekřížily a natahá definované šipky. Samozřejmě se to dá všechno různě formátovat, více viz Graphviz.

Dot jsem objevil náhodou při dělání úkolu do velmi drsného a poučného předmětu Datové struktury 1 a nevím, jak bych to bez něj odladil. Také jsem to použil při řešení jednoho CTF, kde byly soubory, které se navzájem na sebe různě odkazovaly. A někteří ISP to prý používají pro generování mapy své sítě.

PCAP: síť

pcap je formát, ve kterém se ukládají záznamy síťového provozu - používá ho například tcpdump a Wireshark (ten už tedy používá vylepšení pcapng, ale pcap samozřejmě stále umí). Je také překvapivě jednoduchý, na začátku je nějaká celkem nezajímavá hlavička (pcap_hdr_t) a pak je vždycky hlavička paketu (pcaprec_hdr_t, obsahuje jeho délku) a následuje přímo ten paket. Pakety takhle můžete snadno číst (osobně jsem třeba takhle implementoval mergování paketů z několika zdrojů do jednoho pcap souboru) i generovat (normálně si zkopírujte paket a nahrazujte v něm data, a na checksum se vykašlete, různé tsharky a spol. to sežerou i když nesedí).

       

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ář

6.4.2021 00:37 z_sk | skóre: 34 | blog: analyzy
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Odpovědět | Sbalit | Link | Blokovat | Admin
Na grafy (ak user klikatko) napríklad program Dia.
debian.plus@protonmail.com
Max avatar 6.4.2021 02:43 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Nevím, nevím. Hele, používal jsem to dřív a bylo to peklo. Pak jsem přešel na MS Visio (kvůli práci a kompatibilitě s ostatními firmami, se kterými něco řešíme) a nedá se to srovnat. Ve světě OSS Dia silně zaspala. 100x lepší je yEd.
Nicméně je možné, že Dia křivdím a za ty roku, co jsem to opustil, se zlepšili.
Nicméně kromě Dia a yEd je dost použitelný i Draw v Libreoffice.
Zdar Max
Měl jsem sen ... :(
Gilhad avatar 6.4.2021 08:58 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Koukal jsem na ten yED, ale nejak nemuzu najit pod jakou je licenci ...
Max avatar 6.4.2021 09:33 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Custom:
yEd Software License Agreement

Version 1.2
This is a legal agreement ("this Agreement") between yWorks GmbH ("yWorks") and the licensee ("the Licensee").
yWorks licenses the yEd Software ("the Software") only if all the following terms are accepted by the Licensee.
The Software includes the yEd byte code executable and any files and documents associated with it.

By installing the Software, the Licensee is indicating that he/she has read and understands this Agreement and agrees to be bound by its terms and conditions.
If this Agreement is unacceptable to the Licensee, the Licensee must destroy any copies of the Software in the Licensee's possession immediately.

1. LICENSE CONDITIONS
The Licensee is granted a non-exclusive and non-transferable right to install one copy of the Software and use it as an application.
The Software may not be used as part of an automated process.
The Licensee may not reverse engineer, disassemble, decompile, or unjar the Software, or otherwise attempt to derive the source code of the Software.

The Licensee acknowledges that Software furnished hereunder is under test and may be defective.
No claims whatsoever can be made on yWorks based on any expectation about the Software.

2. TERM, TERMINATION AND SURVIVAL
The Licensee may terminate this Agreement at any time by destroying all copies of the Software in possession.
If the Licensee fails to comply with any term of this Agreement, this Agreement is terminated and the Licensee has no further right to use the Software.
On termination, the Licensee shall have no claim on or arising from the Software. The Software and any copies shall be destroyed.

3. NO WARRANTY
The Software is licensed to the Licensee on an "AS IS" basis. The Licensee is solely responsible for determining the suitability of the Software and accepts full responsibility and risks associated with the use of the Software.

4. MAINTENANCE AND SUPPORT
yWorks is not required to provide maintenance or support to the Licensee.

5. LIMITATION OF LIABILITY
In no event will yWorks be liable for any damages, including but not limited to any loss of revenue, profit, or data, however caused, directly or indirectly, by the Software or by this Agreement.

6. DISTRIBUTION
No distribution is to be made of the Software by the Licensee. The Licensee may make one copy of the Software for backup purpose only.

7. AVAILABILITY
The Software is not available to those not permitted by law to have access to the Software.

8. INSERTION OF MARKER
The Software may insert some markers into any output files to identify that the files are generated by the Software. yWorks bears no responsibility for any damages arising.

9. MISCELLANEOUS
This agreement is made and shall be construed in accordance with the laws of Germany.

---------------------------------------------------------------------------

THIRD-PARTY SOFTWARE AND LICENSES
This Software uses the Batik SVG Toolkit, Apache XMLBeans, Apache POI, and FreeHEP VectorGraphics library which are licensed under The Apache Software License (http://www.apache.org/licenses/).
This Software uses the JIDE Docking Framework and the JIDE Action Framework licensed from JIDE Software (http://www.jidesoft.com).
This Software uses icons licensed from Incors GmbH (http://www.incors.com).
This Software includes a parser generated with ANTLR v3, a Swing LnF created by JGoodies, and the TwelveMonkeys library. The BSD License applies to them (http://www.opensource.org/licenses/bsd-license.html).
The Swing LnF created by JGoodies uses some icons from the Tango project (http://www.tango-project.org/) licensed under the Creative Commons Attribution Share-Alike license (http://creativecommons.org/licenses/by-sa/2.5/). 
This Software uses the svg-viewer rendering engine (http://code.google.com/p/svg-viewer/). The MIT License applies to it (http://www.opensource.org/licenses/mit-license.php).
This Software uses the JavaHelp System v2.0_02 (https://javahelp.dev.java.net/). The Sun Microsystems, Inc. Binary Code License Agreement with JavaHelp Version 2.0 Supplemental License Terms applies to it.
The installer for this Software may contain a Java Runtime Environment (JRE). The Oracle Binary Code License Agreement for the Java SE Platform Products applies to it (http://www.oracle.com/technetwork/java/javase/terms/license/).
Zdar Max
Měl jsem sen ... :(
Gilhad avatar 6.4.2021 19:33 Gilhad | skóre: 20 | blog: gilhadoviny
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Aha, tak nic, zustanu u dia i nadale ...
Bedňa avatar 8.4.2021 22:27 Bedňa | skóre: 34 | blog: Žumpa | Horňany
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
MS Visio? To fakt Maxi?
KERNEL ULTRAS video channel >>>
Ruža Becelin avatar 6.4.2021 08:50 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
PlantUML a Diagrams (drawio). Na Dia jsem zacinal, ale zamrzla v 199x, bohuzel.

6.4.2021 21:01 User682 | skóre: 38 | blog: aqarium | Praha
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
zdravim,

dia jsem zkousel a tak nejak na uplne zakladni veci pred hodne par roky stacila.

Pak jsem nasel yEd a to je na nejake kresleni postacujici, pokud clovek nechce nejake lehce slozitelsi diagramy.

Postupne jsem dosel k Visual Paradigm (placeny nastroj, ale je i snad nejake komunity edition) a je to, co jsem shanel. Na dost veci, co z architektury delam, se primo nabizi delat nejake UML a je to navic i srozumitelnejsi okoli. Nebo se to da casem prepouzit.

Posledni 2 roky programuju vcelku dost grafove algoritmy (teorie grafu) a hodne toho delam z tohoto oboru na papire+barevne fixy, kdyz mi to hlava nebere, obcas se divim, ze na to nevezmu nejaky soft. UML a CASE nastroje spise pouzivam na nejake navrhovani vetsich celku nez na reseni konkretnich algoritmu.

gf

9.4.2021 13:05 Mayhem Weltende
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Jak se ma linuxsoft? Pozvanky na pivo ani ohlednuti ze neuspesnym rokem uz nejak nevychazeji.

Nechces mi to prodat?
9.4.2021 15:20 _
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
muzu ti prodat nejake stribrne pribory se slepici, nasel jsem je v lese
Heron avatar 6.4.2021 10:14 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Odpovědět | Sbalit | Link | Blokovat | Admin
Dot je super. Jednak se to snadno píše ručně, vytvořit si graf závislostí něčeho na něčem (libovolně čeho) je hned. Automatické generování ani nezmiňuju, používá se to i na místech, kde bych to nečekal (systemd-analyze). Sám generuju graf DFA z definice v jednom programu pro kontrolu správnosti zadaných údajů podle jednoduché gramatiky. Jen je škoda, že generování obrázku (graphviz) nenabízí příliš mnoho možností, jak poradit umístění některých nodů - zkoušel jsem to používat pro mapu sítě a není to ono.
Prý je to proto, že ačkoli má PNG lepší kódování (nebere to tupě po řádkách, ale umí se odvolat na předchozí řádky), tak má jako poslední krok obyčejné DEFLATE, které je podstatně horší než bzip2.
Ano, i farbfeld (což je můj oblíbený archivní formát typu jednodušeji už to nejde) prohnaný přes LZMA je menší než i dobře optimalizovaný png. Což je zvláštní, zatímco optimalizace png pro nejlepší kombinace filtrů trvá fakt dlouho, tak obecná komprimace bez znalosti formátu přináší lepší výsledky o mnoho rychleji.
Heron
6.4.2021 10:33 jednoduche_formaty_souboru
Rozbalit Rozbalit vše NetPBM
Odpovědět | Sbalit | Link | Blokovat | Admin
možnost zpracování bitmapy skriptem se mi líbí, určitě pro to najdu využití, ale třeba v uvedeném příkladu s detekcí deště, jednoduše obrázek předpovědi srážek v nějaké oblasti nezískám, mapy radaru se generují dynamicky, wget by na tohle asi nestačil...
Jendа avatar 6.4.2021 11:05 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: NetPBM
wget https://www.chmi.cz/files/portal/docs/meteo/rad/inca-cz/data/czrad-z_max3d/pacz2gmaps3.z_max3d.`date -u "+%Y%m%d.%H%M" -d "10 minutes ago"`.0.png
? (s tím že by to chtělo zkusit poslední dva - někdy tam je obrázek už za 3 minuty, někdy to trvá 15)
6.4.2021 11:48 jednoduche_formaty_souboru
Rozbalit Rozbalit vše Re: NetPBM
dík za odkaz na data, tohle jsem nemohl najít
Jendа avatar 6.4.2021 11:53 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: NetPBM
Otevřel jsem tu odkazovanou stránku, dal jsem Ctrl+I (Page info), "Images", a tam to je.
Gréta avatar 7.4.2021 00:20 Gréta | skóre: 36 | blog: Grétin blogísek | 🇮🇱==❤️ , 🇵🇸==💩 , 🇪🇺==☭
Rozbalit Rozbalit vše Re: NetPBM
7.4.2021 10:32 Tom.š Ze.le.in | skóre: 21 | blog: tz
Rozbalit Rozbalit vše Re: Jednoduché formáty souborů (NetPBM, Dot, PCAP…)
Odpovědět | Sbalit | Link | Blokovat | Admin
Co jsem ocenil na graphviz formátu až nedávno jsou návazné filtry. Je docela fajn je možnost automaticky generovat graf relativně "tupě", a pak ho podle potřeby "stylovat" pro různé účely pomocí gvpr - obarvit podle typu, nechat jen "zajímavé" texty nebo určitý typ vrcholů, nebo - po profiltrování přes dijkstra - jen nody blízké vybranému a podobně.

Například se takhle dá udělat "proklikávací" graf - z velkého grafu (typicky nečitelného při zobrazení) se zobrazí nody v nějaké vzdálenosti od vybraného, a po kliknutí na jeden z nich zobrazí okolí vedle (a třeba po dvojkliku se skočí na URL v node, který říká o node víc).

Založit nové vláknoNahoru

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