Recensubs HQ

Votes given by Windark

view post Posted: 9/7/2015, 15:28 by: Liquid Dr4k3     +1DehardSub - Guida galattica per fansubbisti
Tutti stanno in ferie, a lavoro ho pochi scocciatori e c'è il Ramadan, con il risultato che ho parecchio tempo libero. Quindi mi sono detto: "È la moda del momento, e nessuno riesce a farlo dignitosamente! Perché non farci una guida? (Inutilissima visto che 4 stronzi hanno accesso alle .ts)". In realtà lo scopo, come al solito, è quello di dare una linea guida e di valutare con altre persone (sempre i soliti 4 stronzi di cui sopra) come sarebbe possibile migliorare il procedimento.

1) Ne vale la pena?
Sì. Iniziamo col dire che questa "pratica" è stata adottata e pensata per la prima volta da Hell, e non consiste propriamente in un "dehardsub". Fondamentalmente consiste nell'andare a mescolare due diverse clip, nel nostro caso una ricavata dalla .ts e l'altra dallo stream Funi, andando a rimpiazzare le parti di video con i sub Funi, mascherandoli in qualche modo, con la clip ricavata dalla TS. Questo viene fatto in quanto, solitamente, lo stream Funi ha una qualità ed un dettaglio che sarebbero altrimenti impossibili da ottenere con un encode da TS. Per capirci, intendo questo: BS11VsFuni1 BS11VsFuni2. Considerate che è un confronto diretto tra le due source (ho giusto corretto il PC-Range sulla Funi), il primo screenshot evidenzia il vantaggio che si ha per sequenze starvate, mentre il secondo il vantaggio al livello di dettaglio. Onestamente, quando questo fu fatto da Hell la prima volta per Zankyou no Terror la cosa mi convinse poco, in quanto le due clip avevano una leggera differenza al livello di croma e quindi in determinate sequenze la parte mascherata si notava. Ma successivamente, con Owari sempre encodato da Hell e Nagato che mi sono ritrovato a fare io, mi sono convinto ad utilizzarlo in quanto il croma delle due clip è identico.

2) Come farlo?
I due punti chiave che vanno considerati sono:

1) Allineamento (spaziale e temporale) delle 2 clip;
2) Realizzazione della Mask.

Per quanto riguarda il primo punto l'allineamento "spaziale" il più delle volte non risulterà essere un problema, in quanto molto spesso ci ritroveremo con clip allineate da questo punto di vista. Comunque, il caso in cui queste non risultano essere allineate da un punto di vista spaziale verrà preso in considerazione successivamente come eccezione. Mentre invece per quanto riguarda l'allineamento temporale la cosa si può riassumere con una semplice frase: Devi usare YATTA. Non ci sono scorciatoie, tfm.tdecimate scordatevelo e anche JIVTC, in quanto non vi permetterà di gestire determinate eccezioni che vi potreste ritrovare (e prenderò in esame un caso non troppo raro dove queste eccezioni si presentano). Quindi, per prima cosa prenderò in considerazione molto velocemente un IVTC realizzato con YATTA (grazie a quel lazyass di sp che non si spiccia a finire la sua guida) e poi, la cosa che veramente mi interessa, cioè la realizzazione della Mask.

2a) IVTC
Come accennato prima, l'IVTC che dovrà essere fatto sulla TS è un passo determinante, in quanto i pattern delle due clip dovranno essere assolutamente identici. Per quanto riguarda la Funi questa è, ovviamente(?), già progressiva con un pattern che, il più delle volte, equivale al pattern che si otterrebbe effettuando un IVTC perfetto sulla TS. Qua, in realtà, incontriamo già un primo vincolo all'utilizzo del Dehardsub. Infatti se la Funi ha un pattern non perfetto, vedi Overlord, potete scordarvi di allineare le due clip.
A questo punto direi di andare a vedere piuttosto velocemente il tanto temuto, quanto stupido a farsi, IVTC da YATTA. Il processo è già stato illustrato da Tada no Snob qua, ma in questo caso penso sia preferibile fare un IVTC con il metodo Try/Use piuttosto che pattern guidance. Per tutta la parte di Trim/YMC potete tranquillamente prendere in considerazione la guida di Tada, quindi direi di passare direttamente all'IVTC.
Iniziamo con il considerare il solito pattern che vi ritrovate in alto a sinistra:

cLAYfXe

Questo non è altro che il pattern ricavato da YMC in base alle metriche (Telecide+Decimate). Quello che vogliamo fare è forzare un pattern su ogni trim basandoci su quello che viene ricavato da ymc e, soprattutto, basandoci su quello che vediamo. Questo può essere fatto in quanto possiamo ragionevolmente dare per scontato che il pattern all'interno di ogni Trim sia costante. Al massimo, per casi sfortunati come quello preso in considerazione, ci potrà essere un cambio di pattern per una sequenza a caso, ma di certo non ci ritroveremo un pattern variabile che cambia ad ogni cambioscena. Ovviamente do per scontato che per voi il pulldown non ha misteri, e che quindi avete attentamente letto questa. Ok, per ricavare il pattern che ho all'interno di un trim la prima cosa che andrò a fare sarà muovermi all'interno del trim alla ricerca di una sequenza particolarmente animata o, ancora meglio, di un pan. Questo perché per sequenze di questo tipo sarà particolarmente semplice ricavare il pattern in quanto, sia analizzando i frame sia basandoci sui risultati ricavati a YMC, sarà semplicissimo identificare il pattern CCCNN. Prendiamo in considerazione, ad esempio, la seguente situazione:

HvsfxYA

Lo screen l'ho fatto in corrispondenza di un pan, e infatti il pattern riportato in alto a sinistra è esattamente CCCNNCCCNN ecc.. in quanto, per sequenze di questo tipo, YMC sicuramente ci andrà a riportare il pattern corretto. Inoltre possiamo notare come il frame sottolineato cada sempre in corrispondenza della seconda C del pattern CCCNN. Basandoci su questa informazione possiamo tornare al primo frame del Trim, che in questo caso corrisponde con l'inizio del video, cliccare su "Try Pattern" in basso a sinistra (ricordate di fare tasto destro->Set pattern e togliere la spunta da "Don't ask on try pattern") ed inserire il pattern CCNNC:

DYglQhL

Il primo frame del video corrisponderà sempre con quello sottolineato quindi, in questo caso, come "Matches" possiamo mettere direttamente CCNNC. Come "Decimation" andrà inserito kkkdk (K=Keep, D=Drop) in quanto i frame duplicati saranno, come al solito, il secondo frame N ed il primo frame C, ma noi preferiamo decimare il match N in quanto, solitamente, è quello peggiore. Una volta fatto questo basta cliccare Ok e muoversi dall'interfaccia principale verso l'ultimo frame del trim (cercate di ricordare come cadono i trim quando li fate all'inizio). Una volta arrivati alla fine del trim basterà cliccare su "Use Pattern" sempre in basso a sinistra vicino al "Try Pattern". A questo punto avremo il nostro IVTC per il primo trim, e per gli altri Trim basterà ripetere questo procedimento. Considerate che, diversamente dal primo trim, per i prossimi non è detto che il frame sottolineato sia il frame sul quale andate ad iniziare il Try pattern. Quindi, come in precedenza, andiamo a cercare un pan:

7jbh7UJ

In questo caso il frame sottolineato sarà la prima C del pattern CCCNN. Ora riportiamoci all'inizio del trim e facciamo il Try pattern:

LU6loRU

Il frame di partenza del trim è subito prima del frame sottolineato, quindi per far sì che in corrispondenza del frame sottolineato cada il primo frame del pattern CCCNN bisognerà forzare il pattern ncccn, e quindi dkkkk per quanto riguarda la decimazione, in quanto il frame dup con match n sarà proprio il primo. Come prima, riportiamoci alla fine del trim e clicchiamo su Use Pattern. Ripetere la procedure fino alla fine del video. Male che vada il tutto andrà ripetuto per 4 trim (solitamente prologo+opening, prima parte, seconda parte+ending, anticipazioni). A questo punto controlliamo se l'IVTC sull'intera clip è perfetto e non ci sono sequenze interlacciate. Per far questo andiamo su Tools->Find e mettiamo una roba del genere:

zzKxEFE

70 è abbastanza basso in realtà, quindi andrà a beccare tonnellate di frame se ci sono sequenze starvate o cambiscena messi male, ma in questo modo siamo anche sicuri che andrà a beccare eventuali frame interlacciati. Per effettuare la ricerca basterà riportarsi all'inizio della clip e premere la freccia in sù. Vi troverete una tonnellata di roba del genere:

2gy906Y

Che eventualmente potrà essere fixata, se volete, andando a ricorrere alla Custom List con NNEDI o FreezeFrame come illustrato sulla guida di Tada no Snob linkata in precedenza, ma a noi adesso interessa vedere se troviamo roba di questo tipo:

3iNNFgr

Il frame è chiaramente interlacciato. Cosa è successo? Per :reasons: abbiamo un cambio pattern in corrispondenza di quella sequenza. Alcune volte capita anche che il cambio pattern coinvolga più sequenze in fila, ma in questo caso è una singola sequenza. Per riallinearlo bisogna fare in modo di avere una sezione che inizi esattamente con il cambio di pattern e che finisca con questo (potete leggere l'inizio e la fine della sezione corrente sempre in alto a sinistra sotto il pattern). Avendo impostato scxvid da YMC ci ritroveremo già delle sezioni create, la maggior parte delle quali con l'inizio in corrispondenza dei cambiscena, ma se non vi ritrovate una sezione esattamente in corrispondenza della sequenza con pattern cambiato potete gestire il loro inizio e fine con ctrl+q (cancella inizio sezione) e I (crea inizio sezione sul frame corrente). Una volta fatta combaciare la sezione con la sequenza interessata basterà premere ctrl+s (shifta pattern all'interno della sezione corrente) fino a che non ci ritroveremo con il pattern corretto per quella sequenza.
Una volta controllato che non ci siano altri frame interlacciati, e una volta sistemate eventuali sequenze con il pattern cambiato, avremo completato l'IVTC ed avremo il nostro pattern perfetto. Va detto che il 90% delle volte vi ritroverete con pattern costanti all'interno dei trim, e quindi non ci sarà bisogno di effettuare questa ultima parte.
Vale la pena scrivere due righe sul perché va usato questo procedimento, e parlo in generale non per il solo dehardsub. Attualmente le alternative più utilizzate per l'IVTC sono 3: tfm.tdecimate, JIVTC e YATTA. La maggior parte della gente utilizza la prima, che è la soluzione più semplice in quanto completamente automatizzata. Solamente che può presentare diversi problemi, come ad esempio pattern cannato su sequenze particolarmente ostiche, come mouth combing o pan molto lenti, oltre ad una gestione molto limitata del postprocess. La seconda, JIVTC, è parecchio utilizzata nel fansub eng, quasi più della prima. Questo non va a fare altro che quello che abbiamo visto sopra, infatti per ogni trim andrà aggiunto un .JIVTC(n) con n che fondamentalmente è un intero che va a determinare lo shift. Ma, come abbiamo visto, l'unico effort che si ha con YATTA per effettuare l'IVTC è trovare questo shift. D'altra parte però, JIVTC implementa un postprocess per gestire eventuali variazioni di pattern che mi convince decisamente poco, mentre YATTA offre completa libertà da quel punto di vista. Il vero effort con YATTA è tutto l'eventuale filtering a range e fix dei cambiscena, non di certo l'IVTC per il quale ci vogliono 5 minuti a dir tanto... Quindi poche scuse, o usate quello o potete anche lasciar perdere il resto della guida, visto che in fase di allineamento delle due clip potreste ritrovarvi ad avere parecchi problemi (con tfm.tdecimate sicuramente, con JIVTC molto probabilmente).

2b) Realizzazione della Mask
A questo punto dovremmo avere uno script di questo tipo (copia/incolla brutale di quello che ho per l'episodio di Nagato):

Script

dove fondamentalmente c'è index, trim, l'IVTC e una pulita alla TS. Per la parte relativa alle custom list e gestione dello scrolling text riferire, come al solito, alla guida di Tada no Snob.
Perché effortare sulla ts se bisogna usarla solo dove c'è il testo? Semplicemente perché, come vedremo, la maschera non è perfetta e quindi prenderà anche altro oltre al testo, e se in quelle zone la TS è una porcheria si noterà ancora dippiù. Comunque, sapendo come funziona la mask, si può anche capire dove andrà a prendere roba oltre al testo, e quindi si può agire di conseguenza. Prima di andare a vedere come creare la mask dinamica conviene andare a vedere come va utilizzata all'interno della funzione che effettua il merge delle due clip. Per fare il merge delle 2 clip possiamo fondamentalmente utilizzare 2 funzioni: MaskCL o dither_merge16 e dither_merge16_8. Ci sarebbe anche mt_merge(), ma evitatelo assolutamente per via del bug di cui parla mirkosp qua. Il risultato in termini pratici è questo (controllate in alto al centro):

MaskCL Vs mt_merge

vedete come c'è un alone del sub Funi che è stato maskato utilizzando mt_merge? Ecco, quello è dovuto al bug dell'overlay. Se non volete starvi a sbattere troppo usate MaskCL o dither_merge16 i quali, entrambi, hanno il bug fixato. Tra i due preferisco MaskCL in quanto:

1) Lavora anche ad 8 bit e quindi non sono costretto ad andare a fare il masking dopo il dither. Cosa ottima se ho da fare del filtering a 8bit visto che in tal caso mi evita di dover fare 2 dither;
2) Usa le openCL e, testato da avspmod con l'analysis pass, se se ne fa un utilizzo massiccio all'interno dello script dà un discreto vantaggio in termini di fps;
3) sp è un faggot.

unica cosa, ogni tanto avspmod scazza se utilizzate MaskCL, ma basterà chiudere e riaprire per sistemare.
Come funziona 'sto MaskCL/dither_merge16? Molto semplicemente in ingresso avrà 2 clip, la prima Clip1 e la seconda Clip2, e una clip "maschera" (Mask). Questa non sarà altro che una sequenza di frame con valori di Luma corrispondenti al nero o al bianco. Nero->Clip1, Bianco->Clip2, quindi il merge delle 2 clip avviene molto semplicemente in questo modo. Tutto sta nel creare questa clip Mask in accordo con quello che si vuole fare. In realtà la sto facendo molto semplice, infatti non funzionerà esattamente così in quanto se, ad esempio, avessimo un frame della maschera completamente grigio (luma=128) in uscita avremmo un blend delle due clip in ingresso. Ma, per quello che ci interessa qua, possiamo anche considerare solamente valori di Nero e Bianco.
A questo punto si arriva alla parte che realmente mi interessa, e cioè la realizzazione della Mask. Il concetto sul quale andiamo a creare attualmente la maschera è molto semplice: Sfruttare il fatto che i Sub Funi hanno sempre lo stesso valore di luma, e che questo è molto vicino al limite del TV-Range o anche oltre. L'andare a mascherare con questa idea ci dà due vantaggi: Il primo è che, se ci teniamo particolarmente larghi sulla mask, siamo ragionevolmente sicuri che la parte con i Sub della clip Funi venga presa. Il secondo vantaggio è dato dal fatto che se sul frame ho altre zone con quel valore di luma, quasi sicuramente in corrispondenza di queste non avrò dettagli che vanno preservati e quindi mi interessa poco se le vado a prendere da TS o da Funi. Andiamo a vedere l'.avsi che utilizzo in questi casi:

CODICE
function DehardMask(clip clp, int "RGmode", int "expandN", int "inflateN", bool "blur_more", int "LumaTHR", int "BinarizeTHR")
{
Lthr = default( LumaTHR,  233 )
Bthr = default( BinarizeTHR,  1 )
RGmode = default( RGmode,  3)  # spatial filter to remove false positive (noise, compression artifact and so on) , this is its mode
expandN = default( expandN,  7 ) # how many mt_expand
inflateN = default( inflateN,  7 ) #how many mt_inflate
blur_more = default( blur_more,  false ) #additional blur after resize

Luma=clp.mt_binarize(Lthr,upper=false).Removegrain(RGmode,-1).mt_expand().mt_inflate()
Edge=clp.mt_lut("x 2 /").mt_edge("hprewitt",200,250).Removegrain(RGmode,-1).mt_expand().mt_inflate()

Mask=mt_logic(Luma,Edge,"min").Histogram("luma").mt_lut("x 128 - 0 > x 1 - 128 > x 1 - 128 ? x 1 + 128 < x 1 + 128 ? ?",u=1,v=1)

expanded = Mask.expandMask(expandN)
inflated = expanded.inflateMask(inflateN)
final = blur_more ? inflated.Removegrain(12,-1) : inflated
return final.Greyscale().mt_binarize(threshold=Bthr,upper=false)
}

function expandMask(clip clp, int "expandN")
{
return expandN > 0 ? expandMask(clp.mt_expand(u=1,v=1), expandN - 1) : clp
}

function inflateMask(clip clp, int "inflateN")
{
return inflateN > 0 ? inflateMask(clp.mt_inflate(u=1,v=1), inflateN - 1) : clp
}

come detto sopra, la mask viene creata andando a prendere i valori di luma molto vicini al PC-Range o oltre. Da quanto ho visto 233 is the magic number nel caso in cui si parla di uno stream funi. Oltre a questo c'è tutta la parte di filtering che sostanzialmente è quella implementata da Tada no Snob per il suo MaskDetail, con la variante del lut per il quale ho utilizzato quello proposto (sempre da Tada no Snob) per il ResFinder. Inoltre sull'output ho inserito un mt_binarize con valore di default della soglia pari ad 1. In questo modo ogni valore di luma presente sulla mask finale che sia diverso da zero verrà portato al valore massimo (255). Questo mt_binarize, assieme ai 7 cicli di default di expand ed inflate, vanno a "gonfiare" parecchio la mask ma, come dicevo prima, non è un grosso problema e ci fa essere sicuri di prendere i Sub Funi. Su sistemi datati 7 cicli di expand e inflate potrebbero dare problemi di out of memory (grazie alla ricorsione), in tal caso diminuiteli un po', ma consiglio di non scendere sotto i 5. Il risultato sarà questo:

Video/Mask

Una volta visto il funzionamento del merge e come la mask viene realizzata direi di ritornare ad un qualcosa di più operativo. Una volta finito l'IVTC della TS bisognerà andare ad allineare al frame le due clip. Per far questo solitamente vado ad importare il video Funi come di seguito:

CODICE
segue http://pastebin.com/vZrK07h1

VideoTS=Last

#Funi
LWLibavVideoSource("Nagato Yuki-chan no Shoushitsu 13 - Funi.mkv").Trim(651,0)

#Allineamento

#Funi PC-Range
SmoothLevels(preset="pc2tv")

#VideoTS
Last

per prima cosa si va ad importare la Funi e gli si vanno a trimmare i primi 651 frame per levarci dai piedi il solito spot funimation che c'è all'inizio dei loro streaming. Fatto questo c'è uno smoothlevels che va a fare una conversione dei livelli da PC-Range a Tv-Range, in quanto gli streaming Funi sono sempre in PC-Range per :reasons: come al solito. Dopodiché mi metto un VideoTS seguito da un Last, in questo modo se tengo il commento su VideoTS visualizzo la Funi, se lo tolgo il VideoTS. Chiaramente questo serve per fare un confronto "temporale" tra le due clip ed allinearle, quindi adesso ci si dovrà spostare all'inizio di ogni trim ed andare ad allineare le due clip alla perfezione confrontandole e piazzando dei DeleteFrame() o DuplicateFrame() ad-hoc subito dopo #Allineamento. Alla fine le due clip dovranno essere perfettamente allineate in ogni trim ed il numero complessivo dei frame dovrà essere identico.
Arrivati a questo punto abbiamo le due clip perfettamente allineate e abbiamo la nostra Mask creata appositamente per filtrare i Sub Funi, quindi possiamo andare a fare il merge:

CODICE
segue http://pastebin.com/vZrK07h1

VideoTS=Last

#Funi
LWLibavVideoSource("Nagato Yuki-chan no Shoushitsu 13 - Funi.mkv").Trim(651,0)

#Allineamento
DuplicateFrame(4722)
DeleteFrame(4724)
DeleteFrame(12563)
DuplicateFrame(34641)
DuplicateFrame(34642)
DeleteFrame(34644)
DeleteFrame(34763)

#Funi PC-Range
SmoothLevels(preset="pc2tv")
Funi=Last

#GlobalMask
Mask=DehardMask(LumaTHR=233,BinarizeTHR=1,inflateN=7,expandN=7)
MaskCL(Funi,VideoTS,Mask,V=3,U=3,luma=true)

I valori utlizzati nel DehardMask sono quelli di default, mentre per il MaskCL abbiamo V=3, U=3 con i quali andiamo fondamentalmente a dire che anche il croma deve essere processato, mentre invece con Luma=True gli andiamo a dire che il luma della Mask deve essere utilizzato per processare tutti e 3 i piani delle clip utilizzate nel merge. Fatto questo otterremo la tanto bramata clip Funi senza Sub, ma la vita non è mai bella e quindi ci saranno delle eccezioni che vanno gestite e considerate.

3) Gestione delle eccezioni
Quelle che riporto di seguito sono le eccezioni che mi sono ritrovato a dover gestire, ma chiaramente ce ne possono essere tante altre che non mi sono capitate...

3a) Logo
Questa neanche andrebbe considerata come un'eccezione, in quanto ce lo ritroveremo sempre tra i piedi. Comunque, come detto in precedenza, la Mask non è perfetta, quindi potrebbe capitare che parti mascherate vadano a cadere proprio dove c'è il logo facendolo rispuntare. È vero che per come è fatto il logo, e per come funziona la mask, questo non dovrebbe comunque essere visibile quando viene pescato dalla TS, ma è anche vero che stando larghi sulla Mask potrebbe capitare che diventi visibile. Per evitare questo si può brutalmente andare a forzare in corrispondenza del logo l'utilizzo del video Funi in questo modo:

CODICE
MaskCL(Funi,MaskCL(Funi,VideoTS,Mask,V=3,U=3,luma=true),imagesource("MaskLogo.png").converttoyv12().mt_binarize(),V=3,U=3,luma=true)

dove mask logo non è altro che questa, fatta a mano in 10 secondi con Paint.NET. Se non volete fare così potete sempre usare Quadratura, come preferite. Vista la posizione del logo è ragionevole dare per assunto che non ci vada a cadere sopra qualche SUB, in quanto ho visto che utilizzano un margine che vi può far stare sicuri.

3b) La mamma mi dice sempre che BS11 è la scelta migliore!
La mamma ha ragione, togliendo casi particolari BS11 è quella che ci garantisce un buon dettaglio e un ghosting quasi inesistente. I cambiscena solitamente sono devastati, ma questo non è un problema... giusto? Comunque, diciamo che se tra le varie alternative di TS che avete a disposizione c'è la BS11, vi conviene optare per quella. Qual è il problema che si presenta con questa? Molto semplicemente, il maledettissimo logo Anime+ che compare ad inizio episodio, dopo la opening e dopo l'intermezzo. Chiaramente sull'encode finale vorremmo togliercelo dai piedi anche perché, essendo overlayato a 30i, è una doppia scocciatura. Anche in questo caso, come visto per il logo, per star sicuri che questo non compaia a caso nel nostro encode, conviene forzare a mano il video Funi in corrispondenza di questo. Il problema ora è che il fantastico type \an8 della funimation potrebbe andare a sovrapporsi con la mask fatta a mano, quindi in corrispondenza di un'area del frame ci potremmo ritrovare su una clip i Sub, e sull'altra il maledettissimo logo. In questo caso potete decidere se arrendervi e forzare il VideoTS su quell'area e tenervi il logo (sul quale dovrete usare ivtc_txt60mc()), oppure rimediare un'altra TS/Raw a muzzo su nyaa fatta da un'altra TS, mascherare solo la parte dove c'è l'overlay sub/logo e sostituirla con quella propriamente allineata. Se optate per la seconda durante il procedimento vi si andrà a materializzare un monocolo sull'occhio ed un cilindro sul capo. Infine, come suggerito da mirkosp, ci sarebbe anche una terza opzione... e cioè salvarsi il frame e andare a ridisegnare con photoshop la parte interessata. Ovviamente la cosa è fattibile solamente se vi ritrovare l'overlay su una parte di video statica o, al massimo, su di un pan. Se, oltretutto, ci fossero delle animazioni la cosa diventerebbe veramente ardua... Se optate per quest'ultima opzione, oltre che al monocolo ed il cilindro, vi si materializzeranno anche pipa e bastone.

3c) Scrolling Text
Anche per lo scrolling text molto spesso ci ritroveremo sequenze con parti di frame nelle quali abbiamo sulla TS la scritta che scorre, e sulla Funi i sub. In questo caso direi che si può ragionevolmente andare a forzare il VideoTS in corrispondenza della parte di frame dove abbiamo lo scrolling text. In casi particolarmente fortunati possiamo liberarcene forzando la Funi su quelle sequenze, ma questo sarà possibile solamente se durante tali sequenze stanno tutti zitti, oppure, se non ci sono animazioni in corrispondenza dello scrolling text, si potrebbero andare ad incastrare un po' di mask/FreezeFrame per levarcela dai piedi. Ma il più delle volte bisognerà tenercele.

3d) TS 1440x1080
L'esempio che ho riportato utilizza una TS BS11, che ha una risoluzione uguale a quella della Funi utilizzata (1080p). Chiaramente quando si va a fare il merge le 3 clip in ingresso (clip1, clip2 e mask) dovranno essere della stessa risoluzione. Quindi, se abbiamo una TS con una risoluzione diversa da 1920x1080 (verosimilmente 1440x1080), bisognerà decidere se:

1) Upscalare la TS a 1920x1080 prima del merge;
2) Downscalare separatamente le 2 clip per poi andare a fare il merge.

Come al solito ci saranno dei pro e dei contro. Se upscalo il contro sarà... che upscalo, mentre il pro sarà che posso fare il filtering a 8bit dopo il merge sulla clip a 1080p, e trovo che roba come il denoise temporale che di solito faccio ad 8 bit sia più efficace su una clip a 1080p piuttosto che 720p. Oltre a questo potrò fare il resize a 16 bit sulle due clip già unite. Mentre invece se si opta per la 2) come vantaggio si avrà che si evita di upscalare la TS, ma come svantaggio si avrà che il filtering ad 8 bit sull'intera clip può essere fatto solo se facciamo dither 2 volte (il resize comunque andrà fatto a 16bit). Inoltre non potremo fare un resize unico sulla clip dopo il merge, ma dovremo farlo separatamente per le due clip. Quest'ultimo può essere visto come un vantaggio o uno svantaggio, per me è uno svantaggio in quanto preferisco filtrare e resizzare la clip dopo il merge, per rendere il più possibile indistinguibili le clip che siamo andati a fondere. Ma d'altra parte può essere considerato un vantaggio in quanto permette di usare due resize diversi per le due clip, quindi potremo andare ad usare per ognuna il più azzeccato. Questo, in uno scenario normale, sicuramente è un vantaggio... ma se si considera che queste due clip verranno fuse penso sia meglio usare lo stesso resize per entrambe, in modo da evitare che ci siano differenze troppo visibili tra le due. tl;dr fate quello che preferite, io preferisco la 1) ma anche la 2) potrebbe avere i suoi vantaggi.

3e) CROP
Come accennato in precedenza, ci potremmo ritrovare con due clip che non sono allineate da un punto di vista spaziale. Questo caso, segnalato da Hell, si verifica quando il video Funi viene croppato, e quindi non combacia più perfettamente con il video TS. Se le due clip hanno la stessa risoluzione, come ad esempio se si usa BS11, basterà confrontarle e ricavare il crop applicato sulla Funi. Altrimenti, se hanno risoluzioni diverse, dovrete andarvelo a ricavare magari upscalando la TS alla stessa risoluzione della Funi. Una volta fatto questo potete decidere per due diverse opzioni:

1) Applicare alla TS lo stesso crop che è stato utilizzato sulla Funi;
2) Andare a riaggiungere i pixel che sono stati croppati alla Funi prendendoli dalla TS. Questo può essere fatto abbastanza semplicemente con una sequenza di crop e stack orizzontali/verticali.

sta a voi decidere quale vi sembra l'opzione migliore. Comunque, considerando che in ogni caso le due clip dovranno essere perfettamente allineate da un punto di vista temporale, l'andare a riaggiungere i pixel croppati in precedenza alla Funi non richiede troppo effort aggiuntivo, quindi probabilmente è anche la scelta migliore.

Alla luce di tutte queste possibili eccezioni, riporto un esempio di script (solito copia/incolla brutale) dove si tiene conto di quanto detto:

Script

diciamo che come output di questo script avremo la RAW, quindi da quel punto in poi si andrà a resizzare, filtrare e tutto quello che ritenete più opportuno. Ovviamente non mi interessa discutere di questo qui.

4) Possibilità di miglioramento
La cosa che sicuramente ha più margine di miglioramento è proprio la mask, in quanto adesso ha un funzionamento piuttosto banale (anche se estremamente efficace). Sicuramente può essere migliorata in modo da limitare il più possibile la parte di video che viene mascherata oltre ai Sub Funi. Ho provato anche a tirar fuori qualcosa con un approccio basato su mt_edge, che grossomodo è quello che veniva fatto su uno script di (iirc) Torchlight che mi è capitato giorni addietro. Con un approccio di quel tipo i sub vengono pescati basandosi sulla discontinuità che si va a creare tra i sub stessi ed il video. È sicuramente efficace come approccio, ma ho notato che per sequenze starvate o comunque parecchio movimentate può andare a perdersi qualcosa, quindi sicuramente è un approccio meno safe di quello utilizzato con un masking basato sui livelli del Luma.
Altrimenti, sempre per limitare il più possibile la mask ai soli Sub Funi, avevo pensato che sarebbe possibile andare ad usare un Quadratura a range delimitando la sola area dove compaiono i Sub. Dico a range in quanto spesso ci si ritrova qualcosa in \an8, quindi in quei casi bisognerebbe fare comunque attenzione.

La chiudo qua, se trovate typo o roba simile non fate i faggot, non l'ho neanche riletta. Se invece trovate qualche cagata/modifica/miglioramento che può essere implementato non siate timidi... l'ho fatto fondamentalmente per questo.

Edited by Liquid Dr4k3 - 1/8/2017, 17:27
view post Posted: 28/10/2014, 17:06 by: terst     +1OPF + TAFF: Nuova recensub? - Il salotto del fansub
CITAZIONE (FranceBB @ 26/10/2014, 16:23) 
Beh, dato che comunque tutti si devono presentare, lo faccio pure io.
Sicuramente (quanta superbia in una sola parola xD) molti di voi mi conosceranno già, sono FranceBB, Direttore del Team Fansub di OPF-Italia.
La mia avventura nel mondo del fansub è iniziata nel 2008 (since a been while, eh?)

Since a been while? Da un stato mentre? Questo qua spara parole in inglese completamente a caso, credendo di fare il figo, e si spaccia pure per traduttore? Siete messi male, ma proprio male.
view post Posted: 24/10/2013, 20:50 by: Liquid Dr4k3     +1[BKT] Tokyo Ravens 02 - Recensubs
Usare \t con \fs mi sembra una pessima idea
view post Posted: 16/10/2013, 11:05 by: Movr     +1Il topic degli screen compromettenti - Fun & Fail
CITAZIONE (Doc Weissman @ 16/10/2013, 10:53) 
:xd: Non sono riuscito a non vedere un'altra interpretazione

se l'anime si intitola Strike the Blood ci sarà un motivo
view post Posted: 9/4/2013, 17:15 by: Sir Lancelot     -1Comparasub Shingeki no Kyojin ep.01 - Recensubs
Il punto è che non è manco fuori contesto.
Anche la frase di per se, è corretta.
Per cui, fail.
view post Posted: 19/3/2013, 11:20 by: mirkosp     +1Death Note - Tutto il resto...
Io spero esca in due box, così mi catto solo la metà di L, anche perché il resto non esiste. :sisi:
view post Posted: 25/9/2012, 16:29 by: Orto33     +1[OPF] Rorisu pigna adventure ep 276 - Recensubs
Watching Naruto... IN 3D!!!



Edited by Orto33 - 25/9/2012, 21:08
view post Posted: 21/9/2012, 22:15 by: Xeim     +1[OPF] Rorisu pigna adventure ep 276 - Recensubs

mi ero dimenticato... ma cos'è sto "Eiedesh" che si vede in alto? Oo cioè, ridicolo XD
view post Posted: 21/9/2012, 18:56 by: Mad_Hatter™     +1[OPF] Rorisu pigna adventure ep 276 - Recensubs
Mia prima recensub, in realtà sono un tipo molto scazzato, ma un capolavoro di arte fansubbistica tale andava imho condiviso, e quindi eccola qua:

Per chi non conoscesse Naruto c'è da dire che è una serie che doveva essere una vaccata sul ramen ed è diventata una vaccata ancor più grande sui ninja probabilmente il miglior shonen di tutti i tempi subito seguito da Candeggina. Purtroppo merdaset anni fa ha licenziato naruto, ma il suo adattamento della serie non rende affatto giustizia a quelli che sono i temi profondi affrontati dall'anime. Così, interessato dalla versione in 3D degli opf(gruppo noto per release di qualità che varia dall'ottima a GOD TIER), ho deciso di scaricarla, e, strabiliato dalla notevole fattura dei subbi, mi permetto dunque di scrivere due righe in merito.

NB: Essendo gli screen in 3D, ovviamente va vista su un monitor 3D, altrimenti non apprezzerete appieno la qualità della release, per quanto mi riguarda sto usufruendo del mio 3DS

TRADUZIONE & ADATTAMENTO
Come volevasi dimostrare da veri professionisti, più di un traduttore si è cimentato nella traduzione, ovvero FranceBB, Daviex, Pana, Zac. Ma adesso basta con i nomi, veniamo a un po' di screen(non ne farò tanti perché sono scazzato, quando mi stanco peace)

Fin dai primissimi secondi si capisce la qualità dell'adattamento degli opf. Bravi!

Oh finalmente! Se una cosa viene detta in giappo VA LASCIATA IN GIAPPO!!1!11!11!1!


CHECK
Nei due minuti circa che ho visionato ho incontrato una dozzina di errori circa, ma vabbè si sa, qualche errore può scappare! Del resto non sono pagati :troll:
Non faccio screen per il motivo spiegato in basso

Typeset/Styling/Timing/Karaoke
Non ho parole per esprimere tanta bellezza:

Encoding
Gli screen sopra sono in png, dovrebbero dare un'idea, però scavando ancor di più possiamo notare:
Nome completo : C:\Users\Maddo\Downloads\[OPF-Italia] Naruto Shippuden ep 276 HD 3D (Sub Ita) v2.mp4
Formato : AVI
Formato/Informazioni : Audio Video Interleave
Profilo formato : OpenDML
Dimensione : 2,62 GiB
Durata : 23min
Bitrate totale : 16,2 Mbps
Compressore : VirtualDub build 32923/release

Video
ID : 0
Formato : Indeo 4
ID codec : IV50
ID codec/Informazioni : Intel Indeo Video 5.0 Wavelet
Durata : 23min
Bitrate : 16,0 Mbps
Larghezza : 1.280 pixel
Altezza : 720 pixel
Rapporto aspetto visualizzazione : 16:9
Frame rate : 23,976 fps
Bit/(pixel*frame) : 0.723
Dimensione della traccia : 2,58 GiB (99%)

Audio
ID : 1
Formato : AC-3
Formato/Informazioni : Audio Coding 3
Estensione modo : CM (complete main)
Impostazioni formato, Endianness : Big
ID codec : 2000
Durata : 23min
Modalità bitrate : Costante
Bitrate : 192 Kbps
Canali : 2 canali
Posizione canali : Front: L R
Sampling rate : 44,1 KHz
Profondità bit : 16 bit
Modo compressione : Con perdita
Dimensione della traccia : 31,8 Mb (1%)
Allineamento : Audio splittato
Durata intervallo : 42 ms (1,00 frame)
Intervallo pre caricamento : 500 ms


Mi scuso per i pochissimi screen, ma per problemi sicuramente dovuti al mio pc, il video risulta inseekabile e non ho potuto farne molti, spero comunque siano sufficienti a far capire quale sia il pregio di tale fansub.
Quanto al voto,nonostante non mi senta in grado di darne uno data la mia poca esperienza, per me non c'è che un solo voto possibile:
x->-∞
view post Posted: 17/8/2012, 14:45 by: [Akuma] Roxas93     +1[All-Game Forum] Gintama - Episodi da 62 a 115 - Recensubs
Ok, già esiste questa recensubba, ma dovevo condividere per forza tale bellezza con tutto il mondo, un po' come fa taddy con gli oav merdosi.

Siccome sono un masochista, ho deciso di vedere TUTTO Gintama dagli AllGame. Inizialmente volevo vedere solo come se la cavavano per poi andare di sub eng, poi alcune traduzioni erano talmente geniali che mi hanno ribaltato dalla sedia più dell'anime in sé.
Insomma, sub comici per un anime comico, cosa chiedere di più?

Parto col dire che avevo fatto circa 15 screen per ogni episodio per un totale di circa 800 screen... stringendo il campo sono arrivato a 49 screen, che posterò di seguito (imageshack ringrazia).


Traduzione e adattamento: 2

Molte frasi sono tradotte da google translate ("oh, man" diventa "oh, uomo", giusto per fare un esempio), altre sono totalmente inventate
Per quanto riguarda l'adattamento, non ricordo che le prime due stagioni di Dynit contenessero un linguaggio particolarmente colorito e non credo nemmeno che la versione originale giapponese lo contenesse. Un semplice "che succede?" diventa un "che cazzo succede?", bambine di 5-6 anni che usano termini come "cazzo" o "palle", un "Hey you!" diventa "Hey stronzo!", cioè...

Ok, partiamo con gli screen.

gintama076inmomenticome
Adattamento a cazzo...

gintama091sevuoiperdere
Senza senso...

gintama094quandoviaggii
Ma sì, non traduciamolo "yeah", è un termine italianissimo

gintama097leleggendedel
Si preoccupano di inserire la nota ma non si preoccupano di curare il sub... mah

gintama101leregolesonof
Calciatori Panini in giappone
(per i mentecatti che non hanno capito: le figure non sono le figurine ma le classiche action figure)

gintama102agliotakupiac
Shinpachi era un fan delle Idol giapponesi, adesso ha la passione per gli idoli aztechi. Facciamo finta di non vedere quell'"esisto".

amoresfociaspessoinmort
Ok, resistiamo a questo schifo...

gintama109lavitatuttaun
I see -> vedo. :clapclap:

gintama110tutteleperson
In ricordo delle recensubbe di HOTD :sigh:

gintama111nonlasciarema
Io avrei aggiunto anche qualche bestemmia, già che c'ero

gintama113pulireibagnic
I vostri tempi verbali sono una cagata

gintama114nonostantesid
E vuoi che lo capiamo noi?

gintama80subitaallgamef
A parlare sono due ragazzine di 5 anni... il che è tutto dire.


Check: 0

gintama094quandoviaggii
gintama094quandoviaggii
gintama095seseiunuomose
Sub ita o sub eng?

gintama097leleggendedel
Se a te stabbene, stabbene pure permme

gintama097leleggendedel
Ok è un semplice typo ma è divertente xD

gintama098puoigiocareai
Pure io se lo avrei saputo avessi stato evitato

gintama100anchegliogget
La virgola va sempre a capo. Mi raccomando.

gintama100anchegliogget
Corbezzolo!

gintama100anchegliogget
FU STATO PUBBLICATO

gintama101leregolesonof
Ausiliari mode: random

gintama107ibambininonsa
Virgola inutile e maiuscola ancora più inutile

gintama110tutteleperson
Anche io lo vorrei aver presuto!

gintama114nonostantesid
Lo stretto della manica direttamente nei sub!

gintama114nonostantesid
Ma che minchia significa?

gintama115lapausaestiva
Qualcuno ha dimenticato che le note non sono le pagine di wikipedia

gintama115lapausaestiva
Coerenza, questa sconosciuta...

Typesetting: -3

Io capisco che in ogni episodio ci siano più di 20 cartelli ma cazzarola, mettere una nota e amen... non questi aborti

gintama087quandotichied
gintama088gliappuntamen
gintama088gliappuntamen
gintama115lapausaestiva
gintama092essereunapers
In quest'ultimo screen c'è da notare la bellezza di mettere le parole al contrario...

gintama107ibambininonsa
Logo e credits

gintama108alcunecoseson
I karaoke sono molto semplici e non sarebbe un problema, se non fosse per il fatto che sono tutti timmati in modo da ritardare di circa 1 secondo.

Timing: 2
Beh, il timing è ovviamente rifatto da zero quindi tanto di cappello per l'impegno... peccato che sarebbe stato meglio se l'avesse fatto un cieco. TUTTI i cartelli che entrano o escono prima/dopo, nessun spezzascena rispettato e a volte i sub mancano completamente per poi riapparire tutti in una botta e superare oltre le 4 righe di sub.
Non posso fare gli screen ovviamente... ne metto uno indicativo.

gintama113pulireibagnic

Encode: 2

I file variano da una dimensione di 50mb ad una di 400mb. Sono encodati in xvid, formato avi. Non so se i dvd sono 16:9 quindi non saprei dire se hanno usato i dvdrip o i tvrip... ma propendo più per i tvrip.

Non c'è molto da dire: sono encodati molto male... cubetti everywhere e ogni tanto ci sono anche dei crash grafici (non so come chiamarli... tipo quello di seguito)

tuttaquestionediistinto
gintama113pulireibagnic
gintama108alcunecoseson
gintama108alcunecoseson

E adesso...

benvenuti nell'angolo del YouDontSay!

gintama093ancheglieroih
gintama100anchegliogget
gintama77subitaallgamef

Che altro dire se non

tumblr_m4w0lnpwZJ1rpkjkko2_1280

Media voti: [2+0+(-3)+2+2] = 0,6

Voto personale: 9. È semplicemente fantastico.

p.s. per la cronaca, ho anche scaricato degli episodi più recenti e non c'è alcun minimo miglioramento (fortunatamente!)
view post Posted: 4/7/2012, 19:11 by: Tada no Snob     +1Aneddoti [opf] - Il caminetto del fansub
opfshitpuden268

Forse la domenica mattina è meglio dormire...
view post Posted: 4/7/2012, 18:45 by: Cry'     +1Aneddoti [opf] - Il caminetto del fansub
tl:dr?

Un'accozzaglia di persone lavora a gratis alzandosi alle 5 del mattino per uno che con i soldi dei DDL si fa i viaggi a tokyo?

Non so chi sia più lo scemo a sto punto...
117 replies since 13/10/2010