Vládce po čtvrt století
Úvodem mi dovolte připomenout, že JPEG je jedním z de facto standardizovaných grafických formátů, kterými si lidé a zejména běžní smrtelníci vyměňují data. JPEG se primárně používá pro fotografie a důvodem je ta skutečnost, že formát je tak starý, že jej bezproblémově podporují prakticky všechny přístroje a zařízení, která se používají, bez ohledu na jejich stáří.
Navíc díky stáří máme víceméně jistotu, že na nás nevyskočí nějaká utajovaná a stále neexpirovaná patentová práva. Máme k dispozici grafické nástroje, které používají vysoce optimalizované implementace standardu JPEG a mnoho z nich je přímo free / open-souce.
Navíc formát JPEG je dostatečně / přijatelně dobrý pro běžné uživatele a běžné použití. Znalci a profíci mu samozřejmě na prvním místě vytknou pouze 8bit barevnou hloubku vedoucí k viditelné posterizaci, případně neefektivní kompresní techniky vedoucí k artefaktům. Ale to nic nemění na tom, že slova fotografie a JPEG jsou od nástupu levných digitálních foto přístrojů prakticky synonymem.
Analogie s videem a hudbou
Podobné dlouholeté vládce jsme mívali i v oblastech zvuku a videa. Formát MP3 kraloval světu po téměř 20 let. Po jeho výsadním postavení se již svět začal štěpit, tu je používán formát AAC (a jeho nástupnické verze), tu Dolby či DTS, tu otevřené formáty Vorbis a následně Opus. To jen tak za všechny. Ono výsadní postavení MP3 už se neopakovalo, ale má to své logické důvody.
Ve video oblasti jsme se jasně pohybovali po generacích daných specifikacemi MPEG. Nejprve jsme koncem 90. let kvitovali s povděkem viditelný skok vpřed od VHS kazet v podobě MPEG-1 videa (případně jeho varianty Video CD), v téže době se přecházelo ve velkém na lisované DVD-Video disky a jejich MPEG-2 video, aby se s příchodem levných CD-R a DVD-ROM mechanik a později DVD vypalovaček a Microsoftí implementací formátu MPEG-4 ASP, cracknutého do podoby legendárního kodeku DivX 3 zrodil fenomén DVD ripů a DivX / Xvid MPEG-4 APS video.
Posledním významným milníkem, který de facto udával a dodnes udává tón video světa, je formát MPEG-4 AVC alias H.264. Jeho otevřená implementace x264 byla a je tak skvělá, že ji třeba Critterion Collectioni používali pro mastering svých špičkových Blu-ray edicí a dodnes formát H.264 najdeme ve foto a video přístrojích či smartphonech, všude tam, kde výrobce nepřešel na nástupce H.265 alias HEVC, jehož otevřený kodér x265 je evolucí x264.
Po celé tyto éry rozličných audio a video formátů stále platila jedna věc: na fotky se primárně používal a používá JPEG. Samozřejmě, že skeny se dělají do 16bit TIFFů a digitální přístroje umí i různé RAW formáty s barevnou hloubkou 12 – 14 – 16 bitů. Ale když si lidé nějak předávají fotky, typicky jde o JPEG.
To znamená jediné: ani jeden z následných formátů nedokázal nabídnout v dané době parametry, které by svět přiměly k odchodu od JPEGu. Někdy za to mohla výpočetní náročnost, jindy licenční poplatky, případně nějaké jiné menší důvody.
Pokusy o nástupce
Dovolte mi vzpomenout některé z nápadů, které mohly JPEG nahradit a neuspěly. Výčet jistě nebude kompletní a možná ani vyvážený.
1999: JPEG 2000
Už koncem 90. let pod křídly JPEG skupiny vznikal formát JPEG 2000. Jeho cílem bylo nahradit JPEG a vylepšit kompresní kvality přechodem od diskrétní kosínové (discrete cosine transform – DCT) k vlnkové transformaci (discrete wavelet transform – DWT). Podobně jako u JPEGu a jeho vide varianty M-JPEG, vznikl později i digi cinema formát M-JPEG 2000.
Zázrak se ale nekonal, JPEG 2000 byl zatížen různými patenty, včetně později publikovaných patentů, které často používají patentoví trollové k tomu, aby nechali standard používající jejich patent dostatečně rozšířit a teprve pak se o svá práva a z nich plynoucí poplatky přihlásili.
2007: JPEG XR
Microsoft to později zkusil s vlastním formátem HD Photo, později nazvaným JPEG XR a zastřešeným i ITU-T a standardizovaným ISO/IEC. Stejně jako JPEG 2000 nabízel též bezztrátovou kompresi a výrazný krok vpřed v kvalitě oproti JPEGu.
Opět ale zasáhly patenty, kde Microsoft samozřejmě řadu patentů na techniky v JPEG XR vlastní a je potřeba si uvědomit, že se bavíme o době Steva Ballmera a Windows Vista, kdy Microsoft nebyl zdaleka tak přívětivý k open-source jako dnes. Až v roce 2013 vydal knihovnu JPEG XR pod licencí BSD.
2010: Google WebP
Stále se bavíme o formátech vyvinutých v nějakých korporacích či organizacích, které korporace sdružovaly. Google byl vždy nespokojen s tím, že nemá nad některými věcmi kontrolu a jen pořád platí nějaké licenční poplatky. Proto před lety koupil společnost On2 Technologies, známou v té době kompresním formátem videa VP8.
O jejích produktech se dalo říci, že jsou víceméně osekanou variantou standardů MPEG, ostatně detailní analýza srovnávající VP8 s x264 přišla právě v roce 2010 z nejpovolanějších rukou, napsal ji vývojář x264 Jason Garrett-Glaser (dnes Fiona Garrett-Glaser, známý/á též jako Dark Shikari) – psal jsem o tom tehdy na Deep in IT, pokud si chcete přečíst dobový text.
Proto tedy Google nalil další peníze do vývoje a po VP8 později přišel formát VP9, který dnes známe z Youtube. Následný vývoj v podobě VP10 byl později sloučen do projektu otevřeného video formátu AV1, ale to už příliš odbočuji. Z VP8 se tehdy s určitým odstupem zrodil formát WebP, tedy statická varianta video formátu WebM (což byla de facto zjednodušená variace na formát H.264 a kontejner Matroska/MKV).
WebP je dnes relativně dobře podporovaným formátem čistě proto, že za ním stojí Google, tedy výrobce nejpoužívanějšího internetového prohlížeče a nejpoužívanější video služby Youtube. Ale fotografové či běžný lid rozhodně nepřešli (stejné platí pro WebM – nikdo jej cíleně nevyhledává).
2014: BPG aneb Better Portable Graphics
Dalším zajímavým počinem, či řekněme spíše konceptem, byl návrh formátu Better Portable Graphics (BPG) z pera vývojáře Fabrice Bellarda v roce 2014. Ten jednoduše navrhl a vytvořil popis formátu, který používat ke kompresi obrazu H.265.
Fabrice dokonce napsal malou JavaScriptovou knihovnu, s jejíž pomocí lze načítat BPG obrázky v prohlížeči, neb BPG pochopitelně nepodporují žádné majoritní webové prohlížeče. Vývoj stále nejspíš v nějaké formě probíhá, nicméně my si zapišme, že BPG byl tím, kdo nastínil budoucí formát HEIF/HEIC.
2015: Free Lossless Image Format alias FLIF
O rok později se objevil zajímavý a velmi flexibilní formát FLIF, který skýtal mnohé sympatické věci (třeba řešení webové responsivity obrázků na úrovni samotného grafického formátu).
Z hlediska kompresního je lepší než BPG či cokoli dalšího, nicméně stejně jako u BPG, asi nelze očekávat širokou podporu v přístrojích, službách a grafických programech. Osobně se mi před těmi 6 lety koncepčně velmi líbil a platí to dodnes.
Ale hlavně z FLIF se později vyvinul formát FUIF (Free Universal Image Format) a zkombinováním experimentálního projektu FUIF (společnost Cloudinary) s Pik (společnost Google) později vznikl JPEG XL, o kterém si dnes budeme povídat.
2015: Rodí se HEIF / HEIC
Ve stejné době nastupuje vlastní implementace statického H.265 pro fotky, tedy formát HEIC, případně někdy značený dle svého kontejneru jako HEIF. Apple jej nasadil do svých produktů v roce 2017 a od té chvíle se píše éra souběžně běžícího nástupce JPEGu, zvaného HEIC, resp. HEIF.
2019: přichází AV1 video pro fotky, tedy AVIF
AVIF je formát primárně cílící na fotky. Používá variantu kontejneru HEIF a obrazovou kompresi AV1 a narozdíl od HEIF/HEIC jde o formát bezplatný a na rozdíl od BPG či FLIF o formát, který má za sebou aspoň jednu silnou korporaci, myšleno zejména Google.
Proti AVIFu dnes hovoří takřka nulová hw podpora v produktech. Ano, letos se objevují první ARM SoC pro smartphony či TV atd., které podporují AV1 (a ve svém důsledku i AVIF), ale hardwarové kodéry v CPU či GPU a SoC zatím nevídáme. Proto možná AVIF nestihne nastoupit dostatečně včas, aby jej nepředjel právě JPEG XL.
Úskalí formátů, které staví na I snímku videa
Ještě než si povíme o hlavním tématu, dovolte mi připomenout jednu podstatnou věc. JPEG je historický formát, který byl vyvinut pro statický obraz, tedy řekněme fotografii. To, že z něj později někdo odvodil video formát Motion JPEG, není podstatné. Jde o onen fundamentální princip, kdy formát je vysloveně cílen na jednu statickou fotku a nepracuje nijak s časovou dimenzí komprese.
Proto v principu nikdy nemohou být formáty vytvoření jako I-frame videa, optimálně účinné. U jednoho statického snímku HEIC / AVIF / WebP / BPG prostě nikdy nebude použito kompresních technik pracujících přes snímky, tedy P/B snímky a veškeré techniky pracující s motion vektory, CTU či makrobloky apod. To, že jsou uvedené na videu založené formáty viditelně lepší než JPEG, je dáno prostě tím, že JPEG je už hodně starý.
Přichází JPEG XL (2021 až 2022)
Dobře tedy, dovolte mi to shrnout. Na „trhu“ máme několik formátů převzatých z video světa. V sekvenci WebP → BPG → HEIC → AVIF však nehledejme spásu světa. Myšleno světa, který nechce 8bit barvy, kompresní bloky, posterizaci v obloze či obecně defekty v obraze dané nízkou vzorkovací frekvencí signálu.
Nehledejme spásu už vůbec ve formátech, které jsou zatíženy – ať již reálně či potenciálně – obřími licenčními poplatky, což platí pro HEIC či výhledově ekvivalentní formát založený na H.266.
Dovolím si v tuto chvíli tvrdit i to, že není nutné hledat spásu ani v AVIF, jakkoli jsem se po léta na tento formát těšil. AVIF zkrátka v principu nebude tak zajímavý jako JPEG XL. Ale vše závisí na tom, jaké podpory a jak rychle se oběma formátům dostane.
Vítězem samozřejmě mohou být oba, protože vedle JPEG XL (pokud bude vítězem pro statické snímky), budeme 100% potřebovat i podporu video formátu AV1 a tudíž každé budoucí zařízení řekněme od roku 2023 bude automaticky podporovat i AVIF. Proč jej tedy nepoužívat.
Co je JPEG XL
Nový dokončovaný formát JPEG XL je grafický formát pro rastrovou grafiku, který je bezplatný a podporuje ztrátovou i bezztrátovou kompresi. Je navržen tak, a vyplývá to i z existujících srovnání, že kvalitativně překonává všechny ostatní rastrové formáty. Tečka.
Mezi autory najdeme spoustu jmen, od lidí z projektu FLIF či obecně přes vývojáře v Google, Cloudinary a také skupině JPEG. L v XL v názvu znamená longterm, tedy proklamovanou snahu, aby JPEG XL byl opravdovým nástupcem JPEGu včetně toho, že bude sloužit světu též spoustu nadcházejících let či dekád.
Návrh formátu JPEG XL (přípona souboru .jxl
) byl předložen v roce 2017, samotný formát byl finalizován 5. prosince 2020. Hlavní vlastnosti shrnuje například Wikipedia, já z nich vybírám následující seznam:
- barevná hloubka až 32bit/kanál
- vylepšená funkcionalita a efektivita oproti všem tradičním formátům (JPEG, GIF, PNG)
- rozměry obrázku až ~1mld × 1mld (horizontálně i vertikálně 230−1)
- podpora průhlednosti
- progresivní kódování
- bezztrátové překódování JPEGu s ~20% zmenšením
- bezztrátové kódování včetně alfa kanálu
- podpora jak fotek, tak umělých grafických motivů
- referenční kodér percepčně optimalizovaný
- podpora širokých barevných gamutů a HDR
- podpora animací
- efektivní (de)kódování, rychlost na úrovni JPEGu v podobě
libjpeg-turbo
, řádově rychlejší než HEIC; možná paralelizace - bez licenčních poplatků s referenční implementací pod open-source licencí
Formát má k dispozici řadu různých režimů kódování. Jak již bylo uvedeno, podporuje například překódování starých JPEGů do o pětinu menší podoby. Zde jistě nebude tak efektivní ve srovnání se situací, kdy by kódoval rovnou z nějakého zdrojového TIFFu či RAWu.
Dále podporuje ztrátový režim kódování zvaný VarDCT (variable-blocksize DCT) a dále režim navazující na FLIF, tedy bezztrátový, případně téměř bezztrátový, případně responsivní mód zvaný Modular (ten volitelně používá Haar transformaci).
Podporována je mimochodem i adaptivní kvantizace, což je jeden z těch velkých implementačních výdobytků, které přinesla do projektu x264 právě Fiona Garrett-Glaser a který se později rozšířil i do kódování dalších formátů zpětně snad až po MPEG-2).
Režim přitom mohou separátně využívat další techniky specifické pro daný typ obrazu, od křivek, opakujících se obrazových vzorů až po tvary jako text či tečky a také šum. Ztrátový režim obecně pak používá barevný prostor XYB, odvozený od LMS.
Trocha StarTrekštiny: Predikce využívá pixelový dekorelátor se souborem vyvažovaných prediktorů s vlastní autokorekcí. Dále se v analýze kontextu využívají speciální statistické modely a meta-adaptivní modely zohledňující lokální chyby a vše se uspořádává do stromových sturktur s výběrem vhodného prediktoru dle obsahu obrazu.
Kódování entropie umí LZ77 kompresi a může využívat jak Asymmetric Numeral Systems, tak staré dobré Huffmanovo kódování (pro jednodušší implementace kodérů).
Co se týče animovaných obrázků, tak jelikož jde o primárně grafický formát (nikoli video), tak se zde nepoužívá klasická predikce mezi klíčovými snímky (žádné P či B snímky). Formát ale umí používat aktualizaci pouze části plochy obrazu, případně může část obrazu jen přemístit jinam, provést sloučení částí atd. Pro tyto potřeby si „umí pamatovat“ až čtyři dílčí snímky jako referenční pro následné snímky.
Podpora v aplikacích
Stručně řečeno: pokud už není, může být brzy. Existuje již zmíněná referenční implementace libjxl
obsahující kodér a dekodér. Pro GIMP tu máme plugin, dále formát JPEG XL oficiálně podporují například ImageMagick, XnView MP, ImageGlass, ExifTool, MConverter, Squoosh a gThumb, neoficiální podpora je již k dispozici pro WIC ve Windows (umí pak načítat náhledy např. v Průzkomníkovi), případně v podobě obecného pluginu pro Qt aplikace (a v důsledku tedy například pro GwenView).
Ve webových prohlížečích se podpora nachází v testovacích verzích. Chrome / Chromium formát umí od verze 91 (platí i pro odpovídající Edge), Firefox ve verzi 90 / Nightly a nedávno jsme psali o RC verzi distribuce OpenMandriva Lx 4.3, která podporu JPEG XL již zahrnuje.
Části specifikace standardu
Standardizace JPEG XL, resp. celková formální finalizace tohoto formátu probíhá od začátku tohoto roku a doběhne doufejme v roce příštím. Konkrétně dle tohoto předpokládaného harmonogramu (převzato z Wikipedie):
JPEG XL Image Coding System
- Part 1: Core coding system (ISO/IEC FDIS 18181–1) – dokončení 2021
- Part 2: File format (ISO/IEC DIS 18181–2) – dokončení 2021
- Part 3: Conformance testing (ISO/IEC WD 18181–3) – dokončení 2022
- Part 4: Reference software (ISO/IEC CD 18181–4) – dokončení 2022
Pár slov závěrem
Hledáte-li v tomto článku nějaký odkaz na primární zdroj informací, resp. důvod, proč vznikl, musím vás v tuto chvíli zklamat. V tento den není žádný konkrétní důvod, pro který psát o JPEG XL, kromě univerzálního důvodu: formát vypadá opravdu nadějně.
Zajímá-li vás do hloubky více, jak si nyní vede, doporučuji dlouhý text od Jona Sneyerse (případně další text od něj), který obsahuje i charakteristiky současných formátů, hovoří o limitech JPEG XL a hlavně pochází od autora formátu FLIF. Ostatní v tomto mém textu jsou vybrané a dále zkoumané reference z Wikipedie protkané vzpomínkami na všemožné grafické formáty v kontextu doby, o kterých jsem v uplynulých 16 letech psal, ať již na CDR/DIIT, nebo jinde.
Osobně vyhlížím pořádného free/open nástupce JPEGu už řadu let. Doufal jsem, že AVIF by mohl mít plnou podporu trhu dříve, ale pokud to místo něj bude JPEG XL, jsem i nadále zcela spokojen. Možná víc než to, protože AVIF je zkrátka kompromisem, jde o statický snímek video formátu, nikoli grafický formát přímo vyvinutý s ohledem na rastrovou grafiku s extrémní barevnou hloubkou.
Třeba kombinace toho, že Rawtherapee počítá vše interně s přesností 32bit/kanál a JPEG XL umí 32bit/kanál uložit, je sice kanón na vrabce, ale současně velký prostor pro případné další budoucí úpravy snímků, které s 8bit JPEGem už prostě nikdy neuděláte, roztrhá vám to histogram.
Svět potřebuje otevřený a bezplatný grafický formát stejně nutně, jako potřeboval otevřený a bezplatný video formát (tedy nyní AV1, zakládající historicky mj. na původním formátu Theora) či otevřený a bezplatný zvukový formát (tedy dříve Vorbis, nyní Opus). Formátu JPEG XL ještě chybí doběhnout fázi vývoje standardu do konce, což se plnohodnotně stane nejpozději příští rok. A já mohu jen doufat, že jeho nativní podpora se v GIMPu/Glimpse či Rawtherapee/darktable objeví co nejdříve.