Recensubs HQ

Da .ts ad hardsub .mp4, Guida completa

« Older   Newer »
  Share  
view post Posted on 16/7/2011, 11:31     +1   -1
Avatar

Bimbosp

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

Status:


Dunque, dopo l'episodio 1 di Usagi Drop avevo scritto questa guida che avevo mandato in pm a enatsu degli FTF (poi girata anche a franz) e parlandone con altri ho deciso di postarla qui in quanto potrebbe tornare utile anche ad altri.
Ci sono dei riferimenti a Usagi Drop visto che l'avevo scritta per l'occasione, penso che non sia un problema.

Anzitutto, per encodare, ti suggerisco davvero di usare i transport stream. Essendo usagi drop uno show noitaminA, i .ts escono di sicuro, anche se ci mettono comunque un po' di giorni ad uscire su tokyotosho: aira il giovedì, ma per sabato o domenica dovresti trovarla.

Seconda cosa, il procedimento per usare molto semplicemente un .ts in avisynth è questo:
1) Indexa il .ts usando DGIndex.
2) Carica il d2v in avisynth con MPEG2Source e poi fai i trim su linea singola per togliere le pubblicità. Esempio per l'episodio 1 di usagi drop dal ts su tokyotosho:
Trim(3819,11097)++Trim(13949,27824)++Trim(30972,51021)
Il ++ indica alignedsplice, però anche se fai + singolo, ovvero unalignedsplice, non c'è problema. Ho i ++ perché yatta mette quelli nello script che genera, tutto qui.
3) Usa TIVTC per fare IVTC. Se ci sono scritte a 60i, l'approccio più semplice è quello di creare un file di override con cui specificare il pattern di decimazione per quella parte di video. Ti rimando al manuale di tivtc per ulteriori info su tfm e tdecimate.
4) A questo punto ci sono i filtri, ma la regola d'oro è che in caso di dubbio è meglio non filtrare. Fuji TV si vede piuttosto bene, ha solo problemi coi cambi scena che sono davvero scandalosi a volte. Qui, lavorando senza YATTA hai due possibilità: la prima consiste nel farti più o meno tutto l'episodio a mano per controllarsi tutti i cambi scena e fare freezeframe oppure postprocess sul field pulito. La seconda è guardarti l'episodio e se in movimento noti qualche cambio scena brutto, fare pausa e aggiustarlo. Con YATTA aggiustare questo viene un po' semplificato ma si tratta comunque più o meno di farsi tutto l'episodio a mano se davvero ci tieni. In ogni caso, se devi usare altri filtri, mettili dopo il postprocess e il freezeframe. Anzi, ti dirò di più, personalmente ti consiglio di fare postprocess e freezeframe tra tfm e tdecimate, in caso tdecimate cercasse di tenere un frame sporco duplicato al posto di uno pulito unico (cosa che magari potresti fixare con gli override se ne hai voglia)
5) Ora crop e resize. Con l'HD non ci sono i problemi dell'Active Area che si presentano con i DVD, quindi i calcoli sono semplici, ma ti consiglio comunque di usare questa calcolcatrice. La source è ovviamente 1440x1080 e source ar 16:9. Come prima transform metti il crop. Devi inserire la risoluzione dopo che croppi, quindi facendo ad esempio crop(4,2,-4,-4), metteresti 1432 e 1074. Come seconda transform metti scale e 1280 e 720. Ora controlla cosa ti mette per final PAR e final display resolution. Visto che ci interessa rellare a 1280x720, overcroppare un po' per avere un AR molto vicino al 16:9 perfetto è auspicabile. Con i parametri che ho messo su (e che sono quelli che mi sono serviti da usare in usagi drop) abbiamo un 16:9 matematicamente perfetto, quindi puoi semplicemente fare spline36resize(1280,720) nello script. Se non fosse perfetto, ti conviene avere un errore comunque inferiore all'1%, quindi finché il PAR è superiore al 0.99 o inferiore all'1.01 direi che non devi preoccuparti. Se il dar finale fosse diverso da 1280x720 vedi se croppando un po' di più o meno da un qualche lato riesci a ritrovarti un po' con i numeri senza undercroppare (ma anche senza overcroppare eccessivamente). Ricordati che non puoi fare crop() con valori dispari su contenuto yv12 (che è quello con cui abbiamo a che fare), quindi se ti servisse fare crop dispari puoi farli dentro al resize. Nell'esempio di prima si farebbe spline36resize(1280,720,4,2,-4,-4) per dire.
6) Ok, adesso, dopo il resize, c'è il deband. Questo è un discorso delicato. Fare troppo deband porta via dettaglio, quindi è meglio limitarsi al necessario. In genere un gradfunkmirror(1.01) o (1.02) è più che sufficiente. In caso di banding forte, ti conviene fare un deband più forte solo per quella scena tramite l'uso della funzione range() scritta da phantasmagoriat (non usare l'applyrange interno di avisynth, ha dei seri problemi di gestione della memoria se ne devi usare molti) e probabilmente ti conviene anche usare gradfun3 a quel punto, così puoi controllare meglio svariati parametri per cercare di preservare meglio dettaglio mentre levi il banding. Dopo questo, visto che fate hardsub console, devi encodare a 8bit, quindi aggiungere grain è pressoché d'obbligo. Questo perché a 8bit, se non aggiungi grain, x264 re-introduce molto facilmente il banding. A 10bit non ci sono di questi problemi ma direi che non potete permettervi di fare il salto se volete restare console compatible. Come ultima cosa nello script ovviamente carichi i sub con textsub (oppure con assrender se preferisci).
7) Ok, a questo punto fai una lossless yv12 (consiglio utvideo YUV420) oppure puoi encodare direttamente in x264, come preferisci. Per i parametri di x264, ti consiglio di usare il preset veryslow e poi di toccare i seguenti parametri:
deblock: soprattutto in caso ci siano effetti di noise voluti o magari delle texture, è bene metterlo in negativo per preservarli meglio. -1:-2 è un valore con cui mi trovo bene.
aq-strength: per gli anime si può tranquillamente abbassare. Il tune animation di x264 la mette a 0.6, ma è già troppo basso, più pensato per l'animazione americana che ha praticamente i colori stile secchiello di paint (quindi per uno show come Panty & Stocking va pure bene), quindi di direi di stare tra il 0.7 e il 0.8.
qcomp: valori alti propendono all'uso di quantizer più costanti, valori più bassi propendono per l'uso di un bitrate più costante. Di fatto quindi controlla indirettamente la potenza di mbtree. il 0.6 è un buon valore, ma alzarlo un po' non fa mai male. In genere tenerlo tra 0.7 e 0.8 ha senso, ma in casi particolari stare sotto il 0.7 può rivelarsi utile. Andare oltre il 0.8 rischia di essere solo spreco di bitrate e faresti prima a disabilitare mbtree, che generalmente non conviene.
psy-rd: sono le ottimizzazioni psicovisuali. La cosa è complessa e il modo in cui funzionano esattamente non l'ho mai ben capito neanche io... però più o meno funziona che il primo valore decide cosa per l'occhio umano è dettaglio rilevante, mentre il secondo decide di quanto bisogna favorirlo. Con i ts c'è rischio che qualche artefatto residuo che non si nota venga evidenziato. In genere tenere valori di psy-rd di tipo 0.7:0.1 va bene, ma direi che puoi anche spingerti oltre per l'rdo. Il trellis è meglio non mandarlo oltre allo 0.2 da tvrip. Con bdrip puoi mandarlo anche a 0.4 se vuoi. Occhio che comunque il trellis alza molto il filesize, quindi tenerlo basso è meglio.
8) Ora, prima di far partire l'encode 2 ultime cose su x264 che sono fondamentali. La prima, settare il colormatrix: per i ts è bt709, idem per i bd. Per i dvd controlla quando indexi in dgindex, ma in genere è bt470bg (mi sono capitati dei dvd smpte170m, però). La seconda il qpfile: ti serve solo se devi fare i capitoli, ma se devi farli, ricordati di specificare i frame di inizio capitolo come I. Inoltre, sto comunque scrivendo tutto come se la source fosse constant framerate: usagi drop lo è, però il bumper noitaminA all'inizio è a 29.97 progressivo, quindi se vuoi tenerlo dovresti scrivere i timecode. È un po' complesso spiegarti ora come funziona, quindi il mio consiglio per il momento è di limitarti a tagliarlo via. Il vfr tanto è abbastanza raro oggigiorno quindi non dovresti avere problemi.
9) Ora, prima di encodare il video, passiamo all'audio. Di sicuro sai usare perl, quindi mi limito a linkarti questo script che usa i trim di avisynth per splittare l'audio tramite mkvmerge. È molto semplice quindi non avrai problemi.
10) A questo punto hai l'mka. Se stai usando la build di JEEB di x264, puoi caricare l'audio direttamente tramite --audiofile e puoi dirgli di limitarsi a copiarlo facendo --acodec copy evitando quindi il re-encode. Se stai usando megui, ti consiglio davvero di passare all'encode da cli oppure di passare alla gui di croma25td che comunque usa le build di jeeb ed è molto comoda. Puoi tranquillamente fare output mp4 diretto, e muxerà utilizzando L-SMASH, che personalmente ritengo migliore di mp4box.

Ora hai l'mp4 bello che fatto. Sono stato parecchio riduttivo soprattutto per quanto riguarda l'IVTC, eventualmente dai una scorsa alla guida di yatta che ho scritto quando ti sentirai pronto per il salto e comunque ti ho aggiunto su skype per eventuali dubbi, ma per favore, solo per dei dubbi in alcuni punti. :sigh:

Edited by mirkosp - 16/7/2011, 12:58
 
Web  Top
HibariKyoya
view post Posted on 16/7/2011, 11:41     +1   -1




mirkosp santo subito... :sigh:
Visto che da martedì ho finito gli esami, poi provo a vedere come viene NO.6 encodato da .ts...
 
Top
StrikeFreedom10
view post Posted on 16/7/2011, 12:07     +1   -1




Grazie mille! Stavo giusto cercando qualche valida guida in questi giorni *____*
 
Top
view post Posted on 16/7/2011, 13:24     +1   -1
Avatar

Snobbery Inside

Group:
Utente abilitato
Posts:
2,197
Reputation:
+1,005
Location:
Favolandia

Status:


CITAZIONE (mirkosp @ 16/7/2011, 12:31) 
8) Ora, prima di far partire l'encode 2 ultime cose su x264 che sono fondamentali. La prima, settare il colormatrix: per i ts è bt709, idem per i bd. Per i dvd controlla quando indexi in dgindex, ma in genere è bt470bg (mi sono capitati dei dvd smpte170m, però). La seconda il qpfile: ti serve solo se devi fare i capitoli, ma se devi farli, ricordati di specificare i frame di inizio capitolo come I.

Cambia niente, smpte 170m e bt470bg sono entrambi rec.601, quindi usare l'uno o l'altro non ha effetti su come si vedrà il film, per lo meno a livello di colormatrix.
Smpte 170m è lo standard per i DVD NTSC, bt470bg per i PAL.
Quindi a conti fatti anche senza ricordarsi cos'era uscito su dgindex si può fare la scelta corretta senza troppa difficoltà.

Per il debanding io la vedo in modo dissimile, io lo inserirei solo nel caso ci si accorga che è presente nell'encode.
Ci sono anime in cui il banding è quasi inevitabile e altri dove praticamente non c'è, e finché non encodi non puoi sapere al 100% qual è il caso.
Imho vale la pena di fare lossless, encodare velocemente e vedere com'è il risultato.
Se c'è banding basta caricare il video con il deband, non rallenterà più di tanto l'encode e potrete calibrarlo meglio sapendo con certezza la quantità di banding creata dal video.
 
Web  Top
heartless4ngel
view post Posted on 20/10/2011, 16:29     +1   -1




Volevo chiedere un'informazione: nella prima puntata di Guilty Crown, all'inizio, c'è un pezzo di un faro che emette una luce sempre più forte gradualmente e si vede pixelloso. Non avendo un frame "pulito" diciamo su cui basarmi, come posso migliorarlo?
 
Top
view post Posted on 20/10/2011, 16:46     +1   -1
Avatar

Bimbosp

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

Status:


Se non ci sono né frame né singoli field puliti, le soluzioni sono 3 tra cui scegliere:
1. sticazzi e speri che in movimento non si noti;
2. nuke senza controllo su quel/quei frame con nlmeanscl (o altro denoiser spaziale potente che non fa troppa merda);
3. apri paint.net/photoshop/altro ed evidenzi esclusivamente le parti brutte del frame tralasciando tutti i bordi/limiti dove ci sono dei cambiamenti di colore in bianco e lasciando il resto in nero e usi questo frame come mask per far andare un nuke solo dove serve. Questo frame per frame e, in caso diverse parti del frame abbiano bisogno di intensità diverse di filtraggio o possono essere risolte in modi diversi, combini mask diversi per uno stesso frame.
 
Web  Top
view post Posted on 20/10/2011, 16:58     +1   -1
Avatar

Mastro di Chiavi

Group:
Utente abilitato
Posts:
1,108
Reputation:
+14

Status:


È in un fade, sono due frame, in teoria si potrebbe nukare, anche perché è già sfuocato di suo, ma in velocità non si nota completamente, tanto che me lo sono saltato e l'ho notato adesso.

immagineodf.th

È questo, se ho capito bene e molto meno quello precedente e successivo.

Edit: no il successivo è decimate, quindi sono soltanto quei due.
 
Top
heartless4ngel
view post Posted on 20/10/2011, 17:15     +1   -1




Esatto, infatti stavo guardando anche la vostra versione per vedere come l'avevate migliorato.
 
Top
view post Posted on 20/10/2011, 17:31     +1   -1
Avatar

Mastro di Chiavi

Group:
Utente abilitato
Posts:
1,108
Reputation:
+14

Status:


Per mirko:

In ordine, partendo da quello più pulito (primo da sinistra), sono ccnnc, dove la prima n è quello che ho messo prima e la secondo è decinata, che corrisponde al terzo screen.

http://imageshack.us/g/401/immagine0.png/

 
Top
view post Posted on 20/10/2011, 17:37     +1   -1
Avatar

Snobbery Inside

Group:
Utente abilitato
Posts:
2,197
Reputation:
+1,005
Location:
Favolandia

Status:


Avete provato a vedere se c'è un field più pulito dell'altro?

Comunque nuke (esagerando sul chroma) + eventuale deblock imho dovrebbe risolvere il 90% del problema e renderlo del tutto invisibile.
 
Web  Top
view post Posted on 20/10/2011, 18:06     +1   -1
Avatar

Bimbosp

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

Status:


Il field 1 ha il luma leggermente più pulito, il field 0 ha il chroma più pulito, però serve comunque nukare. La soluzione ottimale qui, secondo me, consiste nel fare un mask del coso che gira, per tenere la posizione fissa del frame corrente e nukare leggerme solo quello, mentre per il resto del frame fare un overlay in ligthen tra i due frame puliti (2 prima e 2 dopo, magari però c'è un frame ancora più successivo ancora più pulito).
Ho scritto questa funzione per fare overlay tra frame diversi con posizione relativa al frame sul quale si vuole agire, l'ho appena moddata in modo tale che si possa specificare anche il mode di overlay:
CODICE
#fadefix v1.1 by mirkosp
#changes a frame with an overlay of the prev and next frames
#weight of the next frame is controlled with fad
#omode is the mode parameter of overlay
function fadefix (clip c, float "fad", int "prev", int "next", string "omode") {
fad = default(fad, 0.5)
prev = default(prev, 1)
next = default(next, 1)
omode = default(omode, "Blend")
assert( (fad > 0.0 && fad < 1.0) , "fad must have a value between 0.0 and 1.0." )
fads = string(fad)
prevs = string(prev)
nexts = string(next)
c
scriptclip("""overlay(last.trim(current_frame-"""+prevs+""",current_frame-"""+prevs+"""),last.trim(current_frame+"""+nexts+""",current_frame+"""+nexts+"""),opacity = float("""+fads+"""),mode = """+CHR(34)+omode+CHR(34)+""" )""")
return last
}

La riga di scriptclip esce spezzata ma sarebbe continua, se non ti funziona assicurati di non avere a capo lì.

In sostanza, dovresti ritrovarti con una riga del genere nello script (9001 sarebbe il numero del frame sporco postato inizialmente da smx):
CODICE
range(9001,9001,mt_merge(nlmeanscl(h=4,plane=4),fadefix(0.53,2,2,"lighten"),imagesource("maskdelframe9001.png").converttoyv12.mt_binarize,true))


Non sono stato a fare il mask di mio, ma questo è il risultato facendo solo il fadefix con quei parametri:
http://img163.imageshack.us/img163/7149/9001q.png
Che è sufficientemente simile all'originale. Col mask puoi semplicemente evitare il blend del coso che gira.
 
Web  Top
view post Posted on 20/10/2011, 18:25     +1   -1
Avatar

Bimbosp

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

Status:


Ok, ho provato a fare un mask e controllare meglio:
CODICE
range(9001,9001,mt_merge(nlmeanscl(h=6,plane=4),fadefix(0.6,2,2,"lighten"),imagesource("maskdelframe9001.png").converttoyv12.mt_binarize.blurmod(3),true))

Il mask: http://img208.imageshack.us/img208/358/maskdelframe9001.png
Risultato : http://img600.imageshack.us/img600/6503/9001fix.png
Blurrato un po' il mask perché il luma non coincideva perfettamente in un punto, corretto un attimo il valore del fadefix, non era abbastanza chiaro l'output.
 
Web  Top
terrablu2003
view post Posted on 20/11/2011, 21:41     +1   -1




Ora so che il ghetto da roba buona,certamente non ci capisco ancora molto,ma 'ste perle me le leggo con calma appena ho tempo!!

Grazie.Santo?Perche non chiediamo di farlo imperatore!
 
Top
12 replies since 16/7/2011, 11:31   2307 views
  Share