Úrovně jasu

Špatné úrovně jsou běžným přehrávacím problémem. Je to předmět, který je stále znovu diskutován. Cílem tohoto tématu je soustředit kolektivní znalosti Doom9 komunity týkající se tohoto předmětu. Podělte se prosím všichni o své vědomosti. Budu aktualizovat informace níže abych zařadil vaše moudra.

Obsah

Co to jsou úrovně jasu?

Digitální video je typicky enkódováno v YCbCr formátu. YCbCr je rodina barevných prostředí (YV12, YUY2, atd.), která enkóduje barevnou informaci (chroma) odděleně od jasové informace (luma).

Existují dva standardy pro enkódování jasu (luminance). Pro standarddefinition TV (SDTV) je standard BT.601, a pro high-definition TV (HDTV) je standard BT.709.

Jasové hodnoty jsou v daném rozsahu. Naneštěstí není tento rozsah vždy stejný. Existují dva běžně používané rozsahy: 0-255 (aka PC levels) a 16-235 (aka TV levels). (Vysvětlit proč ...) To platí jak pro YCbCr tak pro RGB formát. Obvykle je vaše video uloženo v rozsahu 16-235 YCbCr, ale je přehráváno zpět v 0-255 RGB. To znamená, že úrovně potřebují být v určitém okamžiku rozšířeny (expandovány). Ale v některých případech bude vaše video uloženo jako 0-255 YCbCr (DV je takový příklad), a není potřeba žádné expandování.

Proto při převádění YCbCr barevného prostředí na RGB, musí být použit správný standard (BT.601 nebo BT.709) a správný rozsah (TV nebo PC levels).

Výše uvedené nemusí být vždy provedeno správně. Může to být špatně kvůli určitým kombinacím video rendererů, rozlišení videa a nastavení grafického ovladače.

Jak poznám jestli jsou úrovně špatné?

Video vypadá vyprané a barvy nejsou živé. Černá je zobrazena jako tmavě šedá. Bílá je zobrazena jako světle šedá.

Také je možný opak, ale je to méně časté. V takovém případě jsou tmavé barvy zobrazeny příliš tmavě, a světlé barvy jsou zobrazeny příliš jasně.

Které kombinace dávají špatné úrovně?

Roli hraje mnoho faktorů, takže není možné dát seznam kombinací, které vždy dají špatné úrovně pro každého. Níže je (neúplný) seznam situací ve kterých se mohou špatné úrovně vyskytnout (při sledování PC monitoru). To znamená, že převádějí YCbCr [16,235] na RGB [16,235] (tedy úrovně nejsou expandovány). Ale obecně dejte prostě na své oči.

(pokud máte doplnění tohoto seznamu, tak ho prosím pošlete)

Jak mohu úrovně opravit?

Metody níže předpokládají, že vysíláte video (uložené jako 16-235 YCbCr) na PC monitor nebo LCD TV, tedy zařízení, které potřebuje RGB plného rozsahu (0-255). Pokud používáte CRT TV, tak si přečtěte komentáře k metodám 2 a 3.

Metoda #1: Úprava nastavení grafického ovladače

NVIDIA

Od verze 177.84, ovladače NVIDIA mají možnost konfigurace rozsahu jasu (luma range).

Možnost najdete zde: NVIDIA Control Panel -> Video & Television -> Adjust video color settings -> Select "With the NVIDIA settings" -> Advanced tab -> Set Dynamic Range to "Full (0-255)".

ATI

Ovladač ATI vyžaduje úpravu Registru. S použitím úpravy ovladač převede TV úrovně (levels) do PC úrovní pro video s SD (do 768x576) rozlišením. Už to dělá jako výchozí pro HD video.

Na dopracování: zahrnout idiotské potvrzení řešení pro aplikaci úpravy

Některé úpravy ATI ovladače lze najít zde. Nastavení UseBT601CSC je to, které se vztahuje k úrovním jasu.

Metoda #2: Převod do RGB32 pomocí ffdshow

Donucení ffdshow vysílat RGB32 může pomoci zabránit problémům s úrovní jasu. Stinnou stránkou této metody je, že provádění tohoto převodu v softwaru zvyšuje zatížení CPU.

Pro vynucení RGB32 výstupu v ffdshow by jste měli zrušit zatržení všech barevných prostředí kromě RGB32 na výstupní straně (Output page) v ffdshow konfiguraci. Také se doporučuje zapnout "High quality YV12 to RGB conversion" (Vysoce kvalitní převod YV12 do RGB). Na straně převodu RGB, můžete zvolit který standard by měl být předpokládán, BT.601 nebo BT709. Vyberte první pro materiál s nízkým rozlišením, a druhý pro HD video.

Poznámka: možnost automatického výběru založená na rozlišení videa snad bude přidána v blízké budoucnosti.

Tip: možnost Profiles/Presets v ffdshow lze použít pro vytvoření různých sad nastavení. Dokonce můžete autonačítat profily založené na podmínkách jako rozlišení formátu videa. Mohli by jste například vytvořit profil specificky pro video s HD rozlišením, a použít profil 'standard' pro videa s nízkým rozlišením.

Poznámka: Při vysílání do CRT TV, musíte vybrat "Full Range" kontrast. Pro PC monitory a LCD TV, je výchozí nastavení "Standard" kontrast správné.

Metoda #3: Filtr Levels v ffdshow video dekodéru

ffdshow má speciální filtr pro úpravu jasových (luminance) úrovní. Pro opravu špatných úrovní jasu na PC monitorech nebo LCD TV obvykle potřebujete převést do PC úrovní. Pro opravu špatných úrovní pro CRT TV, obvykle potřebujete převést do TV úrovní.

Pro převod TV úrovní do PC úrovní použijte 16-235 jako vstupní rozsah a 0-255 jako výstupní rozsah. Pro převod z PC úrovní do TV úrovní použijte 0-255 jako vstupní rozsah a 16-235 jako výstupní rozsah.

Metoda #4: Pixelshader v Media Player Classic

Pixelshader je malý program, který běží na vašich grafických kartách a zpracovává nějaká grafická data. V tomto případě každý snímek vašeho videa.

Media Player Classic má speciální pixelshader zvaný "16-235 -> 0-255" pro převádění TV úrovní do PC úrovní. Tento shader jen upraví jasové hodnoty. Existuje také shader zvaný "BT.601 -> BT.709". Ten je pokročilejší a také upravuje barevné (chroma) hodnoty.

Poznámka: současné shadery v MPC se vždy chovají stejně, bez ohledu na rozlišení videa. Protože špatné úrovně se nemusí objevit ve všech rozlišeních, nedoporučuje se mít zapnuté shadery pořád. Úprava úrovní když není potřeba povede k neoptimálním výsledkům.

Některé požadavky pro pixelshadery v MPC:

Metoda #5: Použití AviSynth skriptu v ffdshow video dekodéru

Úprava úrovní nebo převod do RGB32 lze také provést pomocí AviSynth skriptu v ffdshow. Je to pro pokročilé uživatele.

Pokud je vaše video uloženo jako 16-235 YCbCr, otevřete kartu video dekodér v ffdshow (zde je to provedeno pro MPC):

Zatrhněte okénko AviSynth, a vytvořte následující skript

ffdshow se sám přidá jako zdroj. Více informací najdete zde.

Pokud je vaše video uloženo jako 0-255 YCbCr, vytvořte následující skript:

ConvertToRGB(matrix="PC.601") # zachová video plného rozsahu (použijte matrix="PC.709" pokud je to vhodné)

Pokud je vaše video uloženo jako 0-255 YCbCr a vy chcete poslat 16-235 YCbCr do vašeho rendereru, použijte

ColorYUV(levels="PC->TV") # převod do TV-levels

Metoda #6: Nastavení monitoru

Některé monitory mohou být kalibrovány aby předpokládali určitou úroveň jasu jako vstup.

Metoda #7: Změna velikosti v softwaru

Pokud se objeví špatné úrovně jen u SD video rozlišení a ne u vysokých rozlišení, pak by bylo další řešení změnit velikost videa v softwaru. Například ffdshow lze použít pro změnu velikosti videa.

Testové soubory

Zde je několik pěkných testových klipů pro vyzkoušení vašeho nastavení: Test klipy (díky littleD za jejich vytvoření).

Díky clsid za napsání tohoto výborného článku.

$Enflish Date: 2009/08/22 17:35:09 $

Český překlad:2.9.2009