DGDecode
Přehled
autoři: MarcFD, Nic, trbarry, Sh0dan, Graft and others
verze: 1.5.5
kategorie: MPEG Dekodér
stáhnout: http://neuron2.net/dgmpgdec/dgmpgdec.html
požadavky:
licence: GPL
Obsah
DGDecode, část balíku DGMPGDec, je to MPEG-1/2 dekodér (plug-in) navržený pro AviSynth
v2.5 nebo vyšší. Je schopen dekódovat jakýkoliv MPEG-1 nebo MPEG-2
stream čitelný v DGIndexu. Další funkce zahrnují: YV12, I420, a YUY2 výstupní barevné
prostředí (a RGB24 přes DGVfapi), optimalizovaná iDCT, post-process deblocking (odstraňování kostkatění) a
deringing (odstraňování zvonění, chvění hran), jasové (luminosity)
filtrování, a více!
DGDecode je založen na MPEG2Dec3 v1.10, který sám je založen na MPEG2Dec2 ze SourceForge projektu "save-oe".
Důležitá poznámka: Tento filtr byl přejmenován na DGDecode aby se zabránilo zmatkům v
názvech a pro jasnější spojení s neuron2 verzí programu DVD2AVI zvanou DGIndex. Neuron2 chce vynaložit velké úsilí pro uznání původu DGDecode, jak je popsáno níže od MarcFD! Ano, neuron2 pokračoval ve vývoji
a udělal některé opravy, ale stojí na ramenou obrů uvedených níže v kapitole poděkování.
Poslední verze programu a zdrojového kódu DGMPGDec můžete stáhnout na http://neuron2.net/dgmpgdec/dgmpgdec.html
Toto je svobodný (free) software šířený pod
podmínkami GNU GPL v2 license. Musíte souhlasit s podmínkami této licence než začnete tento
plug-in nebo jeho zdrojový kód používat. Pro podrobnosti se podívejte prosím do kapitoly Licence .
MPEG2Source(str "d2v", int "idct", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", str "cpu2",
int "upConv", bool "iCC", bool "i420", int "info", bool "showQ", bool "fastMC")
Ačkoliv DGDecode může nyní dekódovat jak MPEG-1 tak i MPEG-2, je tato funkce stále nazývána MPEG2Source()
pro kompatibilitu s existujícími skripty. Můžete ji použít jak pro MPEG-1 tak pro MPEG-2 stream.
d2v: "[CESTA\]project.d2v"
DGIndex Projektový soubor.
vyžadovaný parametr!
Poznámka 1: CESTA může být
ignorována pokud "projekt.d2v" je ve stejné složce jako váš
AviSynth (*.avs) skript.
idct: 0 až 7 (výchozí: 0)
iDCT Algoritmus.
Pro více infomací o iDCTs se podívejte do Přílohy B.
Podívejte se
prosím do Přílohy C na podporované CPU.
- 0: Použije hodnotu zadanou DGIndexem
- 1: 32-bit MMX
- 2: 32-bit SSEMMX
- 3: 32-bit SSE2MMX
- 4: 64-bit Floating Point
- 5: 64-bit IEEE-1180 Reference
- 6: 32-bit SSEMMX (Skal)
- 7: 32-bit Simple MMX (XviD)
cpu: 0 až 6 (výchozí: 0)
Možnosti rychlého
nastavení zpracování (Post-Processing).
(Y=luma -
jas, C=chroma -barevnost, H=horizontální, V=vertikální)
- 0: VYPNUTÉ ZPRACOVÁNÍ (POST-PROCESSING)
- 1: DEBLOCK_Y_H
- 2: DEBLOCK_Y_H, DEBLOCK_Y_V
- 3: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H
- 4: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V
- 5: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y
- 6: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y, DERING_C
iPP: true/false (VÝCHOZÍ: auto)
Režim zpracování.
DGDecode
automaticky používá PROGRESSIVE_FRAME flag
(znak progresivního snímku) pro přepínání mezi zpracováním
založeném na polích/snímcích podle skladby snímků.
Měli
by jste zadat parametr iPP pouze
pokud chcete vynutit, aby DGDecode použil konkrétní
režim zpracování.
- [nezadané]: následuje PROGRESSIVE_FRAME flag
-
true: vynutí na polích založené (prokládané) zpracování
- false: vynutí na snímcích založené (progresivní) zpracování
moderate_h, moderate_v:
0 až 255 (výchozí: moderate_h=20, moderate_v=40)
Citlivost detekce bloků.
(moderate_h=horizontal, moderate_v=vertical)
Menší hodnoty jsou silnější, používejte s opatrností.
cpu2: (výchozí: "")
Uživatelské možnosti zpracování.
Zadává šestiznakový řetězec "x" a "o" v souladu se seznamem níže. (case-insensitive)
Každý "x" zapíná odpovídající funkci zpracování.
Každý "o" vypíná odpovídající funkci zpracování.
znak 1:
luma
horizontal deblocking (horizontální
odstranění kostkatění jasu - deblokování)
znak 2: luma vertical deblocking (vertikální odstranění kostkatění jasu)
znak 3: chroma horizontal
deblocking (horizontální odstranění kostkatění barevnosti)
znak 4: chroma vertical deblocking (vitikální odstranění kostkatění barevnosti)
znak 5: luma
deringing
(odstranění zvonění hran jasu)
znak 6:
chroma deringing (odstranění zvonění hran barevnosti)
Například, pro zapnutí zpracování jen barevnosti (chroma) použijte:
MPEG2Source("project.d2v", cpu2="ooxxox")
upConv: 0 až 2 (výchozí: 0)
Nadvzorkuje z 4:2:0 do YUY2 (4:2:2) nebo RGB24.
- 0: neprovede nadvzorkování
- 1: Nadvzorkuje do YUY2 (ignorováno pokud je vstup už 4:2:2)
- 2: Nadvzorkuje do RGB24
iCC: true/false (výchozí: auto)
Režim nadvzorkování.
DGDecode automaticky používá PROGRESSIVE_FRAME flag
(znak progresivního snímku) pro přepínání mezi nadvzorkováním
založeném na polích/snímcích podle skladby snímků.
Měli by
jste zadat jen
iCC parametr pokud chcete vynutit, aby DGDecode použil
konkrétní režim nadvzorkování.
- [nezadáné]: následuje PROGRESSIVE_FRAME flag
-
true:vynutí na polích založené (prokládané) nadvzorkování
- false: vynutí na snímcích založené (progresivní) nadvzorkování
i420: true/false (výchozí: false)
Předává I420 barevné prostředí.
Může být vyžadováno některými legacy aplikacemi.
Ignorováno jestliže vstup není YV12 (4:2:0), nebo při nadvorkování s upConv=1 nebo 2.
-
true: Předává I420
- false: Předává YV12
info: 0 až 3 (výchozí: 0)
Ladící (Debug) Informace.
- 0: Negeneruje ladící informaci
- 1: Ladící informace překrývání (Overlay) ve videu
- 2: Předává ladící informace přes OutputDebugString()
- 3: Předává údaje (hints) ve videu (jak je definováno v utilities.cpp/utilities.h)
showQ: true/false (výchozí: false)
Zobrazí kvantizery makrobloků.
- true: Zobrazí kvantizery
- false: Nezobrazí kvantizery
fastMC: true/false (výchozí: false)
Vladova kompenzace rychlého pohybu.
Velmi malé urychlení, ale se sníženou přesností.
Pro testovací účely, a může být odstraněna v příštích verzích.
Vyžaduje SSE nebo 3DNow!, podívejte se prosím do Přílohy C na podporu CPU.
LumaYV12(clip, integer "lumoff", float "lumgain")
Tato funkce nesouvisí s Jasovým filtrem (Luminance Filter)
DGIndexu.
Transformace je: Y = (y * lumgain) + lumoff
LumaYV12() předává rozsah 0->255 YUV , a ne CCIR-601 rozsah 16->235. Použijte
místo něj vestavěný filtr AviSynthu ColorYUV(),
jestliže potřebujete vynutit rozsah 16->235. Functionality LumaYV12() lze dosáhnout použitím
filtru AviviSyntu ColorYUV(), který má více možností, ale LumaYV12() je optimalizována pro rychlost
při provádění základních úprav
jasu.
lumoff: -255 až 255 (výchozí: 0)
Posunutí jasnosti (světelnosti).
Upraví jas (luma) všech pixelů o pevnou hodnotu.
lumgain: 0.0 až 2.0 (výchozí: 1.0)
Zesílení
(násobení) jasnosti.
Upraví jas (luma) všech pixelů o proporcionální hodnotu.
BlindPP(clip, int "quant", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", str "cpu2")
Deblokuje a/nebo odstraňuje zvonění jakéhokoliv video zdroje.
Vyžaduje YUY2 nebo YV12 vstup.
Podívejte se
prosím do Přílohy A na uživatelské poznámky.
quant: 0 až 31 (výchozí: 2)
Emulovaný
(napodobený) kvantizer.
Určuje intenzitu procesu deblokování.
cpu: 0 až 6 (default: 6)
Stejná funkce jako v MPEG2Source(), ale s jinou výchozí hodnotou.
iPP: true/false (výchozí: false)
Stejná funkce jako v MPEG2Source(), ale s jinou výchozí hodnotou.
Automatický režim NENÍ dostupný.
moderate_h, moderate_v, cpu2: (výchozí: moderate_h=20, moderate_v=40, cpu2="")
Stejné funkce jako v MPEG2Source(), ale s jinými výchozími hodnotami.
Deblock(clip, int "quant", int "aOffset", int "bOffset", bool "mmx", bool "isse")
Manaův H.264 Deblokovací filtr. (v0.9.5)
Vyžaduje YV12 vstup.
Oba (quant + aOffset) A (quant + bOffset) musí být > = 16 jinak filtr nic neudělá.
quant: 0 až 51 (výchozí: 25)
Emulovaný
(napodobený) kvantizer.
Určuje intenzitu procesu deblokování.
aOffset: (výchozí: 0)
Modifikátor k prahové hodnotě detektoru kostkatění (bloků).
Jeho vyšší nastavení znamená, že bude deblokováno více hran.
bOffset: (výchozí: 0)
Modifikátor pro detekci bloků a pro intenzitu deblokování.
Znovu, čím vyšší, tím silnější.
mmx: true/false (výchozí: true)
Automaticky se vypne, když ji CPU nepodporuje.
- true: Zapne MMX optimalizaci
- false: Vypne MMX optimalizaci
isse: true/false (výchozí: true)
Automaticky se vypne, když ji CPU nepodporuje.
Podívejte se
prosím do Přílohy C na podporované CPU.
- true: Zapne SSE optimalizaci
- false: Vypne SSE optimalizaci
Uživatelské příklady
| Obsah |
Načtení pluginu do AviSynthu - LoadPlugin()
| Obsah |
Funkce
AviSynthu LoadPlugin() musí být volána před použitím funkcí DGDecode.
Pro
splnění této podmínky, přidejte na začátek vašeho AviSynth (*.avs) skriptu následující řádek:
LoadPlugin("[PATH\]DGDecode.dll")
Poznámka: PATH (CESTA) může být
ignorována pokud DGDecode.dll je ve výchozí složce pluginů AviSynthu
, jinak musí být PATH zadána.
MPEG2Source() - příklady
| Obsah |
MPEG2Source() by měl být použij jen s MPEG-1 a MPEG-2 video zdroji.
Prosté YV12 dekódování:
MPEG2Source("[PATH\]project.d2v")
Poznámka: PATH může
být ignorována jestliže "project.d2v" je ve stejné složce jako váš
AviSynth (*.avs) skript.
Provedení pouze deblokování:
MPEG2Source("project.d2v", cpu=4)
Provedení deblokování prokládaného zdroje se zvýšenou vertikální citlivostí:
MPEG2Source("project.d2v", cpu=4, iPP=true, moderate_v=20)
Provedení pouze "deringing" (odstranění zvonění, chvění hran):
MPEG2Source("project.d2v", cpu2="ooooxx")
Výběr optimalizace 32-bit SSE2 iDCT a také výstup do I420 barevného prostředí:
MPEG2Source("project.d2v", idct=5, i420=true)
Převedení do YUY2 založené na PROGRESSIVE_FRAME znaku:
MPEG2Source("project.d2v", upConv=1)
Zobrazení informací o videu na obrazovce:
MPEG2Source("project.d2v", info=1)
LumaYV12() - příklady
| Obsah |
Následující příklady LumaYV12() jsou samozřejmě zcela subjektivní.
Upravte si je poble libosti.
Ztmavení jasu:
MPEG2Source("project.d2v")
LumaYV12(lumoff=-10, lumgain=0.9)
Zesvětlení jasu:
MPEG2Source("project.d2v")
LumaYV12(lumoff=10, lumgain=1.1)
BlindPP() - příklady
| Obsah |
BlindPP() by nemělo být použito, když je video otevřeno pomocí funkce
MPEG2Source() , protože její
možnosti zpracování budou pracovat lépe. Typicky je BlindPP() používáno při otvírání videa pomocí filtrů AviSynthu
AviSource() nebo
DirectShowSource().
Provedení výchozího deblokování a odstranění zvonění hran (deringing):
AVISource("my_video.avi")
BlindPP()
Provedení pouze deblokování:
AVISource("my_video.avi")
BlindPP(cpu=4)
Provedení deblokování na prokládaném zdroji se zvýšenou horizontální citlivostí:
AVISource("my_video.avi")
BlindPP(cpu=4, iPP=true, moderate_h=10)
Provedení silnějšího deblokování a odstranění zvonění hran:
DirectShowSource("my_video.mpg")
BlindPP(quant=12)
Provedení pouze odstranění zvonění hran:
DirectShowSource("my_video.mpg")
BlindPP(cpu2="ooooxx")
Deblock() - příklady
| Obsah |
Deblock() může být použito s MPEG-2 video zdrojem z MPEG2Source() pokud
to upřednostňujete před zpracováním pomocí MPEG2Source(), nebo
to může být použito s jinými zdroji videa. V
druhém případě to obyčejně znamená otvírání videa pomocí filtrů AviSynthu
AviSource() nebo
DirectShowSource().
Provedení výchozího deblokování:
MPEG2Source("my_video.d2v")
Deblock()
nebo:
AVISource("my_video.avi")
Deblock()
Provedení silného deblokování se zvýšenou citlivostí:
DirectShowSource("my_video.mpg")
Deblock(quant=32, aOffset=16, bOffset=24)
Příloha A: BlindPP() - Poznámky
| Obsah |
Bloky (kostkatění
obrazu) jsou důsledkem 8x8-pixel DCT používané MPEG
enkodéry. Takže za prvé, musíte si být jisti, že bloky
které chcete deblokovat (vyhladit,
tzn. zbavit se kostkatění) jsou stále zarovnány na 8-pixelových hranicích. To znamená, neprovádět žádné ořezání obrazu (cropping) a žádné změny velikosti (resizing) před použitím
BlindPP(). Pokud je váš zdroj kódován prokládaně, nastavte iPP=true, pokud
je progresivní pak je výchozí nastavení správné (iPP=false).
Parametry jsou: quant, cpu2, moderate_h, a moderate_v.
quant udává celkovou sílu se kterou je deblokovací proces prováděn.
Nastavte cpu2 na
"xxxxoo" pro horizontální a vertikální deblokování jasu
a barevnosti, na "xooxoo" pro horizontální jasové a vertikální barevnostní deblokování, atd. Jak budete chtít.
moderate_h a moderate_v určuje horizontální a vertikální citlivosti, to je, kde
provést deblokování, a kde ho neprovádět. Ovládají citlivost rozpoznávání zda jsou bloky přítomny.
quant=2, moderate_h=35-45, moderate_v=45-55 vám dá velmi jemné změkčení pouze na silných, jasně viditelných blocích. To zachová velmi mnoho detailů a ostrosti, ale také nechá nedotkuté
slabé bloky, a ne zcela zničí ty silnější.
quant=16, moderate_h=15-20, moderate_v=
20-30 provede spíše silné deblokování na téměř všem co by snad mohlo být blokem, ale také vyhladí hodně detailů a ostrosti.
Zbytek je už na vás, vašem vkusu a vašem zdrojovém materiálu.
Jiný příklad... protože výborný odšumovač PixieDust() může sám občas
způsobit kostkatění v pohyblivých oblastech, dělám občas toto:
PixieDust(2).BlindPP(quant=8, cpu2="xxxxoo", moderate_h=45, moderate_v=55)
Toto odstraní slušné množství nejvíce viditelného kostkatění, pokud a pouze jestliže PixieDust() nějaké
vytváří. Na zbývajících 99.8% kde PixieDust() neudělal
bloky, toto neprovede téměř nic, tak jak to právě potřebujete.
Příloha B: iDCT Algoritmus - Poznámky
| Obsah |
Textový soubor FlasKMPEG obsahuje výborný technický popis iDCT. Cituji:
"Video informace uvnitř MPEG souborů jsou
uchovány spíše ve frekvenčním pásmu než v prostorovém
(spatial) pásmu (obrazy, které vidíme). Tak se stávají informace kompaktní a kompaktnost může
být využita ke kompresi (snížení) množství informací, které musíte poslat přes přenosový kanál. MPEG používá DCT
(Discrete Cosine Transform - Diskrétní kosinová transformace) pro překlad prostorové informace na frekvenční informaci. Pro navrácení prostorové informace z MPEG streamu musíte použít iDCT, to je, Inverse Discrete
Cosine Transform (Inverzní diskrétní kosinová transformace), která obrátí DCT , jenž byla použita při kódování."
"Ačkoli MPEG je téměř deterministický
(výstup daného MPEG streamu by měl
být identický ve všech dekodérech), standard má určitou volnosti při volbě použitého iDCT. Tak, dekodér může být snadněji implementován v závislosti na hardwaru pod ním. To co standard od dekodéru vyžaduje, je aby iDCT splňovala
IEEE-1180 specifikace, neboli prostými slovy, aby chyba z iDCT nepřekračovala tyto specifikace uvedené v IEEE-1180."
Kterou iDCT by jste měli použít závisí primárně na CPU a v menší míře na přesnosti iDCT kterou si přejete.
Většina lidí nebude schopna říci rozdíl v kvalitě mezi těmito
algoritmy, ale lze ho snadno pozorovat kombinováním filtrů AviSynthu Subtract()
a Levels() . Všechny
dostupné možnosti splňjí IEEE-1180, kromě SSE/MMX (Skal).
Stupeň kvality: IEEE-1180 Reference > 64-bit Floating Point > Simple MMX (XviD) > Ostatní iDCTs.
Stupeň rychlosti: SSE2/MMX a SSE/MMX (Skal) jsou obvykle nejrychlejší. IEEE-1180 Reference je
prostě nejpomalejší.
Příloha C: SIMD Instrukce
| Obsah |
SIMD je zkratka pro Single Instruction, Multiple Data (jedna instrukce, více dat). Je to termín, který odkazuje na sadu operací pro efektivní manipulaci s velkým
množstvím dat paralelně. Je to obzvlášť produktivní pro aplikace, ve kterých jsou zpracovávány video nebo audio soubory. Co obvykle vyžadovalo řadu instrukcí lze nyní vykonat v jedné
instrukci.
Existuje sedm různých sad SIMD instrukcí, které jsou k dispozici pro procesory Intel a AMD, ale ne
každý procesor podporuje všechny tyto moderní instrukční sady. To je důvod, proč mnoho funkcí DGDecode nabízí možnosti pro
určení, která sada optimalizací má být použita. Níže uvedená tabulka uvádí SIMD instrukce podporované DGDecode, a požadované procesory
pro jejich využití.
Tabulka 1: SIMD Instrukce podporované v DGDecode
| MMX
| 3DNow!
| SSE
| SSE2
|
Vyžadované Intel CPU
| Všechny Intel CPU
| Nepodporované v Intel CPU
| Pentium 3, Pentium 4
| Pentium 4
|
Vyžadované AMD CPU
| Všechny AMD CPU
| Všechny AMD CPU
| Athlon XP, Athlon 64
| Athlon 64 |
Abecední pořadí:
"ARDA", za filtr LumaYV12()
Mathias Born, autor původního MPEG2Dec
"Cyberia", za Přílohy B a C, a modernizaci uživatelského manuálu
"Didée", za Přílohu A: Poznámky k použití BlindPP()
"fccHandler", MPEG dekódování opravy/vylepšení, dobré rady
Donald Graft ("neuron2"), oprava vypouštění snímků, přesné indexování, podpora PVA, a další
Peter Gubanov, autor MMX/SSEMMX iDCT
Chia-chen Kuo ("jackei"), autor DVD2AVI
"Manao", za jeho filtr Deblock()
"MarcFD", YV12 podpora a další
"Nic", zpracování (post-processing) a další
Miha Peternel, autor Floating Point a Reference iDCT
Dmitry Rozhdestvensky, autor SSE2 iDCT
"sh0dan", optimalizace kódu
"Skal", za jeho SSEMMX iDCT
"trbarry", transport parsing, a optimalizace kódu
"tritical", nadvzorkování (upsampling), překrytí informacemi, zdokonalení VFAPI, a oprava množství chyb
Tento program je šířen za podmínek GNU Public
License. Na podrobnosti se podívejte prosím do souboru COPYING.TXT zahrnutého do tohoto distribučního balíku.
Copyright (C) 2004-2006 Donald A. Graft, Všechna práva vyhrazena.
Český překlad:12.6.2009