Nástroje pre video — prevod videa na animovaný GIF
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.