Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Filmy a seriály, streamovací služby
Televize  |  Projektory
Audio a domácí kina
Multimediální centra  |  Ostatní
Svět hardware  |  Digimanie
Svět mobilně

Huffyuv 2.1.1

13.7.2005, lada, návod
Huffyuv je velice rychlý bezeztrátový video kodek Win32. "Bezeztrátový" znamená, že výstup z dekompresoru je totožný s původním vstupem do kompresoru. "Rychlý" znamená kompresi 38 MB/s na Celeronu 416 MHz. Huffyuv je určen jako náhrada za nekomprimovaný YUV jakožto formát pro zachycování videa. Je dost rychlý, aby provedl kompresi videa v plném rozlišení CCIR 601 (720 x 480 x 30fps) v reálném čase. Huffyuv rovněž podporuje bezeztrátovou kompresi RGB dat, takže jej lze používat pro výstup programů jako je VirtualDub. Huffyuv je free software.
Česká verze původní anglické stránky autora jen s malými změnami. Pokud se Vám líbí Huffyuv, mohl by Vás zajímat i Avisynth.

Upozorňuji, že "free" ve "free software" se liší od "free" ve "freeware." Viz "Co je Free Software?" na webové stránce FSF What is Free Software?



Požadavky na systém

Potřebujete Windows 95, 98, Me, NT, nebo 2000.
Konverze YUY2->RGB colorspace a všechny kompresní metody kromě "predict left" vyžadují procesor s MMX. Všechny procesory Pentium II, Pentium III a Athlon mají MMX. Některá původní Pentia mají MMX. Pentium Pros nemají MMX.

Chcete-li používat Huffyuv pro zachytávání videa, musí být Vaše karta schopná zachtávat ve formátu YUY2, UYVY nebo RGB. Většina karet podporuje jeden z těchto formátů, ale některé, např. Miro DC10 series, mohou zachytávat jen ve formátu Motion JPEG. Jestliže Vaše karta podporuje jen Motion JPEG, nemůžete Huffyuv používat pro zachytávání (ale pro editování ano).

YUY2 a UYVY provádějí kompresi lépe a rychleji než RGB, takže je používejte raději než RGB, pokud můžete. Pokud máte kartu Matrox, zkuste utilitu "Flying Dutchman's YUY2 enabling utility," dostupnou na Desktop Video World.


Instalace

K instalaci Huffyuv si stáhněte zip soubor uvedený výše, proveďte dekompresi souborů do dočasného adresáře, klikněte pravým tlačítkem na soubor huffyuv.inf a zadejte "Install." Soubory z dočasného adresáře můžete vymazat po dokončení instalace (trvá to jen zlomek vteřiny). Restartování by nemělo být zapotřebí.

Pokud po Vás počítač chce, abyste vložili disketu nazvanou "Huffyuv AVI lossless video codec," stačí jen kliknout na OK a zadat příslušný adresář.
Huffyuv odinstalujete pomocí Přidat/Ubrat programy v ovládacím panelu.


Zachytávání pomocí Huffyuv

To, jak říci Vašemu programu pro zachytávání videa, aby používal Huffyuv, bude záviset na daném programu. Obecně byste měli najít dialog "Video Format" a nastavit formát na YUY2 nebo UYVY. Pak byste měli najít dialog "Compression" a ze seznamu zadat Huffyuv. (Proveďte to v tomto pořadí, protože Huffyuv by se v tom druhém dialogu nemusel objevit, dokud nenastavíte formát v prvním dialogu).

Některé zachytávací programy (včetně ATI's Multimedia Center) nepodporují externí kompresory, a proto nespolupracují s Huffyuv. Pokud nějaký takový používáte, doporučuji přejít na VirtualDub. (I když máte nějaký jiný, měli byste přejít také na VirtualDub, protože ten je o hodně lepší než jiné utility.)


Konfigurace Huffyuv

Huffyuv má konfigurační dialog, který vypadá takto:

[Huffyuv configuration dialog]


Do dialogu se můžete dostat kliknutím na tlačítko "Configure", jakmile zadáte Huffyuv kao Váš kompresor, nebo tlačítkem "Settings" které je vpravo vedle "Remove" v ovládacím panelu Multimedia.
Nabídky jsou vcelku jasné, ale trochu se zde pokusím o vysvětlení.


Metoda komprese

Zde si můžete určit rychlost komprese vůči kompresnímu poměru. Obecně lze říci, že metody umístěné na seznamu níže Vám zajistí lepší poměr, ale nemusí to vždy musí platit (zejména máme-li věřit níže uvedeným tipům, benchmarks pak "predict left" je lepší než "predict grad" pro video 720 x 480.)

Huffyuv je nakonfigurován na vyšší kompresi. Pokud zjistíte, že ztrácíte snímky, pokuste se přejít na nižší úroveň komprese. S moderním procesorem a moderním IDE harddiskem byste měli být schopni zachytávat video CCIR 601 při maximální ("predict median") kompresi zcela bez problémů.

"Predict median" není běžně dostupný pro kompresi RGB, nikoli proto, že by se nedal použít, ale prostě proto, že jsem jej sem ještě nezavedl.

Pro vstup ve formátu RGB máte rovněž možnost konverze do YUY2 s následnou kompresí. (Je to poslední nabídka v okně s rozbalovacím menu.) Není to zcela beze ztrát, ale to často nevadí, protože stejná komprese se tak jako tak provádí i při kompresi na formát MPEG nebo Indeo nebo jiný ztrátový formát.


Vždy zadávej formát RGB jako výstupní

Když si program načte AVI soubor komprimovaný pomocí Huffyuv, může buď požadovat, aby Huffyuv provedl dekompresi videa do určitého formátu (jako je RGB), nebo může požadovat "standardní formát". Standardní formát v Huffyuv je formát, ze kterého bylo video původně komprimováno, buď YUY2 nebo RGB.

Existuje řada programů na zpracování videa, které požadují, aby dekompresor vytvořil svůj standardní formát, ale pak fungují špatně, jakmile se Huffyuv vrátí na formát YUY2. Huffyuv sám detekuje některé z těchto programů (Premiere, Ulead Media Studio's Video Editor, AVI2MPG2_VFW, a Bink), a nahlásí jim RGB místo YUY2.

Nabídka "Always suggest RGB" (= vždy zadávej RGB") přikáže, aby toto Huffyuv provedl v každé aplikaci, nejenom u 4 výše uvedených. Pokud některá aplikace požaduje mít tuto nabísku zatrženou, oznamte mi to, tak abych to mohl přidat do seznamu v budoucích verzích Huffyuv a abych ušetřil mnohým mrzutosti.


Povolit kompresi RGBA

Huffyuv dokáže komprimovat obrázky RGBA (RGB s alfou)společně s RGB a YUY2. Problém je v tom, že formát, který aplikace jako Adobe After Effects používají pro RGBA bývá přesně ten samý jako normální 32-bitový RGB. Obávám se, že pokud je standardně dovolena komprese RGBA, mohla by nevinná aplikace převést 32-bitový RGB do Huffyuv, a v tom případě by Huffyuv vyplýtval spoustu místa komprimováním nevyužitého alfa kanálu. Spousta lidí kompresi RGBA nepotřebuje, proto jsem zvolil bezpečnou cestu a nenastavil ji jako standard, ale volitelnou nabídku.


Prohození polí k dekompresi

Některé zachytávací drivery nefungují a přehazují pořadí polí nazpátek. Pokud se s nějakým takovým setkáte, můžete tento problém vykompenzovat zatržením této nabídky-znovu si tím potvrdíte, že všechno zlé je k něčemu dobré.


Umožnit aktivaci okna konzoly

Pokud zatrhnete tuto nabídku, otevře Huffyuv okno konzoly kdykoli je použito a zobrazí různé diagnostické zprávy. Usnadňuje mit to řešit Vaše problémy E-mailem


Mailovat autorovi/ Navštívit domovskou stránku

Pokud je Váš systém nakonfigurován tak, že to umožňuje, otevře se nabídka "Email author" prázdnou mailovou zprávu na mou adresu, kam mi můžete napsat. Nabídka "Visit home page" otevře tuto stránku ve Vašem browseru.


Zásadní poznámky, tipy

Některé z kompresních metod v níže uvedené tabulce jsou ztrátové. Vyznačil jsem ztrátové metody vypsáním kompresního poměru kurzívou.

Neměřil jsem rozsah ztrát, ale pamatujte si, že jediným ztrátovým převodem v Huffyuv je konverze mezi RGB a YUY2, zatímco PCVideo provádí takovou konverzi a má ještě další ztrátové kroky.

Tabulky jsou uspořádány v sestupném pořadí kompresního poměru s výjimkou nepravidelných hodnot "Predict gradient" a "Predict left" pro klip 720x480. Nevím, proč jsou tyto hodnoty opačné, ale divil bych se, kdyby chyba byla v mém programu. Videoklip, který jsem používal, byla úvodní scéna z "Giant Robo," kterou jsem zvolil proto, že je velice proměnlivá ve velmi krátkém čase. Každý test jsem nechal proběhnout 5x a vybral jsem nejlepší čas z pěti

Pokud byste chětli vyzkoušet některý z těchto kodeků, zde jsou jejich domovské stránky:
YUY2 Výsledky komprese
320x240, 30fps
720x480, 30fps
Metoda komprese
Rychlost komprese (fps)
Rychlost dekomprese (fps)
Kompresní poměr
Rychlost komprese (fps)
Rychlost dekomprese (fps)
Kompresní poměr
PICVideo MJPEG / Q19
170.1
186.6
7.01:1
42.2
44.1
8.14:1
Huffyuv / Predict median
183.4
60.1
2.80:1
40.5
13.3
2.77:1
Huffyuv / Predict gradient
229.7
94.2
2.66:1
47.6
20.5
2.53:1
Huffyuv / Predict left
248.1
99.2
2.33:1
58.0
22.2
2.71:1
PICVideo MJPEG / Q20
95.2
100.3
2.28:1
22.3
23.7
2.50:1

RGB24 Výsledky komprese
320x240, 30fps
720x480, 30fps
Metoda komprese
Rychlost komprese (fps)
Rychlost dekomprese (fps)
Kompresní poměr
Rychlost komprese (fps)
Rychlost dekomprese (fps)
Kompresní poměr
PICVideo MJPEG / Q19, 4:2:2
129.7
163.0
9.79:1
30.8
37.4
10.14:1
Huffyuv / YUY2, Predict median
82.8
50.4
4.28:1
18.6
-
4.45:1
Huffyuv / YUY2, Predict gradient
94.9
72.4
4.07:1
20.4
-
4.14:1
Huffyuv / YUY2, Predict left
95.2
75.3
3.56:1
21.0
-
4.21:1
PICVideo MJPEG / Q20, 4:2:2
81.4
92.4
3.29:1
18.9
21.3
3.40:1
Huffyuv / Predict gradient
126.3
60.6
2.39:1
27.1
13.4
2.30:1
Huffyuv / Predict left
150.4
65.0
2.23:1
34.3
14.5
2.47:1
PICVideo lossless JPEG / "pseudo YCbCr"
34.3
43.8
2.10:1
8.2
10.7
2.35:1
Huffyuv / Predict left, no decorrelation
166.9
67.7
1.82:1
35.8
15.1
2.10:1
PICVideo lossless JPEG / default
50.8
43.1
1.68:1
13.4
10.8
1.98:1
AVIzlib / best
5.8
53.8
1.51:1
1.1
12.8
1.69:1
AVIzlib / fastest
9.7
51.2
1.47:1
2.4
12.0
1.62:1


Proč nepoužívat Motion JPEG?

Pokud zachytáváte video proto, abyste ho editovali a pak vrátili na pásku, pak je Motion JPEG perfektně vyhovující. Je to rovněž dobrý formát pro archivaci. Ovšem pokud vytváříte video MPEG (nebo jakýkoli ztrátový formát), pak byste neměli pro Vaše dočasně vytvářené soubory (pro účely dalšího zpracování) používat MJPEG (nebo jiný ztrátový formát). Důvodem je skutečnost, že JPEG byl navržen pro prohlížení, nikoli zpracování obrazu. JPEG dosahuje komprese využíváním známých nedostatků, které má lidské oko při vnímání, ale počítače se na obraz nedívají stějným způsobem jako lidské oko: klip formátu MJPEG, který se Vám bude zdát dobrý, se už tak dobrý nebude jevit dekodéru MPEG. Dekodéry MPEG jsou zpravidla velmi citlivé na hluk a MJPEG je v zásadě zdrojem hluku, kterému se lze vyhnout.


Chyby

Zatím mi nejsou známy žádné chyby v Huffyuvu


Zvláštnosti

Huffyuv předpokládá, že Vaše video má vodorovné rozlišení, které je násobkem čtyř. V budoucnu mohu toto omezení odstranit.


Novinky ve verzi 2.1.1

Huffyuv 2.0 a 2.1 při použití s Premire zcela zkrachly, protože Premiere někdy vyžaduje ICDecompress, aniž by nejprve požadovala ICDecompressBegin. Verze 2.1.1 už tuto chybu odstranila.

Pokud Vám MSP6 říká, že byste měli "convert your clip to 24-bit = konvertovat Váš klip na 24-bitový"," pokuste se ho rekomprimovat pomocí Huffyuv 2.1.1. Protože YUY2 používá 16 bitů na 1 pixel, používal formát YUY2 zkomprimovaný v Huffyuv hodnotu 16 v poli biBitCount. Ovšem jak Premiere, tak MSP6 si myslí, že to má co dělat s 16-bitovým RGB. Od verze 2.1.1 Huffyuv do tohoto pole vkládá 24, aby je uspokojil a ukládá skutečnou hodnotu jinde.

Tato verze má nový soubor .INF file, podporující odinstalování. Mé speciální poděkování patří Karlu Šuhajdovi, jehož návrhy mě přivedly k mnoha vylepšením kompresních metod v Huffyuv 2.0.


Novinky ve verzi 2.1

Tato verze by měla vyřešit problémy "přehazováním polí k dekompresi" a s tím, že Huffyuv se neobjevuje jako výstupní formát v Premiere an MSP6.

Pokud jste používali Huffyuv 2.0, pak po instalaci verze 2.1 musíte znovu navolit v konfiguraci kompresní metody YUV a RGB. Verze 2.1 podporuje soubory zkomprimované ve verzi 2.0, ale pokud máto takto zkomprimované soubory, které si chcete uložit natrvalo, musíte je dekomprimovat pomocí verze 2.1. Verze 2.0 běžela jen tři dny. Soubory můžete dekomprimovat s použitím VirtualDubu s kompresí videa nastavenou na Huffyuv, režimem video dub nastaveným na "fast recompress - rychlou rekompresi" a režimem audio dub nastaveným na "direct tream copy." Velikost souboru se nezmění, jestliže použijete stejnou metodu komprese jako předtím.

Přepsal jsem rovněž konverzní kód YUY2->RGB v MMX, což značně zrychluje dekompresi zkomprimovaného YUY2 na RGB.


Novinky ve verzi 2.0

Existuje několik volitelných metod komprese, z nichž většina nabízí výrazně lepší kompresi než algoritmus verze 1.x ovšem mírně na úkor rychlosti. Všechny metody komprese kromě "predict left" vyžadují procesor s MMX (doufám, že nikdo z Vás už needituje video na počítačích z doby před MMX).

Můžu dopsat podporu pro dekompresi souborů Huffyuv 1.x. Napište mi, jestli je to nutné (například jestli máte soubory 1.x archivované na nepřepisovatelném CD-R).

Huffmanovy tabulky používaní pro kompresi jsou nyní uloženy v souboru AVI společně s komprimovanými daty. To je významná změna, protože mohu v budoucnosti distribuovat Huffmanovy tabulky bez zpětného narušení kompatibility. Rovněž je pro konečného uživatele snazší, aby si vyhrál s účelovými Huffmanovými tabulkami. Místo navíc požadované v AVI souboru je zanedbatelné, obvykle kolem 150 bytů, a to na 1 soubor, nikoli snímek. Celý hlavní kompresní a dekompresní kód (kromě konverze colorspace) je nyní napsán v assembly language. Dekomprese je stále ale pomalejší než komprese. Jazykový kód se přemístil do svého vlastního souboru ASM, takže nyní potřebujete MASM nebo clone, abyste mohli Huffyuv kompilovat. Jon Kirwan má stránku, kde vysvětluje, jak získat MASM zdarma how to get MASM for free.

Je zde nyní nová nabídka "swap fields on decompress" pro zájemce s nefungujícími zachytávacími drivery. Komprese RGBA by nyní měla být možná v jakékoli aplikaci. Nepovolujte ji ale dříve, než ji budete chtít použít.
Do seznamu aplikací, které potřebují výstup RGB, byly přidány "avi2mpg2_vfw.exe" a "bink.exe".


Technické poznámky

Algoritmus Huffyuv je zhruba stejný jako bezeztrátové JPEG: predikuje (předem určuje, předpovídá) každý vzorek a Huffman dekóduje chybu. Funkce prediktoru jsou "left-vlevo" (predikuje předchozí vzorek ze stejného kanálu), "gradient" (predikuje Left+Above-AboveLeft - vlevo+nahoře-nahoře vlevo) a "median" (predikuje střední hodnotu z prediktoru Left, Above a gradient). Kanály se komprimují samostatně, ale v režimu RGB jsou používané kanály ve skutečnosti R-G, G a B-G. Tím se dosahuje mnohem lepší komprese než u R,G,B.

Chybový signál v každém kanálu je dekódován vlastní Huffmanovou tabulkou. Při kompresi si Huffyuv vytahuje příslušné tabulky ze svého archivu. Tyto tabulky jsou pak ukládány ve výstupním souboru a jsou používány při dekompresi.Tímto způsobem mohou budoucí verze Huffyuv dekomprimovat staré soubory bez výslovné podpory původních tabulek. Aplikace Huffyuv savvy může rovněž určit Huffmanovu tabulku, která má být použita pro kompresi místo přijetí standardní tabulky.

Pokud budete mít problémy s instalací Huffyuv pomocí huffyuv.inf, můžete instalovat ručně takto: Nejprve přesuňte soubor huffyuv.dll do Vašeho systémového adresáře windowssystem. Pak, pokud pracujete ve Win95/98, přidejte řádek VIDC.HFYU=huffyuv.dll do sekce [drivers32] system.ini.

Pokud máte WinNT/2000, použijte regedit k doplnění následujících hodnoto do registru:
[HKEY_LOCAL_MACHINESystemCurrentControlSetControlMediaResourcesicmVIDC.HFYU]
"Description"="Huffyuv lossless codec [HFYU]"
"Driver"="huffyuv.dll"
"FriendlyName"="Huffyuv lossless codec [HFYU]"