Bene, eravamo arrivati alla WR, o, in alternativa alla fine dell'IVTC.
Ora è la volta di Problemi dei TS e relative soluzioni.
Prima di tutto dobbiamo settare un attimo il file del progetto.
Cercate "horizon12.d2v.yap" e apritelo con un editor di testo, io consiglio Notepad++.
Andate alla fine del file e prima di error log inserite:
(N.B. copiando e incollando avrete %-s invece di %s, dovete togliere la -)CODICE
[Custom List 0]
"nnedi0start"
"nnedi0=nnedi3(0)"
""
2
0,0
[Custom List 1]
"nnedi1start"
"nnedi1=nnedi3(1)"
""
2
0,0
[Custom List 2]
"nnedi0"
"strange(%s,%e,nnedi0)"
""
2
[Custom List 3]
"nnedi1"
"strange(%s,%e,nnedi1)"
""
2
E scaricatevi anche strange, che trovate
qui.
Salvate e siamo pronti a iniziare.
Testo che scorre meno di 5 minuti per parte, difficoltà media
Prima di iniziare vi serve ivtc_txt60mc.
CODICE
# Version 1.1
Function ivtc_txt60mc (clip src, int frame_ref, bool "srcbob", bool "draft")
{
srcbob = Default (srcbob, false)
draft = Default (draft, false)
field_ref = (srcbob) ? frame_ref : frame_ref * 2
field_ref = field_ref % 5
invpos = (5 - field_ref) % 5
pel = (draft) ? 1 : 2
src
(srcbob) ? last
\ : (draft ) ? Bob ()
\ : QTGMC (SourceMatch=1, Lossless=2, tr0=1, tr1=1, tr2=1)
clean = SelectEvery (5, 1 - invpos)
jitter = SelectEvery (5, 3 - invpos, 4 - invpos)
jsup = jitter.MSuper (pel=pel)
vect_f = jsup.MAnalyse (isb=false, delta=1, overlap=4)
vect_b = jsup.MAnalyse (isb=true, delta=1, overlap=4)
comp = jitter.MFlowInter (jsup, vect_b, vect_f, time=50, thSCD1=400)
fixed = comp.SelectEvery (2, 0)
Interleave (clean, fixed)
Trim (invpos / 2, 0)
}
#The src parameter is a 30 fps interlaced clip. The frame_ref parameter indicates on which frame begins the 3:2 pattern (first frame number of a clean-combed-combed-clean-clean sequence).
#http://doom10.org/index.php?topic=292.msg5499#msg5499
Come al solito mettete il tutto in un file .avsi e buttatelo nella cartella dei plugin di avisynth.
Attenzione che vi servono tutti i plugin per far funzionare QTGMC, fortunatamente li trovate tutti
nel topic.
Prendete l'avs, che più o meno avete avuto modo di vedere nella fine della seconda parte, duplicatelo e date un nome diverso alla copia, io consiglio "horizon12.txt.d2v.avs".
Apritelo e cancellate tutto a parte
CODICE
DGDecode_Mpeg2Source("D:\fansub\horizon12.d2v")
Trim(903,5367)++Trim(7466,23708)++Trim(25509,48104)++Trim(49904,50052)
Ora dobbiamo vedere dove iniziano le zone con testo che scorre e come settare il filtro.
Aprite yatta e cercate la prima zona, vedrete che la è all'incirca compresa tra i frame 5332 e 5930 (1 frame in più non è un problema, uno in meno sì, controllate ma senza farvi troppe seghe mentali), la seconda tra 20947 e 21845.
Cominciamo a lavorare la prima, inseriamo quindi Trim(5332,5930) nello script.
In questo modo, e potete vederlo nella preview di AvsPmod, abbiamo isolato la zone con il testo che scorre.
A questo punto dobbiamo inserire il filtro, ma per farlo dobbiamo settare il parametro "frame_ref", ovvero dobbiamo dire al filtro la posizione del frame c nel primo pattern cnncc.
Fortunatamente YATTA ci indica il tipo di frame esattamente in alto a sinistra.
E siamo pure fortunati, perché il frame 5332 e 20947 sono entrambi il primo frame c del pattern cnncc.
Possiamo quindi inserire ivtc_txt60mc(0) nello script.
Più o meno dovrebbe uscire così, a parte che avrete solo il primo trim, inizialmente.
Aprite virtualdub e salvate la lossless della parte tra 5332 e 5930.
Ci vorrà parecchio, quindi preparatevi altro da fare mentre il pc elabora.
Finito il primo spezzone passiamo al secondo, questa volta inserite Trim(20947,21845) e togliete il trim di prima (o metteteci # davanti come ho fatto io).
Il 20947, come già detto in precedenza, è sempre il primo frame c del pattern cnncc quindi non dovete nemmeno modificare ivtc_txt60mc, salvate lo script, aprite in virtualdub e salvate una seconda lossless.
Fatto questo lasciatele lì che serviranno dopo.
Field Sminchiati anche più di 30 minuti, difficoltà medio/medio-alta
E ora arriviamo a quello che è davvero il motivo per cui usiamo Yatta, ovvero mettere a posto i frame sminchiati dall'MPEG2, in questo caso quelli nei cambi scena.
Prima di farlo però è giusto accennare alla natura del problema, e il problema sono i due frame N nel pattern CNNCC, infatti questi due frame non sono puliti come gli altri C, per intenderci in
questa immagine, sarebbero i frame 3 e 4 della serie più a destra.
Questa cosa fa sì che, nel caso siano nel bel mezzo di un cambio scena, si sminchino quasi sempre, mostrando parti del frame precedente/successivo (dipende se il frame è l'ultimo prima del cambio di scena o il primo dopo), croma scazzato ecc ecc.
Il nostro scopo è cercare tutti questi punti e fare in modo che non si noti il problema.
I meccanismi sono nnedi3(0), nnedi3(1) e FreezeFrame.
Per spiegare che fanno meglio andare più sul pratico, per prima cosa andiamo su tools->Find e settiamo yatta.
20 è un valore un po' a caso, non è detto che per tutti gli anime vada bene.
Scegliete un compromesso tra falsi positivi e mancate inviduazioni.
Per anime con poca azione e frame di alta qualità potete tranquillamente scendere a 15 o anche meno, sopra il 20 rischiate di non beccare alcuni frame rovinati, quindi porrei più o meno qui la soglia.
Clicchiamo su Next e verremo portati al frame 11, che non ha alcun reale problema, a parte che non è conciato benissimo.
Ignoriamolo e clicchiamo sulla freccia in su, siamo arrivati al frame 261, che è conciato di merda.
E se fate attenzione noterete che quello schifo appena sopra all'orecchio sono in realtà i residui dei capelli di Futayo nel frame precedente (noterete anche che è un cambio scena).
Intanto guardiamoci la preview (F5)
Notate anche che il frame successivo è diverso, quindi non possiamo nemmeno riutilizzarlo.
La soluzione è utilizzare nnedi3, che scarta il field sminchiato e lo ricrea a partire da quello preso meglio.
Per usare nnedi3 abbiamo bisogno delle custom list che abbiamo inserito a inizio guida, se non l'avete ancora fatto chiudete la preview e cliccate su z e x, vedrete in alto a sinistra che z e x servono per scegliere la custom list.
Selezionare nnedi1 e premete due volte c. C serve per selezionare il frame iniziale e quello finale di applicazione, in questo caso a noi interessa fare questi lavori su un solo frame, quindi premete sempre c due volte.
Ora in alto dovreste avere
Aprite ora la preview
C'è ancora un banding della madonna ecc ecc, però tutta la merda che c'era prima è sparita.
Freccia in su e andiamo alla prossima.
Frame 331, anche qui un po' di merda, blocking ecc ecc.
Se notate però il frame precedente è uguale, ma preso meglio.
Tornate al 331, cliccate su F, andate sul 330 e cliccate di nuovo F.
Avete freezeframeato il 331, infatti se tornate ora sul 331 vedrete in realtà il 330, che era di qualità superiore.
prima
dopo
Freccia in su e andiamo alla prossima.
332, se notate il frame è N barrate e c'è scritto Decimate.
Questo vuol dire che questo frame verrà decimato, ovvero non si vedrà.
I frame segnate come decimate non vanno toccati, sarebbe tempo perso.
Freccia in su e andiamo oltre.
401, frame brutto, il 400 invece è preso bene. Freezeframe e via.
Freccia in su e alla prossima.
456, frame bruttino, ma non è un cambio scena, non è da riparare né con freeze né con nnedi.
Freccia in su e andiamo oltre.
461 idem con patate, freccia in su e andiamo oltre.
481, questo è il frame prima del cambio di scena, e quello prima non è identico.
Se guardiamo la preview si può notare un bel po' di merda, soprattutto sopra alle piante.
Usando z e c selezionate nnedi0 e premete due volte c.
Aprite la preview
Molto meglio.
E con questo abbiamo coperto i freezeframe, nnedi1 e nnedi0.
Freezeframe lo useremo quando c'è un frame uguale ma preso meglio, nnedi1 generalmente nel frame dopo il cambio scena, nnedi0 generalmente nel frame prima del cambio scena.
Horizon ha un sacco di scene d'azione e di frame presi veramente malissimo, in questi casi nnedi1 o nnedi0 non servono praticamente a niente, anzi, a volte risultano essere controproducenti.
Potete provare, ma se vedete che il frame è un blocking unico e quelli precedenti/successivi non è che siano messi meglio saltatelo e stop, nnedi va bene in scene pulite dove c'è un field sporco da scartare, non in scene prese male dove ogni field è compresso a culo.
Detto questo potete sempre fare prove e vedere come viene in preview, se vedete che non migliora o che peggiora potete andare su tools->custom lists, selezionate la custom list inserita, cliccate con il destro sul frame che avete appena modificato e fate Delete.
Andate avanti per il resto dell'episodio.
Saltate a piè pari le parti con la scritta che scorre, quelle le prenderemo dalle lossless fatte al punto prima, quindi non ha senso che fixiate qui.
Detto questo non andrò a spiegare come fixare quei pezzi, però vi lascerò due righe di indizio, dovete in pratica fixarle qui e poi dovrete unire il frame fixato con la scritta della lossless di ivtc_txt60mc (con mask a mano o stackvertical). Roba avanzata comunque.
Evitate, se potete nnedi nelle sigle dove appare del testo scritto, tende un po' a sminchiarlo.
Dopo 30-45 minuti dovreste aver passato tutto l'episodio e inserito qualche decina di nnedi1, qualche decina di nnedi0 e almeno un centinaio di FreezeFrame.
Salvate e passiamo al punto successivo, mettere tutto insieme.
Riaprite horizon12.d2v.avs con AvsPmod, vedrete quasi 200 righe del vostro effort.
Ora andate dopo TDecimate, dove andremo ad inserire le lossless fatte con ivtc_txt60mc (dato che sono già decimate).
Caricatele entrambe con Avisource e date loro un nome decente.
Io ho optato per
CODICE
ivtctxt1=AVISource("J:\loss\horizon12.txt1.d2v.avi")
ivtctxt2=AVISource("J:\loss\horizon12.txt2.d2v.avi")
A questo punto dovete tagliuzzate il video decimato e inserire le lossless nei punti dove scorre il testo.
Ci serve sapere i frame, torniamo quindi su Yatta.
Questo frame è l'inizio della seconda parte, notate che nella parte sotto c'è scritto che il frame decimato è il 16758 (il frame non decimato lo sapevamo già, è quello usato per il trim mentre preparavamo la lossless, ed è quello che si legge in alto a sinistra).
(potete anche notare tutta la storia del pattern cnncc di cui avevo parlato all'inizio)
Questo vuol dire che fino al 16757 deve arrivare il video, poi inseriamo la nostra lossless, una volta finita rimettiamo il video.
In particolare abbiamo
4266 inizio prima parte, 4744 fine prima parte 16758 inizio seconda 17476 fine seconda parte.
Questo vuol dire che per inserirle nel video dobbiamo fare qualcosa come:
last.Trim(0,4265)++ivtctxt1++last.Trim(4745,16757)++ivtctxt2++last.Trim(17477,0)
Inseriamo quindi questa riga subito dopo il caricamento delle lossless.
Modifichiamo infine il resize reinserendo ResampleHQ.
http://pastebin.com/StE1tBgKQuesto dovrebbe essere all'incirca il risultato finale. (edit: in realtà in 2 o 3 punti ho imbrogliato un po' inserendo un freezeframe quando l'unica parte in movimento era la barriera del cavolo tra Toori e Horizon, non si nota e veniva molto meglio)
Io ho anche inserito Vinverse(), denoise e sharpening (non realmente necessari, ma tanto il 90% dei gruppi lo farebbe comunque, quindi tanto vale inserire 2 robe che sono all'incirca sensate).
Niente debanding perché punto ad encodare a 10bit, ma spiegherò meglio la cosa appena prima dell'encoding.
Salvate, fate una lossless e ci rivediamo nella terza parte.
Mi raccomando, una volta che avete fatto queste modifiche al .avs non salvate più da Yatta, o andrete a sovrascriverlo, con grande giramento di balle.
Appendice BScorrendo tutto il TS vi sarete accorti che ci sono diversi frame o addirittura molte parti che sono messe davvero male.
Lo scopo della guida non è quello di spiegarvi come fa mirko a perdere 3+ ore su un TS, ma per farvi vedere giusto le basi per fare un buon lavoro.
Ovviamente il modo per migliorare senza sbattersi troppo c'è, e voglio lasciare un indizio
CODICE
[Custom List 0]
"nnedi0start"
"nnedi0=nnedi3(0)"
""
2
0,0
[Custom List 1]
"nnedi1start"
"nnedi1=nnedi3(1)"
""
2
0,0
[Custom List 2]
"cleanstart"
"cleaned=Deblock_QED().nlmeanscl(h=1.5,plane=4)"
""
2
0,0
[Custom List 3]
"nnedi0"
"strange(%s,%e,nnedi0)"
""
2
[Custom List 4]
"nnedi1"
"strange(%s,%e,nnedi1)"
""
2
[Custom List 5]
"clean"
"strange(%s,%e,cleaned)"
""
2
O se non vi va nlmeanscl va bene anche Deblock_QED().dfttest(tbsize=3).
Inutile dire che andreste ad applicare la custom list nelle zone da ripulire (in realtà è molto debole e non farà molto, un filtraggio serio richiede decisamente più custom list, così da scegliere la migliore per il frame in questione, ma andiamo già su roba che porta via davvero tanto tempo, e non è questo lo scopo della guida (non per niente questa è un'appendice).
Edited by Tada no Snob - 19/6/2012, 20:39