Video do GIF

Video na GIF – online tvorca animovaných GIF — Videoklip sa zmení na animovaný GIF so slučkou so zvolenou snímkovou frekvenciou, šírkou a kvalitou palety. GIF je dlhodobo otvorený formát, ktorý rozumie prakticky každé zariadenie a chatová platforma. Všetko sa spracúva lokálne v prehliadači, súbory sa nikdy nenahrávajú na server.
Podporovaný vstup: WebM, OGV (Ogg Video), MKV, AVI, GIF, WebP, APNG a ďalšie bežné video formáty. Všetko sa prevádza lokálne v prehliadači; súbory sa nikdy nenahrávajú na server.
Prvé použitie načíta do aktuálneho prehliadača video spracovací engine (~30 MB). Potom sa uloží do pamäte a znova použije, preto treba počkať.
🎥
Kliknutím sa vyberie alebo pretiahnutím sa vloží video súbor
Podporované sú WebM, OGV, MKV, AVI, GIF a ďalšie bežné formáty; odporúča sa menej ako 500 MB
Snímková frekvencia: vyššia hodnota = plynulejšie, ale väčší súbor
Maximálna šírka: mierka sa upraví automaticky tak, aby sa zachoval pomer strán
Farby palety: menej farieb = menší súbor, mierna strata kvality
Prevod na animovaný GIF: extrahujú sa snímky so zvolenou snímkovou frekvenciou, zmenia sa na maximálnu šírku a vytvorí sa optimalizovaná farebná paleta pre slučku. Zvuková stopa (ak existuje) sa zahodí.
Prečo sú GIFy také veľké? Palety, dithering a formát z roku 1987 slúžiaci ako video

GIF (Graphics Interchange Format, 1987) bol navrhnutý ako formát statického obrazu s malým bonusom v podobe animácie a je to vidieť. Dve vlastnosti riadia všetko na tejto stránke: každý snímok je obmedzený na 256 farieb vybraných z uloženej palety a snímky sa komprimujú LZW — univerzálnym bajtovým kompresorom z éry zipu —, ktorý netuší, že sa ukladá video. Nie je tu kompenzácia pohybu ani aritmetika „tento snímok je väčšinou predchádzajúci“ ako v skutočných video kodekoch; každý snímok je v podstate samostatne komprimovaný obraz. Pochopenie palety je kľúčom k malým a dobre vyzerajúcim GIFom.

Päť faktov, na ktorých stojí zvyšok tejto stránky:
• každý snímok obsahuje najviac 256 farieb (28) z palety; video v pravých farbách sa musí kvantizovať nadol
• dithering simuluje chýbajúce farby rozptýlením bodiek susedných položiek palety — väčšie súbory, plynulejšie prechody
• časovanie snímkov sa ukladá v jednotkách 10 ms: 10 fps → oneskorenie 10 (100 ms); praktická dolná hranica je oneskorenie 2 (20 ms = 50 fps)
• snímky sa komprimujú LZW nezávisle — absencia kompresie medzi snímkami je číslo jeden, čo zvyšuje veľkosť
• menej farieb, menej snímkov, menšie rozmery: každý z týchto prepínačov zmenšuje vstup LZW a účinky sa násobia
Paleta 256 farieb a pásy

Pixel videa v pravých farbách potrebuje 24 bitov (16,7 milióna možností); pixel GIF je 8-bitový index do tabuľky najviac 256 farieb. Prevod videa na GIF preto prebieha kvantizáciou palety: vyberú sa 256 farieb, ktoré najlepšie reprezentujú obsah, a každý pixel sa priradí k najbližšej z nich. Prechody za to platia — obloha, ktorá potrebuje 4 000 mierne rozdielnych modrých, dostane 30 z nich a hladký prechod sa zrúti do viditeľných pruhov nazývaných pásy. Plošná grafika s vysokým kontrastom (logá, herné sprity, grafy) to takmer nepozná; fotografie a video sú zasiahnuté najviac. Kvalita palety prevodníka je veľkou časťou kvality jeho výstupu.

Dithering: výmena šumu za plynulosť

Dithering je klasické riešenie pásov: namiesto priradenia každého pixelu k najbližšej farbe palety sa rozptýli zmes dvoch najbližších farieb tak, aby priemer na malej ploche zodpovedal pôvodnému tónu. Prechody vyzerajú výrazne hladšie — pásy sa rozplynú do jemného šumu, ktorý oko pri bežnej vzdialenosti zlúči. Cenou je veľkosť súboru: šum je vysokofrekvenčný detail a LZW komprimuje pravidelné pásy oveľa lepšie ako rozptýlené bodky. Toto je základný kompromis GIF, ktorý táto stránka odhaľuje: vypnutie ditheringu dáva menšie súbory s pásmi, zapnutie hladké prechody za cenu väčšej veľkosti.

Časovanie snímkov: dolná hranica 20 ms

GIF ukladá oneskorenie medzi snímkami v jednotkách 1/100 sekundy. 10 fps znamená oneskorenie 10 (100 ms na snímok); 20 fps znamená oneskorenie 5 (50 ms). Najmenšia užitočná hodnota je 2 (20 ms, teda 50 fps) a v praxi väčšina prehliadačov zvýši čokoľvek nižšie na 100 ms — žiadanie 60 fps potichu vytvorí pomalšie prehrávanie. Nad hranicou každé zvýšenie fps násobí počet snímkov: 15 fps → 50 fps pre ten istý klip znamená viac než trojnásobok snímkov a veľkosť GIF zhruba lineárne rastie s počtom snímkov. 10-sekundový klip pri 15 fps má 150 snímkov; pri 50 fps by mal 500.

Prečo sú GIFy oproti skutočnému videu obrovské

Moderné video kodeky míňajú väčšinu bitov na popis zmeny medzi snímkami — statická kamera znamená, že neskoršie snímky stoja takmer nič. LZW v GIF vidí každý snímok ako nový obraz (jeho jediný trik medzi snímkami je príznak priehľadnosti, ktorý preskočí pixely identické s predchádzajúcim snímkom, a pomáha oveľa menej ako skutočná kompenzácia pohybu). Pravidlo palca: pre ten istý klip očakáva sa, že GIF bude mnohonásobne väčší ako dobre zakódované WebM pri rovnakom rozlíšení. Ak cieľ prijíma skutočné video, uprednostní sa ten; GIF vyhráva iba tam, kde záleží na jeho univerzálnosti a správaní automatického prehrávania a slučky.

Časté omyly
  • „GIF je komprimovaný, takže je pre video efektívny.“ LZW je bajtový kompresor z roku 1987 bez modelu pohybu; pri pohybovom zábere je to najmenej efektívny široko používaný formát na webe.
  • „Zdroj má 60 fps, takže GIF by mal mať tiež.“ Dolná hranica oneskorenia 20 ms obmedzuje GIF na 50 fps a prehliadače zvyšujú oneskorenia pod touto hranicou. Vernosť snímok po snímke GIF nedokáže dodať.
  • „Dithering je iba šum, ktorý by sa mal vypnúť.“ Je to zámerný kompromis medzi kvalitou a veľkosťou: vypnutie dáva menšie súbory s pásmi, zapnutie hladké prechody, ktoré stoja bajty.
  • „Menej farieb vždy vyzerá otrasne.“ Pri plošnej grafike a animácii s vysokým kontrastom môžu 64 farieb vyzerať rovnako ako 256 — a súbor sa ešte zmenší.

Súvisiace nástroje: Video na WebP/APNG pre animáciu v pravých farbách so skutočnou kompresiou, GIF na video pre opačný smer (paleta na pravé farby), Video na WebM pre ten istý klip ako skutočné video a Strihač videa na orezanie zdroja pred prevodom.