Annuncio

Collapse
No announcement yet.

HTPC, il post-processing (ffdshow)

Collapse
X
 
  • Filter
  • Ora
  • Show
Clear All
new posts

  • HTPC, il post-processing (ffdshow)

    ffdshow
    ffdshow è senza dubbio l'indiscussa tool che più di ogni altra ha preso posto nella configurazione di un odierno HTPC. Il motivo è molto semplice: è in grado di "migliorare" - almeno a livello percettivo - la qualità video di un normale DVD (Standard Definition; 720x576) restituendone un'immagine più dettagliata, compatta e profonda ma soprattutto facendolo in tempo reale (durante il playback). Naturalmente questo non è il solo scopo/uso di ffdshow ma di sicuro è ciò che lo rende di così gran valore.

    Siccome è uno strumento dalle mille possibilità, configurararlo come si deve, senza uno straccio di indizio, potrebbe risultare un vero dolore fisico. Come se non bastasse - quale grande novità - al nome Avisynth troviamo un grandissimo "alleato" - da affiancare, a beneficio della qualità finale - in grado di confondere ancor di più i già provati neuroni.

    Avisynth
    Avisynth è un free frameserver per il video editing, gestito interamente da scripts. Si posiziona ad un livello intermedio della catena: tra la sorgente video originale ed il programma ricevente (quale può essere un player, un video editor od un encoder). E' in grado di applicare un vasto range di funzioni di editing/processing (ciò che in questo caso interessa particolarmente) e, cosa più importante, è integrabile; ciò lo rende strumento utile e potente per arricchire il pacchetto "base" ffdshow.

    DScaler 4.x
    Software per la cattura video e suo successivo processing/scaling. Anch'esso supportato da ffdshow, è utile per aggiungere nuove funzionalità (filtri).

    E adesso?
    Un po' di chiarezza, a questo punto, è quasi d'obbligo.

    Vedremo quindi, nella giusta misura, le più importanti evoluzioni di questo frustrante mondo ( se non lo è, lo diventerà ) per rimanerne al passo.

    Due premesse sono senz'altro d'obbligo:[list=1][*]Sebbene i risultati che si possono ottenere con questi strumenti siano meravigliosi, tutto questo ha un prezzo: infatti, ricordatevi SEMPRE che abilitare ffdshow inibirà automaticamente la spinta accelerativa (e relativi benefici della tecnologia built-in) data dalla vostra scheda video (DXVA: DirectX Video Acceleration) a supporto della riproduzione. Il tutto graverà, quindi, sulle spallucce (fragili o robuste, dipende dai MHz) della CPU.[*]Figlia della prima premessa... Avisynth era già conosciuto nell'ambiente come ottimo tool per gestire il post-processing prettamente in ambito off-line. Con l'andar del tempo si sono migliorate librerie e scripts - compatibilmente con l'uscita di CPU sempre più potenti - al punto tale da raggiungerne un'implementazione on the fly (com'è nel nostro caso). La power request, tuttavia, risulta ancora alta. Se non siete provvisti di tagli CPU superiori al 3GHz/3000+ (Intel/AMD) l'uso dei filtri Avisynth risulterebbe alquanto velleitario.[/list]
    http://www.productionig.com/contents.../motoko_05.jpg

  • #2
    Welcome to the post-processing world!

    I downloads
    Preparare l'ambiente è senza dubbio la cosa più facile, tuttavia prestare la giusta attenzione è sempre importante.

    Localizzate e scaricate:
    [list][*]DScaler 4.1.15: la release adatta allo scopo.[*]Avisynth 2.5.6a: la release adatta allo scopo.[*]stealth82's pack (che sborone ): utile in quanto raccoglie, in forma aggiornata, scripts e librerie (plugins) fondamentali (HQdn3d, LimitedSharpen/LimitedSharpenFaster, MaskTools, MT, RemoveGrain, Repair, WarpSharp).[*]ffdshow-20051129: a fronte delle migliaia di releases uscite, correnti e prossime, risulta la più bilanciata; ricca, affidabile e prestante.



    N.B. Non sempre una nuova versione è superiore, anzi, a volte, come consumo CPU, le differenze potrebbe essere eclatanti... in peggio.[/list]I links per scaricare ciò che vi serve li trovate, sotto la sezione codecs (etc.), a questo indirizzo: http://www.avmagazine.it/forum/showthread.php?t=49387.

    L'installazione[list=1][*]Installate DScaler: semplicemente cliccate avanti fino alla fine.[*]Installate Avisynth: semplicemente cliccate avanti fino alla fine.[*]Installate i plugins Avisynth:

    Dal gruppo AviSynth 2.5 nel menu programmi cliccate Plugin Directory.

    Molto semplicemente si aprirà una subfolder del path di installazione del programma.







    Affiancate ora l'apertura dello stealth82's pack (l'archivio rar) e trascinate (drag & drop) il necessario secondo il vostro hardware (quando è il caso) seguendo le note sotto riportate:
    Tutte le CPU

    Copiate hqdn3d.dll, warpsharp.dll.



    Le CPU SSE2*

    Copiate RemoveGrainSSE2.dll, RepairSSE2.dll.



    Le CPU SSE3*

    Copiate RemoveGrainSSE3.dll, RepairSSE3.dll.



    Le CPU non aventi SSE2/SSE3*

    Copiate RemoveGrainS.dll, RepairS.dll.



    Le CPU multithreading*

    Aprite l'archivio MT.rar.



    Copiate MT.dll.



    Nella cartella system32 di Windows (solitamente C:\WINDOWS\System32) copiate la libreria avisynth.dll sostituendola all'attuale (fate un backup preventivo in caso di evenienza).



    Il LimitedSharpen/LimitedSharpenFaster

    Ultima evoluzione nell'evoluzione, lo script più ambito ha seguito due strade diverse. Poichè il risultato è il medesimo, ma non le prestazioni in termini di esecuzione (così come la manutenzione), vi proporrei di utilizzare semplicemente il LimitedSharpenFaster (l'altro lo mantengo per storico).



    Aprite l'archivio LimitedSharpenFaster.rar.

    Copiate LimitedSharpenFaster.avsi, mt_masktools.dll.



    * Potete facilmente controllare le vostri istruzioni CPU e multithreading con CPU-Z.

    Le varie DLL - divise per istruzioni - si escludono a vicenda (se avete SSE3 copierete SOLO quelle, e così via).
    Esempio su base AMD Athlon 64 3500+ (ergo: SSE3, no MT)

    [*]Installate ffdshow (vi fate un favore se lo installate in lingua inglese): semplicemente prestate attenzione a queste tre schermate (le quali dovrebbero già risultare precompilate se state seguendo questo ordine di installazione - cioè DScaler e Avisynth prima di ffdshow - in quanto ffdshow riconoscerà i programmi "interfacciabili" attualmente installati).



    Attivate il supporto per Avisynth e DScaler





    Verificate la correttezza del percorso per la cartella plugins di Avisynth





    Verificate la correttezza del percorso per la cartella di installazione di DScaler

    [/list]Ora che la "base" è installata si può procedere alla "sola" configurazione di ffdshow in quanto non useremo direttamente nè Avisynth nè DScaler.
    Last edited by keito; 01 September 2006, 14:49.
    http://www.productionig.com/contents.../motoko_05.jpg

    Comment


    • #3
      ffdshow e lo spazio colore: la testa e la coda!

      Come prima cosa è indubbio premettere che l'ambiente dell'editing video è decisamente "spiazzante". Su tutto gli spazi colore: ve ne sono di molti tipi (RGB16, RGB24, RGB32 e YUV, YUY2, YV12, I420 etc.). Per stringere, un DVD "lavora" su spazio colore YV12 (YUV) così come i filtri di post-processing di ffdshow (anche quelli da noi usati in Avisynth).

      Ricordare questo concetto è abbastanza importante; da esso dipendono le prestazioni della catena di post-processing e la qualità finale. In che modo?
      Ebbene, elaborare un immagine già lavorante sul medesimo spazio colore di un filtro solleva quest'ultimo dalla conversione alla spazio colore a lui "compatibile". Ciò previene l'inutile consumo di CPU e l'inevitabile - se eseguito molte volte - degrado video dato dalla conversione (la quale non è mai, quindi, indolore).

      Fortunatamente i players DVD che si "rispettino" escono anche in spazio colore YV12.
      Se vogliamo assicurarci che ffdshow lavori solo se riceve uno raw (forma non processata) stream - poichè è questo il formato all'atto pratico, già decodificato dal player - YV12 dovremo:

      Abilitare alla tab Codecs, alla voce Raw video il valore YV12.



      Così come è importante entrare con lo spazio colore "giusto", così vorremmo che fosse anche in fase di output (ovvero a post-processing avvenuto):

      Alla tab Output spuntare solamente YV12.

      Last edited by keito; 01 September 2006, 14:49.
      http://www.productionig.com/contents.../motoko_05.jpg

      Comment


      • #4
        I filtri, l'ordine

        Per abilitare un filtro basta semplicemente spuntare la casella checkbox a fianco del nome (lista di sinistra).

        Un ulteriore coefficiente di difficoltà nel raggiungere una buona configurazione di ffdshow è dato dalla possibilità di stabilire l'ordine in cui verranno eseguiti i vari filtri attivati. Anche se per la maggior parte di questi la differenza non sarà mai evidente, ad uno in particolare è importante prestare attenzione: il resize (filtro Resize & aspect o, come vedremo, anche da Avisynth). Dalla sua posizione, rispetto al resto, dipendono infatti consumi CPU ed impatto visivo. Il motivo è presto detto: è molto più veloce processare un'area di 720x576 (originale) piuttosto che una di, ad es., 1280x720 (dopo resize).

        ffdshow
        Spostare i filtri è molto semplice: cliccate sulle frecce di transizione (alto / basso) presenti a fianco di ciascun filter checkbox. Per reimpostare l'ordine originale fate click su Reset order.



        ffdshow > Avisynth
        Se per ffdshow l'ordine è di facile intuizione, per Avisynth le cose si complicano leggermente, o meglio, il filtro di controllo non contiene proprietà definite bensì una semplice textarea. Le istruzioni Avisynth, infatti, dovranno essere "compilate" a mano. Per separare ciascuna istruzione andate a capo al termine di ognuna. L'ordine in cui sono scritte determinerà il loro ordine di esecuzione il quale, a sua volta, sarà soggetto all'ordine di ffdshow.



        Detto questo, diciamo anche che la scelta di filtri e rispettivi parametri non è "scienza" esatta. Se è per questo tutto il qui presente argomento è altamente soggettivo; ciò che può sembrare una buona configurazione può dipendere da software, output video e/o gusti personali.

        Non inserirò quindi configurazioni "assolutistiche" ma semplicemente basi di partenza inerenti i migliori filtri in circolazione.
        http://www.productionig.com/contents.../motoko_05.jpg

        Comment


        • #5
          Il denoiser

          Il denoiser permette di attenuare il rumore (noise) presente sul frame.

          I più diffusi sono:[list][*]Gradual Denoise
          Abilitate il filtro Blur & NR con opzione Gradual Denoise. Il valore di 40 è un buon inizio.
          E' il filtro di denoise meno esoso in termini di prestazioni CPU. La qualità è tuttavia buona, ma non eccelsa in paragone a colleghi più "robusti".

          [*]denoise3d
          Abilitate il filtro Blur & NR con opzione denoise3d. Buoni valori di inizio, per ciascun trigger, in ordine, sono: luma 0.50, chroma 0.50, time 5.00.
          "Bel denoiser" ad alta incidenza sul frame. La qualità è di tutto rispetto, anche il consumo CPU. "Se ne avete" potete provare ad abilitare anche l'High Quality spuntanto la checkbox HQ.

          [*]HQdn3d (Avisynth, multithread opzionale)
          Abilitate il filtro Avisynth ed inserite nell'apposita text area l'istruzione:

          Codice:


          hqdn3d(2)
          </pre>
          L'argomento tra parentesi (l'intero, in questo caso il numero 1) determina il grado di incidenza - come forza - del filtro. Un valore superiore a 5 è sconsigliato in quanto introdurrà effetti collaterali quali perdita di dettaglio.
          Eccellente denoiser dal consumo CPU importante. "Se ne avete" è quasi una scelta definitiva. Può essere supportato dal multithreading.

          [*]RemoveGrain (Avisynth, multithread opzionale)
          Abilitate il filtro Avisynth ed inserite nell'apposita text area l'istruzione:

          Codice:


          RemoveGrain(mode=2)
          </pre>
          L'argomento tra parentesi (l'intero dopo mode=, in questo caso il numero 1) determina il grado di incidenza - come forza - del filtro. Va da 1 a 10. Un valore superiore a 2 inciderà sulle prestazioni e sul dettaglio (a 2 mantiene ancora "coscienza" delle linee fini).
          E' un denoiser che si difende. Può essere supportato dal multithreading.

          [*]mergeluma + RemoveGrain (Avisynth, multithread opzionale)
          Abilitate il filtro Avisynth ed inserite nell'apposita text area l'istruzione:

          Codice:


          mergeluma(RemoveGrain(4, -1), 0.08)
          </pre>
          Prendere in considerazione solamente l'ultimo parametro della chiamata. Va da 0.08 a 2. Un valore superiore a 0.75, cmq, inciderà sul dettaglio come perdita. Può essere supportato dal multithreading.



          Con i parametri sopra riportati risulta essere uno stronger denoiser. Potete provarne uno più blando inserendo questa chiamata:

          Codice:


          mergeluma(RemoveGrain(2, -1), 0.25)
          </pre>
          Potete variare l'ultimo valore da 0.25 a 0.50.[/list]
          http://www.productionig.com/contents.../motoko_05.jpg

          Comment


          • #6
            Lo sharpener

            Lo sharpener incrementa la nitidezza del frame enfatizzando le variazioni di contrasto tra pixels adiacenti. La sensazione è una diminuzione della morbidezza dell'immagine a favore di un effetto affilatura dei contorni (sharpening) percepito come "maggior dettaglio".

            I più diffusi sono:[list][*]unsharp mask
            Abilitate il filtro Sharpen con opzione unsharp mask. Un buona partenza: strength 21.
            Il consiglio è quello di non esagerare molto con il valore. Gli artefatti (ringing, rovinamento del frame), ad effetto collaterale del processo, sono dietro l'angolo. Un valore superiore a 40 introdurrà inevitabilmente "sporcature".
            E' il filtro più comune. Il consumo CPU non è elevato.

            [*]asharp
            Abilitate il filtro Sharpen con opzione asharp. Buoni valori di partenza: high quality block filtering, threshold 1.8, strength 3.5, sharpening 0.
            Del tutto simile all'unsharp, come risultato e consumi. Il boost, a parer mio, lo ha processando materiale "animato" (cartoni, cg): molto più incisivo.
            Fate attenzione, i diversi triggers, se non bilanciati correttamente, portano presto al rovinamento dell'immagine.

            Ringrazio Marlenio per la segnalazione.

            [*]Sharpness (DScaler)
            Abilitate il filtro Dscaler e selezionate, dal menu a tendina Filter, la libreria FLT_Sharpness.dll. Un buon valore di partenza è Sharpness 128, Fast Memory Access.
            I consumi si attestano come leggermente superiori agli sharpeners precedentemente illustrati.

            Ringrazio ciuchino per la segnalazione.

            [*]AdaptiveNoise (DScaler)
            Abilitate il filtro Dscaler e selezionate, dal menu a tendina Filter, la libreria FLT_AdaptiveNoise.dll. Buoni valori di partenza sono: Stability 20, Fast Memory Access, Noise Reduction 45, Spatial Smoothing (Enable), Spatial Smoothing (Percent) 140. Il filtro è particolarmente indicato per il trattamento di materiale televisivo.
            I consumi si attestano come leggermente superiori agli sharpeners precedentemente illustrati.

            [*]LimitedSharpenFaster (Avisynth, multithread opzionale)
            Abilitate il filtro Avisynth ed inserite nell'apposita text area l'istruzione:

            Codice:


            LimitedSharpenFaster(ss_x=1.0, ss_y=1.0, Smode=4, strength=40, overshoot=7)
            </pre>
            Piccolo approfondimento
            Questo è il filtro rivelazione, ciò che generalmente spinge a "buttarsi" su Avisynth; i parametri di chiamata sono molti.
            Cominciamo con il premettere che questo script si avvale dell'uso di filtri Avisynth ben conosciuti quali RemoveGrain, LanczosResize e WarpSharp. E' un po' il succo di questi plugins e di nuove ed interessanti intuizioni.

            Il concetto sul quale si basa, e che lo rende tanto speciale, è la capacità di coniugare i punti di forza dei più diffusi sharpeners (UnsharpMask(), Sharpen() e MinMaxSharpen()) "smettendone", però, i rispettivi, principali, effetti collaterari ("edge halos", "jaggyness"). Il tutto fuso in un unico, nuovo, risultato.

            Gli effetti collaterali dei comuni sharpeners si raggiungono molto velocemente impedendo così di spingersi oltre una certa soglia alla ricerca di maggior "nitidezza". Il LimitedSharpen, invece, "taglia" questo brutto modo di fare intervenendo mediante parametri di controllo contenitivi a prevenire gli spiacevoli effetti di "sporcatura". L'iter?
            In ordine: (1) viene applicato un normale sharpener (quale può essere uno dei tre elencati precedentemente), (2) viene confrontato ogni singolo pixel "trattato" (risultante) con gli adiacenti pixels - chiari e scuri - del frame originale, (3) se il risultato è tra questi - in qualità di gradazione intermedia - il pixel risulta "buono" (non oversharpened, "sovraffilato") altrimenti (4) se la gradazione eccede - in inferiorità o superiorità - gli adiacenti (oversharpened, "sovraffilato"), il pixel viene "limitato".

            Questo sharpener risulta quindi superiore a qualsiasi altro "collega".
            In quanto risulta essere un filtro complesso copriremo - a livello di significato - i vari parametri di chiamata:[list][*]ss_x, ss_y: abbreviativo di supersampling (per l'asse orizzontale - x - e quello verticale - y).
            Determina la qualità dell'operazione di sharpening; più alto sarà il valore, minori saranno gli artefatti.
            Incrementatene i valori - ad es. 1.1, 1.2, 1.3 - verificando le possibilità di sostentamento (CPU). Difficilmente sarà necessario spingersi oltre un 2.0, anche (soprattutto) perchè la vostra CPU vi saluterà mooolto prima.
            Mantenendo un valore di 1.0 il processo di supersampling viene scartato.
            I valori - x e y - andrebbero di "pari passo".[*]Smode: sharpener utilizzato.

            1 = UnsharpMask()
            2 = Sharpen()
            3 = MinMaxSharpen()
            4 = MinMaxSharpen() with the magic...

            La miglior qualità la si ottiene con valori 3 o 4 (naturalmente il consumo CPU è proporzionale alla qualità). Sebbene questi due ultimi "metodi" si equivalgano (anche se il 4 dovrebbe consumare leggerissimamente di meno), il consiglio - all'atto della scelta - è quello di usare la seguente regola: se il supersampling è disabilitato (1.0) scegliete Smode=4, altrimenti Smode=3.[*]strength: l'incidenza - come forza - del filtro.

            Valori "utili" in Smode 1: 0-160 (oltre a vostro rischio).
            Valori "utili" in Smode 2: 0-100 (oltre a vostro rischio).
            Valori "utili" in Smode 3/Smode 4: 0-100 (oltre a vostro rischio).[*]overshoot: il famoso limitatore di difetti. Tramite questo parametro decidete quando "tagliare il troppo".
            I valori vanno da 0 (rigido) a 128 (permissivo; a questa livello il LimitedSharpenFaster perde completamente di utilità).[/list]
            Un ringraziamento a capitano per la segnalazione.

            [/list]
            http://www.productionig.com/contents.../motoko_05.jpg

            Comment


            • #7
              Il resizer

              Il resizer aumenta la risoluzione originale del frame (es. PAL 720x576) - moltiplicandone le linee di scansione (upscaling) - e restituendo così un'immagine più compatta, profonda e dettagliata. E' il filtro più amato.

              Questo filtro non ha antagonisti - è unico; ciò che differenzia il risultato, invece, è il metodo di lavoro in fase di upscaling.
              Poichè è possibile eseguire il resize sia lato ffdshow che Avisynth illustrerò i due metodi.
              [list][*]ffdshow

              Le gestione del filtro in ffdshow si divide su più tabs. Oltre alla principale sono presenti le tabs Borders e Settings. Per le nostre particolari necessità vedremo semplicemente la seconda (oltre ovviamente alla principale).



              Abilitate il filtro Resize & aspect. Buoni valori di partenza sono: (Tab Generale) Specify size: 1280 720, Resize if: x < 1280 or y < 720, Aspect ratio: no aspect ratio correction, (Tab Settings) Luma/Chroma (Lock) method: Lanczos, Parameter: 2.00 (solo il primo trigger).



              Più nel dettaglio, alcuni aspetti interessanti (sui quali potete giocare):[list][*]Resize: è l'opzione che controlla il valore di upscaling dell'immagine. Più alto sarà questo valore, maggiore sarà la qualità finale. Principalmente esistono due metodi per definire l'upscaling: uno "fisso" e l'altro "dinamico".



              Il primo - Specify size, come nell'esempio - vi permette di bloccare l'upscaling ad una risoluzione fissa che non verrà "influenzata" dalle dimensioni originali del frame. L'inputazione dei due valori deve essere eseguita secondo un criterio di rapporto (4:3 o 16:9); non a caso.

              Fate attenzione a questa modalità poichè non sono state infrequenti le segnalazioni di bugs - in relazione a qualità immagine, o strani artefatti - a determinate risoluzioni (personalmente ho avuto qualche problema con i 1280x720).



              Il secondo - Multiply by - vi facilita di molto le cose in quanto vi esenta dal dover fare calcoli (di rapporto). Il filtro moltiplicherà le linee di scansione - verticali ed orizzontali - per il fattore qui definito rispetto alla risoluzione originale del frame (es. un 2x - Multiply by 2.000 - su sorgente DVD PAL porterà la risoluzione finale a 1440x1152, su sorgente DVD NTSC a 1440x960). Perciò, quando si parla di resize 1.5x, 2x, 3x, si da ad intendere che il filtro moltiplica la risoluzione sorgente per questi valori. Unico inconveniente di questo metodo è l'incapacità di controllare il consumo CPU in tutte le situazione in quanto esso dipende dalla risoluzione del materiale sorgente (sebbene anche gli altri filtri risultino influenzati nello stesso modo, il Resize produce un consumo più marcato).



              Un buon resize "entry level" lo trovate nell'esempio. Se volete eccellere, la strada da percorrere è quella di aumentare il valore del moltiplicatore o del rapporto fisso. Naturalmente dovrete scendere a compromessi per bilanciare correttamente la catena di filtri, poichè se "spingerete" troppo in questa sezione, a livello CPU, vi rimarrà ben poco per il resto.



              Un resize 2x è un ottimo traguardo.[*]Resize if: utile per limitare - leggi scartare - il processo di resize semmai la sorgente originale possedesse già una risoluzione di tutto rispetto (cosa ormai possibile con l'avvento dell'High Definition). Nel caso dell'esempio, il limitatore è impostato per eseguire upscaling solamente di quel materiale a risoluzione orizzontale inferiore ai 1280px o risoluzione verticale inferiore ai 720px (solitamente questa è la risoluzione "entry level" dell'HD). Processare materiale di dimensioni superiori, soprattutto se applicando un fattore moltiplicativo, porterebbe "all'uccisione immediata" del playback.



              Per eseguire sempre l'operazione di upscaling, al di là della risoluzione originale, selezionate Resize always.[*]Resize Luma/Chroma method: l'algoritmo applicato al processo di resize, l'aspetto più importante. Sebbene esistano diversi algoritmi non esistono "più valide" alternative. Su tutti, infatti, spicca il metodo Lanczos: offre la miglior qualità (meno artefatti) e maggior nitidezza (all'atto pratico è anche uno sharpener). Cosa buona e giusta è importante mantenere il medesimo metodo per entrambe le fasi di Luma e Chroma (come da esempio, se mantenete la funzione di lock, basterà aggiustare solo la "prima riga"; method e trigger Parameter).[*]Resize Parameter: complementare al method utilizzato. Discorso alquanto complesso (se volete farvi una mezza cultura andate qui).

              Tramite questo parametro determinate il numero di lobi da impiegare in fase di upscaling. Teoricamente, a maggior numero corrisponderà maggior nitidezza. Tuttavia, il processo a lobi elavati risulta essere alquanto controproducente poichè introduce, quasi subito, effetti collaterali quali ringing e halos. Ecco il motivo per il quale è sempre consigliato demandare il processo di sharpening ad un filtro separato. La buona norma è mantenere un valore compreso tra 2 e 4 (il consumo CPU varierà sensibilmente all'aumentare del valore); meglio 2 (il più bilanciato per consumo/qualità).[*]Resize Luma/Chroma sharpen: tramite questi due parametri è possibile introdurre un'ulteriore attività collaterale di sharpening. Solitamente si aumenta più - proporzionalmente o totalmente - il valore di luma piuttosto che il chroma; quest'ultimo, infatti, possiede solamente metà della risoluzione - a livello di pixels - che invece contraddistingue il primo. La sensazione di nitidezza è maggiormente percepibile, quindi, in relazione alla fase di luma. All'aumentare di questo/i valore/i il consumo CPU crescerà leggermente.



              Con l'avvento del filtro LSF (LimitedSharpenFaster) di Avisynth questa fase ha perso di scopo poichè la qualità di sharpening da esso data risulterebbe non necessaria ed inferiore alla indiscussa qualità del primo (meno artefatti; si tende a impiegare solamente LSF come sharpener). Nel qual caso non usaste LSF (per motivi di consumo), un luma 0.80 può risultare una buona soluzione.[/list]

              [*]Avisynth
              Abilitate il filtro Avisynth ed inserite nell'apposita text area l'istruzione:[/list]
              http://www.productionig.com/contents.../motoko_05.jpg

              Comment


              • #8
                codice:
                *


                LanczosResize(1280, 720, taps=4)


                Le considerazione da fare per Avisynth sono quelle fatte per ffdshow eccezion fatta per puntualizzazioni e modalità di emulazione dei parametri precedentemente illustrati (anche se minori).

                o Resize: come per ffdshow l'upscaling prevede metodi "fisso" e "dinamico".



                Il primo - come da esempio - prevede la specificazione in pixels. Il primo valore è assegnato all'asse orizzontale, il secondo all'asse verticale.



                Il secondo si ottiene tramite la chiamata di proprietà implicite della clip (frame) disponibili a runtime. Per eseguire, ad es. - dalla discussione ffdshow - un 2x, lo script è il seguente:



                Codice:





                LanczosResize(last.width*2, last.height*2, taps=4)




                Il fattore determinante risulta essere il numero 2 a moltiplicazione delle originali dimensioni del frame - orizzontale (last.width) e verticale (last.height).



                Sebbene il consumo CPU da parte di questo filtro risulti essere superiore alla controparte ffdshow, il risultato finale - in termini di qualità - è esente da bugs o difetti; in parole povere è più affidabile.
                o Resize if: per emulare la seguente funzione - parallela e precedentemente illustrata in ffdshow - dovremmo avvalerci delle proprietà implicite del frame descritte nel punto precedente. Ad es., per impedire un resize di materiale superiore ai 1280x720px lo script sarà il seguente:



                Codice:





                (last.width < 1280 || last.height < 720) ? LanczosResize(1280, 720, taps=4) : last


                o Resize Parameter: a differenza di ffdshow, non è possibile specificare la quantità di lobi da utilizzare per l'operazione di upscaling. Semplicemente vi basti sapere che la chiamata LanczosResize() è assimilabile ad un parameter 3 del corrispettivo filtro ffdshow (infatti il modo più giusto di chiamarla sarebbe Lanczos3Resize()). E' possibile cmq emulare un parameter 4 invocando la seguente funzione:



                Codice:





                Lanczos4Resize(1280, 720)


                o Resize taps: sta per "Interpolation Tap Size". Sono i samples utilizzati per costruire l'equazione di upscaling (sempre discorso complesso; vedi qui). Vi basti sapere che per eseguire un buon upscaling il valore dovrebbe essere sempre 4 (come nell'esempio).



                Nella chiamata Lanczos4Resize() non è possibile specificare manualmente il taps parameter; questi, tuttavia, risulta essere naturalmente implicito con il valore di 4.



                Non ho trovato riscontro di questo "passaggio" nel filtro controparte di ffdshow. Non ho idea, pertanto, se questi risulti implicito (ad es. con un valore di 4) o meno.

                Note finali
                Vi è molta controversia attorno il resizer, circa la sua posizione all'interno della catena di post-processing. Le filosofie spicciole sono 2:

                1. La cosa migliore è pulire, per prima cosa, l'immagine (denoising, sharpening) e successivamente riscalarla in modo tale da impedire l'ingrandimento o l'enfatizzazione di difetti propri del materiale. Si cerca quindi di riscalare una sorgente il più possibile "perfetta".
                2. Applicare filtri di pulizia immagine prima della riscalatura è alquanto inutile se non controproducente. Come precedentemente esposto, lo sharpening interpola un'immagine in modo tale da rendere più marcate le variazioni di contrasto tra pixel adiacenti; all'atto pratico una "morbida" linea curva risulta scalettata se guardata pixel per pixel. Eseguendo l'upscaling dopo tale processo, le scalettature createsi diverrebbero di grandezza proporzionale alla dimensioni originali; l'immagine restituirebbe una sensazione di minor "continuità/morbidezza" globale.

                Il prezzo del "più corretto pensiero" - il secondo - si traduce cmq in un grande "sacrificio" a livello di CPU (vedi il post "i filtri, l'ordine"). C'è da chiedersi se ne vale la pena, se davvero le differenze sono così eclatanti.
                http://www.productionig.com/contents.../motoko_05.jpg

                Comment


                • #9
                  Il multithreading

                  Con l'avvento di CPU sempre più potenti - in termini di MHz - abbiamo conseguentemente visto nascere nuove tecnologie e soluzioni costruttive ad esse abbinate. Su tutte le estensioni a 64bit ed il multithreading (AMD Dual Core e Intel Hyper Threading e Dual Core).

                  Senz'altro vorremmo che queste due tecnologie fossere sfruttate al pieno delle loro possibilità; tuttavia, nella realtà, dobbiamo fare i conti con i "limiti" di sviluppo delle applicazioni che dovrebbero supportarle (è una mia speranza) e invece ancora non lo fanno; nel nostro caso ffdshow. Senza dubbio ne beneficeremmo alquanto, visto i "carichi" in gioco!

                  Parlare di questo sembrerebbe ancora presto ( ). Tuttavia, per Avisynth (guardacaso a supporto di ffdshow con filtri "importanti") - almeno sul lato multithreading - qualcosa da dire c'è.
                  Piccolo approfondimento
                  Il concetto di multithreading, per spiegarlo in poche parole, si basa su di un metodo di lavoro detto parallelo (seriale è l'opposto); svolgere più tasks contemporaneamente piuttosto che singolarmente (accodando i successivi). Per questo motivo tale tecnologia permette un incremento prestazionale ampiamente superiore a quello ottenibile con il semplice incremento di velocità di clock (i famosi MHz).
                  Tramite la funzione MT di Avisynth saremo in grado di trarre "reale" beneficio da questa nuova tecnologia. Infatti, se avete potuto notare, per alcuni dei filtri Avisynth illustrati precedentemente è stata indicata la possibilità di supporto multithreading. Ad implementarlo vi sono due metodi; a volte sarà utile impiegarli contemporaneamente (maggiori prestazioni):[list][*]MT
                  Inserite la funzione MT() racchiudendo la vostra corrente istruzione tra due doppi apici. Es:

                  Codice:


                  MT("hqdn3d(2)")
                  </pre>
                  Potete inoltre utilizzare la medesima istanza per includere più istruzioni, se è il vostro caso, dividendole con un "a capo" (vedete il post "i filtri, l'ordine") in questo modo:

                  Codice:


                  MT("hqdn3d(2)
                  LimitedSharpenFaster(ss_x=1.0, ss_y=1.0, Smode=4, strength=40, overshoot=7)")
                  </pre>
                  Piccolo approfondimento
                  Come applica il multithreading questa funzione? Ebbene, in poche parole, suddivide l'immagine in più parti permettendo di parallelizzare un processo altrimenti seriale. Tutte queste parti, infatti, vengono poi contemporaneamente processate, ed infine ricomposte, a formare nuovamente il frame completo.
                  [*]SetMTMode
                  Inserite sempre questa istruzione come prima all'interno della textarea poichè essa determinerà il principale comportamento delle successive chiamate:

                  Codice:


                  SetMTMode(2, 0)
                  </pre>
                  In questa situazione le istruzioni successive usufruiranno della divisione di carico in base ai threads disponibili - dati dal secondo core, fisico o logico che sia. Nel dettaglio, la prima chiamata richiede due parametri ben distinti, le eventuali successive una:[list][*]Mode: determina la modalità di esecuzione del multithreading. Di seguito i possibili valori:

                  1 = Il metodo più veloce ma funziona con pochi filtri.
                  2 = Funzionante con la maggior parte dei filtri ma usa più memoria.
                  3 = Funzionante con filtri non compatibili con mode 2 anche se risulta più lento.
                  4 = Combinazione di mode 2 e mode 3 con supporto per ancora più filtri ma il doppio più lento ed usa più memoria.
                  5 = Funzionante con la totalità dei filtri di tipo "linear frameserving"; in parole povere il multithreading risulta disabilitato; utile per ripristinare una sorta di "compatibility mode".
                  6 = Versione modificata del metodo 5 ma leggermente più performante.

                  Se doveste notare delle incompatibilità con i filtri utilizzati - in manifestazione di bugs, artefatti o simili - in modalità multithread default, (valore 2) alzate progressivamente il valore (fino a 5 o 6) alla ricerca della "safe working zone".[*]Threads: il numero di threads impiegabili per le operazioni multithreading. E' impostabile solamente con la prima chiamata - in assoluto - del metodo SetMTMode(). Mantenete il parametro sempre a valore 0 poichè, in questo modo, il filtro rileverà automaticamente il numero di "processori" disponibili.[/list]


                  Come detto, potrebbero essere utilizzati dei filtri non troppo "avvezzi" al multithreading, vuoi per mancanza di supporto, vuoi per vera è propria inapplicabilità. Di seguito un esempio di ciò che potrebbe essere la gestione di una configurazione mista:

                  Piccolo approfondimento
                  SetMTMode() comincerà ad essere parte integrante di Avisynth dalla release 2.6. Risulta essere già disponibile in questa, la 2.5.6a, solamente grazie alla sostituzione della libreria avisynth.dll presente nella cartella system32 di Windows.
                  [/list]Note finali
                  Non fidatevi alla lettera degli esempi fatti. Purtroppo, non possedendo personalmente un processore multithreading, non sono in grado di comprovare o "affinare" quanto esposto; a maggior ragione in relazione a quanto sto per dirvi. In fase di premessa ho infatti dichiarato come fosse possibile utilizzare i due metodi - MT() e SetMTMode() - contemporaneamente. Il consiglio è provare tutte le possibili combinazioni: MT() singolarmente, SetMTMode() singolarmente ed infine MT() e SetMTMode() contemporaneamente (non lo dico io, lo dice l'autore). I consumi CPU potrebbero realmente differenziarsi!
                  http://www.productionig.com/contents.../motoko_05.jpg

                  Comment


                  • #10
                    Il deinterlacer

                    Sebbene il deinterlacing abbia ruolo marginale nel concetto di post-processing, a seguito dell'inibizione della DXVA - effetto collaterale, come abbiamo già detto, di questa scelta - i risultati ottenibili dall'accoppiata HW/SW in questo campo e in queste condizioni a volte si riducono al limite del "deplorevole". Fortunatamente - dicendo a volte - non è problema di tutti i giorni: vuoi per il materiale (correttamente "flaggato"), vuoi per buona prestazione del decoder (a monte). Tuttavia, se vi trovaste in questa spiacevole situazione potrete avvalervi di ffdshow, quale - ancora una volta - valido alleato, tramite il filtro di deinterlacing.

                    Tra i vari metodi ne spicca uno in particolare:

                    Abilitate il filtro Deinterlacing e selezionate, dal menu a tendina Method, il metodo 5-tap lowpass.
                    Il consiglio è sempre quello di anteporre, come primo, questo filtro rispetto alla restante catena; dopotutto meglio lavorare su un'immagine correttamente ricostruita, no?
                    Il consumo CPU non è elevato.



                    Sebbene - abbiamo detto - il deinterlacer possa essere un valido alleato, la filosofia, quasi controcorrente, è quella di non interpolare eccessivamente l'immagine. Se il risultato raggiunto senza l'uso di questo filtro è soddisfacente, pari al risultato con, non abilitatelo inutilmente.
                    <!-- / message --><!-- sig -->
                    http://www.productionig.com/contents.../motoko_05.jpg

                    Comment


                    • #11
                      I profili

                      Ad una tale abbondanza di filtri sarebbe certamente gradita una certa flessibilità nel poterli applicare a seconda della situazione, per esempio a seconda del materiale o del player avviato. Anche se non esaustiva, grazie ad una particolare sezione di ffdshow potremo fare anche questo.

                      Tramite la voce Images setting è infatti possibile caricare un'intera, differente, catena ffdshow in maniera sostanzialmente trasparente (in base a criteri definiti). Come? Per fare un'applicazione pratica, prenderemo in esame la mia realtà.

                      Personalmente ho avuto la necessità di configurare ffdshow per tre tipi di applicazione (potrebbero essere anche quattro) diverse: per materiale eseguito - se PAL o NTSC - o per player utilizzato - se TT o ZP. Così, dalla tab Image settings, tramite il pulsante New, oltre al default, ho creato i seguenti nuovi profili: NTSC e Zoom Player. Per ognuno di questi ho poi specificato le condizioni di esecuzione (autoload; ovvero in quale occasione ognuno di questi dovrebbe realmente attivarsi). Tramite il pulsante Preset autoload conditions...:

                      default
                      Mantenendo il profilo a default (grassetto; doppio click su di esso) non è necessario specificare alcuna condizione: semplicemente entrerà in azione nel qual caso le condizioni date dagli altri profili non dovessero essere soddisfatte.

                      NTSC
                      Ciò che contraddistingue il materiale NTSC dal PAL è la risoluzione: 720x480 per l'NTSC e 720x576 per il PAL. Ho così sfruttato questa differenza per caricare il profilo all'occasione. Il motivo che mi ha spinto a voler creare un profilo ffdshow dedicato a questo scopo è presto detto: l'NTSC essendo inferiore di risoluzione e minore in fps - rispetto al collega PAL - mi permette di spremere maggiormente la CPU (consuma meno) incrementando quindi "l'impegno" dei filtri utilizzati.



                      Zoom Player
                      In questo caso la scelta di autoload è ricaduta sull'eseguibile associato al player: zplayer.exe. Il motivo che mi ha spinto a dover creare un profilo ffdshow dedicato a questo scopo è stato - a parità di filtri - il maggior consumo di CPU. Ho così dovuto "limare" la mia configurazione.



                      Ultimo aspetto, per permettere il funzionamento della feature, è stato lo spuntare la voce Automatic preset loading sottostante il pulsante di richiamo delle varie condition (Preset autoload conditions...).

                      La gestione
                      Gestire i profili è molto semplice: presente in ogni filtro, tramite il menu a tendina posto in alto, è possibile richiamare ciascun "banco" creato. Questa selezione ha la funzione di switch. Questo switch ricaricherà, ogni volta, la singola configurazione rispettando l'ordine dei filtri, le istruzioni utilizzate e ogni altra personalizzazione (all'infuori della tab Codecs che ha valenza universale).



                      un grazie a stealth82 from avmagazine.it
                      http://www.productionig.com/contents.../motoko_05.jpg

                      Comment

                      Working...
                      X