Recensubs HQ

CC: Strega del Geass, bevanda o Cross Conversion? Scopriamolo insieme

« Older   Newer »
  Share  
view post Posted on 6/5/2013, 15:01     +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


Ultimamente Chibi sta facendo troppe guide, con quella di ieri ne ha di fatto il doppio delle mie in questa sezione, quindi mi pareva il caso di togliermi un po' di paglia dal culo [cit.] e portarmi alla pari con lui.
Pensando a guide potenzialmente utili su argomenti non troppo noti, come prima cosa mi è venuta in mente la Cross Conversion, visto che negli ultimi tempi ci ho avuto a che fare anche più del dovuto.

Nota iniziale: data la necessità di mantenere le immagini alla loro risoluzione ottimale e in png, sono tutte presentate come thumbnail nella guida.

La Cross Conversion, visivamente, si presenta come una sorta di ibrido tra interlacciamento e aliasing. Anche a occhi inesperti è palese che qualcosa sia fuori posto.
Esempio:
4713ccniua8

Sostanzialmente, viene introdotta quando c'è una necessità di upscalare l'immagine originale, ma, al posto di upscalare in progressivo (vuoi per contenuto interlacciato o comunque per incompetenza/distrazione/malafede di chi ci ha lavorato) l'immagine viene upscalata separatamente per i semicampi.
Questo comporta uno scompenso verticale durante il resize che quindi introduce l'artefatto che potete notare nell'immagine poco più sopra.
Uno potrebbe anche fregarsene e limitarsi a fare debilinear alla risoluzione originale, ma fidatevi che i risultati non sono il massimo della vita...
4713simpleieb4f

Posto quindi che una merda del genere è meglio risolverla, e ammesso che il buontempone che ha upscalato alla canis mentula non abbia avuto la brillante idea di postprocessare l'immagine in qualche maniera dopo l'upscale, e che quindi i semicampi siano ben distinti tra loro, è possibile ripristinare l'aspetto originale dell'immagine.

La prima e più importante cosa da fare è accertarsi della risoluzione originale dell'immagine. Potete tirare a indovinare, tanto tendenzialmente avrete per le mani contenuti upscalati da 720 a 1080, per cui potreste affidarvi a CCC(), che non starò qui ad analizzare, perché questa è una guida che affronta il problema più in completezza e non solo un suo sottoinsieme.
È infatti possibile che la risoluzione originale non fosse 720 e, quindi, oltre a dover capire cosa fosse (480, 486, 540, 576, 810... di possibilità ce ne sono varie), dovete andare a correggerla manualmente, perché ccc() riesce a correggere solo il 720, e può comunque non essere la soluzione perfetta anche in quel caso.

Se avete occhio o intuito, potete semplicemente tirare a indovinare, ma, nei casi più complessi o se proprio non sapete neanche da dove cominciare, la cosa migliore è sfruttare Shrinker.
Questo programmino, scritto da prunedtree, utilizza il codice originale di debilinear e analizza il risultato a varie risoluzioni per cercare di stabilire quale sia la risoluzione originale del fotogramma che gli date in pasto (nota: dovete fornirgli sempre un'immagine in formato BMP, non funziona con altri formati).
In genere, però, non è molto preciso, ma con la cross conversion c'è la grande eccezione, essendo upscalato in base ai field, c'è molto aliasing e, fornendo a shrinker un'immagine di un singolo field anziché dell'immagine intera, riuscirà quindi a dirvi la risoluzione verticale originale con precisione quasi assoluta.

Prendendo quindi in esame l'immagine poco più sopra, in avisynth possiamo fare:
CODICE
separatefields()
selecteven()

E successivamente, da AvsPmod,"Video" -> "Save image as...", scegliendo come formato il BMP. Di seguito vi fornisco una PNG del risultato di ciò:
4713fieldq4awb

A questo punto, ora che abbiamo la nostra BMP del singolo field, ci basta semplicemente trascinarla su shrinker.exe. Si aprirà un cmd di windows. Quando shrinker avrà finito vi comunicherà il risultato che ha ottenuto e vi fornirà anche una bmp di output:
4713shrinker20b4c outputwglqb
L'immagine di output potete bellamente ignorarla, anche perché, essendo shrinker basato su una versione iniziale di debilinear, ci sono ancora molti dei bug che in debilinear sono stati aggiustati solo dopo il port in avisynth, ma comunque vi può dare un'idea se ci ha effettivamente preso o no (se non ci sono scagate di ringing visibili vuol dire che probabilmente ci ha preso).

Come vedete, in questo caso ci dice che la risoluzione del singolo field è 1280x360. Ciò significa che, mettendo assieme i due field una volta ripristinati, otterremo 1280x720.
Ma forse potremmo non ottenere i risultati sperati, vediamo assieme.

Di base, per risolvere la cross conversion, il procedimento è il seguente:

  1. separare i field

  2. downscalarli

  3. rimetterli assieme

Che in codice avisynth si traduce in:
CODICE
separatefields()
even = selecteven().debilinear(1280,360)
odd = selectodd().debilinear(1280,360)
interleave(even,odd)
weave()

Riprendendo ancora una volta lo screen in esame dall'inizio, il risultato, facendo questo, è il seguente:
4713reverse2fy8y
Già meglio del risultato originale fregandosene di tutto, ma gli occhi più esperti avranno notato che c'è comunque un po' di aliasing residuo. Ciò è dovuto al fatto che può capitare (non sempre e non saprei dire con che frequenza) che l'upscale field-based sia fatto dando anche uno shift in verticale separato per i due field.

Per ripristinare l'immagine, quindi, potremmo aver bisogno di applicare uno shift ad entrambi i field, in modo tale che, una volta riportati alla risoluzione originale, combacino alla perfezione.
Purtroppo, però, non c'è un metodo automatico per trovare questi valori e variano anche molto di sorgente in sorgente.
Dovrete quindi andare a tentativi fino a che il risultato non vi soddisfi. Nel caso in esame, è possibile risolvere coi valori che seguono:
CODICE
separatefields()
even = selecteven().debilinear(1280,360,src_top=-0.19,src_height=540-0.19)
odd = selectodd().debilinear(1280,360,src_top=+0.19,src_height=540+0.19)
interleave(even,odd)
weave()

Che danno il seguente risultato:
4713solvedzmufo

Tenete presente che tutti i codici di cui sopra sono ridotti ai minimi termini per questione di chiarezza esemplificativa. Nella pratica, per ottenere i risultati migliori, ci sono altri piccoli fattori di cui tenere conto.
Anzitutto, avendo a che fare con materiale con subsampling, e visto che ciò avviene dopo l'upscale, il chroma avrà subito un blend dopo la cross conversion. Ne consegue che il chroma è sostanzialmente "irreparabile", ma il blend ha già provveduto a nascondere il look aliasato per il chroma (e rimane il fatto che l'occhio umano non è in grado di percepire il chroma sufficientemente a dovere per notare questa differenza). Perciò, nei casi più comuni, avrete bisogno di correggere solo il luma.
Sempre connesso a questo c'è il fatto che restando a 4:2:0, se fate debilinear diretto sul chroma, avrete artefatti vari, che possono essere più o meno evidenti in base alla scena, visto che il dettaglio presente nel chroma è comunque più elevato della risoluzione a cui lo state portando.
Infine, è buona abitudine fare resize a 16bit per massimizzare la qualità e ridurre gli errori di arrotondamento di debilinear.
La differenza è spesso e volentieri minima, ma è bene dire tutto con precisione. Sempre con l'esempio più sopra, un esempio di codice che tiene conto di tutto questo e fa un resize a 4:4:4 sarebbe il seguente:
CODICE
dither_convert_8_to_16()
even = separatefields().selecteven().debilineary(1280,360,src_top=-0.19,src_height=540-0.19,lsb_inout=true)
odd = separatefields().selectodd().debilineary(1280,360,src_top=+0.19,src_height=540+0.19,lsb_inout=true)
ly = interleave(even,odd).weave()
lu = utoy().dither_resize16(1280,720,kernel="spline16",invks=true,invkstaps=6,src_left=0.25,u=1,v=1)
lv = vtoy().dither_resize16(1280,720,kernel="spline16",invks=true,invkstaps=6,src_left=0.25,u=1,v=1)
ytouv(lu,lv,ly)

INB4 fuck you and your 4:4:4. :sigh:

Giusto per completezza porto esempi di metraggi con altre risoluzioni. In particolare, risoluzioni che originariamente non sono mod4 e, pertanto, richiedono di ripristinare field che hanno una risoluzione verticale dispari.

Come primo esempio extra vi porto Pokémon. Non sarei io se non riuscissi a infilare i Pokémon da qualche parte, no? :cool:
pokemonccn7dpc
A occhio si nota che la cross conversion è meno palese che nello screen di Jintai che abbiamo analizzato finora.
Se proviamo a dare a shrinker un singolo field:
0wieyl
Scopriamo che infatti Pokémon è 810.
pokemonshrinkerepelr outputjhi14
Ma visto che i singoli field sono quindi a 405, è necessario processare il luma separatamente dal chroma per poter utilizzare i numeri dispari. Soluzione semplice a 8bit:
CODICE
even = separatefields().selecteven()
even = mergergb(even,even,even,"RGB24").debilinear(1440,405)
odd = separatefields().selectodd()
odd = mergergb(odd,odd,odd,"RGB24").debilinear(1440,405)
luma = interleave(even,odd).weave().showred("yv12")
chroma = spline36resize(1440,810)
mergechroma(luma,chroma)

Notate il mergergb e lo showred. Questo è dovuto al fatto che debilinear (quantomeno per il momento) non supporta y8 o yv24 come colorspace, per cui per poter lavorare con risoluzioni dispari bisogna usare colorspace rgb. Sfruttando mergergb e showred (o showgreen o showblue, è indifferente) si aggira il problema della conversione di colorspace.
pokemonfixxzlbn

Altro esempio, questa volta da Agriculture Girls.
agccwjuay
agfield3rua2
Con questo esempio notiamo che shrinker non è infallibile:
agshrinker5xu49 outputfbi00
Se provate a fare un esperimento con la risoluzione suggerita, vedrete che i risultati sono disastrosi.
Nella realtà dei fatti, possiamo sicuramente notare che la cross conversion qui è parecchio evidente, molto più che da 720, quindi possiamo dedurre che originariamente la risoluzione fosse inferiore a 720. Non ci resta che tentare varie risoluzioni papabili, fino a trovare quella in cui tutto combacia alla perfezione (se la risoluzione è sbagliata il risultato sarà chiaramente sfasato in alcuni punti). Nel caso specifico la risoluzione è 486, quindi 243 per field:
CODICE
even = separatefields().selecteven()
even = mergergb(even,even,even,"RGB24").debilinear(864,243)
odd = separatefields().selectodd()
odd = mergergb(odd,odd,odd,"RGB24").debilinear(864,243)
luma = interleave(even,odd).weave().showred("yv12")
chroma = spline36resize(864,486)
mergechroma(luma,chroma)

agfix1wqy90
Di sicuro combaciano, ma quei bordi sono mostruosi! Dobbiamo lavorare sullo shift...
CODICE
even = separatefields().selecteven()
even = mergergb(even,even,even,"RGB24").debilinear(864,243,src_top=0.25,src_height=540+1)
odd = separatefields().selectodd()
odd = mergergb(odd,odd,odd,"RGB24").debilinear(864,243,src_top=0.25,src_height=540+1)
luma = interleave(even,odd).weave().showred("yv12")
chroma = spline36resize(864,486)
mergechroma(luma,chroma)

agfixfinrdeeh
Molto meglio.

Come avete visto con quest'ultimo esempio, non ci sono regole fisse né certezze quando si ha a che fare con la cross conversion. Shrinker si rivela spesso utile, ma può sbagliare. Ma soprattutto, quando il risultato non vi convince appieno, provate a shiftare un po' a caso fino a che il risultato non vi torna. Purtroppo non è possibile dare consigli più precisi di così, al riguardo.

Beh, spero che la guida sia stata utile. Divertitevi.

EDIT: Aggiustato lo shift di Jintai. :ph34r:

Edited by mirkosp - 8/5/2013, 22:25
 
Web  Top
view post Posted on 6/5/2013, 15:46     +1   -1

Member

Group:
Utente abilitato
Posts:
968
Reputation:
+161
Location:
Trentino Alto Adige

Status:


Ringrazio ogni sforzo volto a diminuire l(a mia) ignoranza. :)

Se posso... noto che si parla molto di BD e materiale con definizione > SD. È possibile avere, non dico una guida, ma almeno un indice o "i 10 comandamenti" da seguire in caso si volesse fare un encode dignitoso partendo da DVD o (eh...) da materiale analogico riversato su DVD (VHS -> MPEG-2 o LDTV)?

In ogni caso, grazie!

Edited by rocksel - 6/5/2013, 17:10
 
Top
view post Posted on 6/5/2013, 15:50     +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


Beh, la cross conversion è dovuta all'upscale, quindi puoi intuire che è un problema che non concerne dvd o sd in generale.
Per il resto magari dopo la guida all'edgefix potrei farne una al vfr nei dvd visto che dovrò sbattermi a fare chocomaho per syao, così ne approfitto. :sigh:
 
Web  Top
view post Posted on 6/5/2013, 16:20     +1   -1

Member

Group:
Utente abilitato
Posts:
968
Reputation:
+161
Location:
Trentino Alto Adige

Status:


CITAZIONE (mirkosp @ 6/5/2013, 16:50) 
Beh, la cross conversion è dovuta all'upscale, quindi puoi intuire che è un problema che non concerne dvd o sd in generale.
Per il resto magari dopo la guida all'edgefix potrei farne una al vfr nei dvd visto che dovrò sbattermi a fare chocomaho per syao, così ne approfitto. :sigh:

E di ciò, ti ringrazio.
Delle guide che tu e Tada scrivete, apprezzo moltissimo quel pizzico di oggettività che mettete negli esempi e che riesce a mettere un po' d'ordine nella marea d'informazione che è sempre reperibile là fuori, in internet. :sbonk:
 
Top
view post Posted on 6/5/2013, 16:57     +1   -1
Avatar

Distruttore di mercati

Group:
Utente abilitato
Posts:
682
Reputation:
+163
Location:
Aiur

Status:


Grazie mille, soprattutto per Shrinker (che non conoscevo) visto che spesso mi trovo in difficoltà per capire la risoluzione originale, anche usando debilinear. Infatti non sarà affidabile al 100% ma sembra dare un buon supporto. Comunque in merito a questo:

CITAZIONE
Questo è dovuto al fatto che debilinear (quantomeno per il momento) non supporta y8 o yv24 come colorspace, per cui per poter lavorare con risoluzioni dispari bisogna usare colorspace rgb.

mi sembra di ricordare che per quell'encode di qualche giorno fa per pokémon b&w avevi proposto due soluzioni, una che passava in y8 l'altra in rgb. Non penso che chi dovesse encodarlo ci stia ancora lavorando (vfr+crossconversion lo hanno scoraggiato :V) ma in caso ci stia ancora lavorando gli dico di usare la versione che gli avevi consigliato che passava per rgb? Grazie ^^
 
Top
view post Posted on 6/5/2013, 17:00     +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


La versione rgb che gli avevo consigliato faceva proprio conversione in rgb32 completa, quella y8 m'ero scordato io che debilinear non lo supportava.
Dovresti cercare di fargli avere il codice che ho messo qui, sostanzialmente, tantopiù che è proprio di pokémon. XD
Aggirare il problema in questo modo m'era sfuggito di mente e me l'ha suggerito torchlight su darkhold come soluzione temporanea finché prunedtree non aggiunge y8 (se mai lo aggiungerà).
 
Web  Top
view post Posted on 6/5/2013, 17:03     +1   -1
Avatar

Distruttore di mercati

Group:
Utente abilitato
Posts:
682
Reputation:
+163
Location:
Aiur

Status:


CITAZIONE (mirkosp @ 6/5/2013, 18:00) 
La versione rgb che gli avevo consigliato faceva proprio conversione in rgb32 completa, quella y8 m'ero scordato io che debilinear non lo supportava.
Dovresti cercare di fargli avere il codice che ho messo qui, sostanzialmente, tantopiù che è proprio di pokémon. XD
Aggirare il problema in questo modo m'era sfuggito di mente e me l'ha suggerito torchlight su darkhold come soluzione temporanea finché prunedtree non aggiunge y8 (se mai lo aggiungerà).

Perfetto, gli faccio sapere subito. Grazie mille!
 
Top
view post Posted on 6/5/2013, 17:17     +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


CITAZIONE (Liquid Dr4k3 @ 6/5/2013, 18:03) 
CITAZIONE (mirkosp @ 6/5/2013, 18:00) 
La versione rgb che gli avevo consigliato faceva proprio conversione in rgb32 completa, quella y8 m'ero scordato io che debilinear non lo supportava.
Dovresti cercare di fargli avere il codice che ho messo qui, sostanzialmente, tantopiù che è proprio di pokémon. XD
Aggirare il problema in questo modo m'era sfuggito di mente e me l'ha suggerito torchlight su darkhold come soluzione temporanea finché prunedtree non aggiunge y8 (se mai lo aggiungerà).

Perfetto, gli faccio sapere subito. Grazie mille!

Tieni presente però che questo è il codice semplificato per un resize a 8bit e downscale diretto. Per quello che dovrebbe fare lui, dovrebbe evitare il downscale del chroma, riupscalare il luma a 1080 e fare merge col chroma originale (e poi resize solo alla fine).
 
Web  Top
view post Posted on 6/5/2013, 17:27     +1   -1
Avatar

Distruttore di mercati

Group:
Utente abilitato
Posts:
682
Reputation:
+163
Location:
Aiur

Status:


CITAZIONE (mirkosp @ 6/5/2013, 18:17) 
CITAZIONE (Liquid Dr4k3 @ 6/5/2013, 18:03) 
Perfetto, gli faccio sapere subito. Grazie mille!

Tieni presente però che questo è il codice semplificato per un resize a 8bit e downscale diretto. Per quello che dovrebbe fare lui, dovrebbe evitare il downscale del chroma, riupscalare il luma a 1080 e fare merge col chroma originale (e poi resize solo alla fine).

Si si, nel codice che gli suggerivi infatti (se non ricordo male) alla fine c'era bilinearresize(1440, 1080) e mergechroma col chroma originale, così fixava la crossconversion solo dove serviva e si riportava a 1440x1080 upscalando con bilinear (come era stato fatto originariamente). L'unica cosa che gli va detta (nel caso in cui ci stia ancora lavorando) e di non considerare la versione con converttoy8.
Per il resize alla fine non saprei... ma visto che è 810 penso che convenga rellare a 1080p facendo dbl 810->nnedi->invks a 1080p
 
Top
view post Posted on 6/5/2013, 17:35     +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


Conta che a differenza di alcuni bd, con i ts di pokémon non ci smeni a fare resize 4:2:0 (non ci sono 'sti gran dettagli chroma, conta che è alla fin fine è un .ts televisivo), per cui anche a fare debilinear e rellare a 810p a 4:2:0 è ok.
Il più è quando la cross conversione è in scene con crediti a 1080... lì sarebbe da fare mask e palle varie (e non so se maskdetail funziona...).
 
Web  Top
view post Posted on 6/5/2013, 17:42     +1   -1
Avatar

Distruttore di mercati

Group:
Utente abilitato
Posts:
682
Reputation:
+163
Location:
Aiur

Status:


CITAZIONE (mirkosp @ 6/5/2013, 18:35) 
Conta che a differenza di alcuni bd, con i ts di pokémon non ci smeni a fare resize 4:2:0 (non ci sono 'sti gran dettagli chroma, conta che è alla fin fine è un .ts televisivo), per cui anche a fare debilinear e rellare a 810p a 4:2:0 è ok.
Il più è quando la cross conversione è in scene con crediti a 1080... lì sarebbe da fare mask e palle varie (e non so se maskdetail funziona...).

Sicuramente la miglior soluzione sarebbe rellare a 810p, ma a sentire tanta gente sembra che se non si rella a 480/720/1080p si crea confusione... quindi per non mangiarsi dettaglio (ed evitare di fare invks ad una risoluzione < di quella originale e quindi creare artefatti vari) avevo pensato a 1080p facendo a quel modo. Ma se (giustamente) se ne frega di dover per forza rellare a 720p/1080p va benissimo anche 810p (tanto come dici te, essendo una ts televisiva non ci sono tutti sti dettagli chroma, poi se non ci vuole perdere nulla c'è sempre il 4:4:4, anche se forse 810p 4:4:4 inizia ad essere un po' pesantuccio da riprodurre)
 
Top
view post Posted on 8/5/2013, 21:25     +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


Aggiustato lo shift di Jintai che in alcune scene mi sono accorto essere leggermente impreciso. :V
 
Web  Top
view post Posted on 28/5/2013, 21:51     +1   -1
Avatar

Apprendista encoder

Group:
Utente abilitato
Posts:
611
Reputation:
+213
Location:
Loli Island

Status:


CITAZIONE (mirkosp @ 6/5/2013, 16:50) 
Beh, la cross conversion è dovuta all'upscale, quindi puoi intuire che è un problema che non concerne dvd o sd in generale.

supbrov1e3g
sp46cp1

Per la serie, suca.

Edited by Mad_Hatter™ - 28/5/2013, 23:10
 
Top
view post Posted on 28/5/2013, 21:52     +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


Sì, serio, me la sono tirata addosso. Non pensavo che i giapponesi fossero così puzzoni da fare un DVD cross convertito da una res sub-SD... li sopravvalutavo (o sottovalutavo?).
 
Web  Top
view post Posted on 15/7/2013, 18:30     +1   -1
Avatar

Apprendista encoder

Group:
Utente abilitato
Posts:
611
Reputation:
+213
Location:
Loli Island

Status:


Riportiamo un fatto interessante:
Quando mirkosp ha fatto questo post sulla crossconversion, essa era una cosa abbastanza rara, prima di jintai, credo che l'ultimo anime crossconvertito fosse seikon no qwaser, serie del 2010.
Tuttavia ora che questo post è stato fatto, moltissimi pv(tra i quali quello uchoten e quello del terzo film di madoka), e ben 3 SERIE questa stagione presentano la crossconversion in uno o più punti. Non è stato l'unico esempio: possiamo portare infatti come esempio anche la cross conversion che si credeva "inesistente" sui DVD, a distanza di poco sp trova un DVD crossconvertito; referencefixer che doveva essere la soluzione a tutti mali, improvvisamente ne troviamo tutti i difetti sul PRIMO show che avevamo davanti sia io che lui.

TL; DR mirkosp porti sfiga, basta XD
 
Top
14 replies since 6/5/2013, 15:01   1199 views
  Share