Recensubs HQ

Posts written by Liquid Dr4k3

view post Posted: 10/5/2018, 14:00     +1Che fine aveva fatto la recensubba? - Il salotto del fansub
Ci sono diverse ipotesi che si sono create dopo un acceso confronto tra le più grandi menti del fansub. Le più accreditate sono:

1) Un mod (sp) è impazzito e l'ha cancellata, ma adesso nega;
2) Cabraman, insider delle yaoiste, ha utilizzato le sue potenti influenze nel mondo fansubbistico ed ha indotto qualcuno a cancellarla;
3) Adricoso l'ha cancellata in preda al rimorso dovuto al tradimento verso BB;
4) C'è stata una segnalazione fatta da qualcuno a FF, e la recensubba è stata spostata/eliminata. Per la segnalazione si sospetta Kaw, il quale avrebbe segnalato la recensubba per intascare dei soldi da parte di una potente organizzazione (probabilmente gli illuminati). I soldi sarebbero poi stati spesi per acquistare un Pad nuovo di zecca.

Edited by Liquid Dr4k3 - 10/5/2018, 15:10
view post Posted: 6/10/2016, 16:38     La vera guida a come cavolo si encoda per davvero - Episodio 7: IVTC/DeInt/VFR/Cazzi&Mazzi (1) - Guida galattica per fansubbisti
Vogliamo sapere come si fa a far generare il timecode a yatta utilizzando il NoDecimate :PogChamp:

Lo so... ormai scrivo solo per usare il PogChamp a caso.
view post Posted: 19/9/2016, 10:33     Recensubs vs TnS - Il caminetto del fansub
Passi il crf bloat, ma non capisco quell'aq-strength a 1.10
Ha gradienti atroci da tenere?
view post Posted: 11/9/2015, 13:45     [AnimeTubeItalia] Joukamachi no Dandelion - 01 - Recensubs
CITAZIONE (Raizel ¬ @ 11/9/2015, 01:04) 
Encode: N.D. Non mi esprimo, non ci capisco niente e quindi meglio che stia zitto.

Non serve capirne qualcosa, quando vedi quella roba in alto a destra piazza zero sulla fiducia. Senza contare che >ATI (anche il font è simile).
view post Posted: 27/8/2015, 14:53     [SSA] Touhou Gensou Mangekyou 5 - Recensubs
Ma seriamente pensi che qualcuno di quelli che ti sta rispondendo scarica quello che fai te? Tempo fa ebbi la malsana idea di scaricare un episodio di White Album S2 ed è bastato il fadein del primo episodio a farmi prendere un cancro agli occhi. Senza contare che più o meno tutti quelli a cui stai rispondendo penso siano in grado di vedere una serie in inglese, e ricorrono al fansub ita giusto se c'è un gruppo particolarmente valido che subba una serie alla quale sono interessati. Ti stupirò, ma sulla lista dei gruppi particolarmente validi non c'è il tuo, quindi...
view post Posted: 26/8/2015, 13:24     +7[SSA] Touhou Gensou Mangekyou 5 - Recensubs
CITAZIONE (stregato @ 26/8/2015, 13:03) 
IL primo screen e così di raw.
Accenti può capitare di dimenticarsi, capita a chiunque fansub.
Font decido io e non voi, e l'altezza è di default per tutti i miei sub.
Avi a vita e se non vi piace nessuno vi dice di scaricarlo, fatevelo voi.
Posso essere d'accordo solo sulla traduzione, mai detto di essere bravo e non ho nessuno checker, sono da solo.

Ricapitolando:
- Il type/style è una porcheria, ma lo decido io quindi dovete starvi zitti;
- L'encode è una porcheria, ma AVI tutta la vita perché sono troppo pigro per imparare ad usare un altro programma da 4 soldi diverso da quello che uso da 100 anni;
- La traduzione è una porcheria, ma non sono traduttore quindi non potete incolparmi.
Se veramente la pensi così nel tuo magico mondo chiunque può definirsi fansubber, tanto è sufficiente non saper fare un cazzo.

Edited by Liquid Dr4k3 - 26/8/2015, 16:25
view post Posted: 9/8/2015, 13:01     +2Il topic dei FAIL jap - Fun & Fail
CITAZIONE (Rinkana @ 9/8/2015, 12:46) 
Ah, ok. Ora sono curioso di sapere se c'è lo stesso errore nei Blue-ray.

Lo sai che ogni volta che scrivi Blue-Ray un ingegnere della Sony muore?
view post Posted: 11/7/2015, 14:07     DehardSub - Guida galattica per fansubbisti
Modificata la funzione di masking:

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
}


leggermente meno safe, anche se provandola ho visto che non si perde nulla, ma più furba visto che riesce a limitare il più possibile l'area mascherata ai soli sub funi.

Edited by Liquid Dr4k3 - 13/7/2015, 23:16
view post Posted: 9/7/2015, 15:28     +5DehardSub - 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: 9/6/2015, 20:35     Programmi elettorali nuovi admin recensubs - Tutto il resto...
CITAZIONE (mirkosp @ 9/6/2015, 17:52) 
CITAZIONE (Danielys @ 9/6/2015, 17:32) 
sto posto non ha più senso di esistere comunque, tanto vale che lo trasformiate in spalamerdahq

Pensa che 'sto topic è nato da Tadao che valutava di aprire un sito apposta per i topic stagionali, visto che recensubs viene usato solo per quello ormai.

C'è anche il ghetto, che viene usato dagli eng per copia/incollare script a caso senza capire una parola di quello che c'è scritto.

BTW, non votate cabraman... per installare un plug-in ha quasi ucciso SSK
view post Posted: 24/3/2015, 08:47     Linee guida dei vari gruppi riguardo ai simulcast - Il salotto del fansub
CITAZIONE (mirkosp @ 23/3/2015, 14:10) 
Categorie Bonus:

Coloro che sono schierati sulla linea di confine: Owari-Subs
Rovinamercati: Liquid Drake

(´・ω・`)
view post Posted: 24/2/2015, 09:38     [DOMANDA] Deinterlacciare e rendere progressivo un BD - Il ghetto dei fansubbers
CITAZIONE (rocksel @ 24/2/2015, 00:35) 
CITAZIONE (Liquid Dr4k3 @ 24/2/2015, 00:21) 
È telecinato a pattern variabile. Non so cosa utilizzi solitamente per fare IVTC, ma se usi qualche automagicivtc tipo tfm.tdecimate, e con questi non ottieni un buon risultato, ti restano 2 strade:
1) Ci diventi pazzo con YATTA: miglior risultato, ma circa 2-3 ore ad episodio solo per l'ivtc (i->Ctrl+s->i->Ctrl+s-> ecc ecc)
2) Bobbi tutto con qualcosa tipo QTGMC e gg.

Grazie infinite per esserti preso il disturbo di aver verificato la cosa e per i consigli. Prendo nota e vedrò di utilizzarli al meglio... nella peggiore delle ipotesi sarò meno ignorante di prima (il che è già abbastanza, direi :) ). Un po' di fiducia ce l'ho perché, almeno a video con MPC, saltando qua e là e a velocità minima, non ho riscontro delle schifezze che ho visto nel mio primo tentativo. Quindi qualche cosa di automatico potrebbe semplificarmi il lavoro: ora devo solo trovarlo.

Grazie ancora!

Figurati. Comunque se stai utilizzando tfm.tdecimate suppongo che croppare il pillarbox prima di fare IVTC possa aiutare TIVTC con il calcolo delle metriche. In teoria la parte di frame nera potrebbe farti andare in postprocess roba a caso. Non ne sono sicuro (non l'ho utilizzato praticamente mai) ma vale la pena fare un tentativo nel caso in cui stai utilizzando quello.
197 replies since 18/7/2011