Log in Username Password
Log me on automatically each visit    
Register
Register
Log in to check your private messages
Log in to check your private messages
AnimeClipse Forum Index » Εγκυκλοπαίδεια Fansubbing

Homebrew Avisynth Scripts
View previous topic :: View next topic  
Author Message


Joined: 04 Mar 2006
Posts: 2744
Location: Θεσσαλονίκη





















Post Posted: Tue Apr 07, 2009 3:22 pm
Post subject: Homebrew Avisynth Scripts
Reply with quote

Μιας και τώρα τελευταία το filtering είναι της μοδός ( Razz ), είπα να ανοίξω κι ένα thread για να ποστάρουμε homebrew τεχνικές και script που χρησιμοποιούμε, ώστε να διευκολύνουμε τη ζωή τη δική μας αλλά και όσων θέλουν να ασχοληθούν!

Παρακαλώ όσοι ποστάρουν, να γράφουν στο Θέμα τον τίτλο του script, στο Περιεχόμενο να ποστάρουν τον κώδικα μέσα σε [code] tags, αλλά και ένα παράδειγμα χρήσης του script, επίσης μέσα σε [code] tags. Σε αντίθετη περίπτωση, τα ποστ θα γίνονται είτε EDIT είτε DELETE για να διατηρείται η ομοιομορφία και η χρηστικότητα του topic.
_________________
Διαβάστε τους Κανόνες του Forum! Τα greeklish απαγορεύονται!
Διαβάστε το Playback FAQ
Feeling... nauseous already? Wait to see my anime list first...

And remember, fansubbing is NOT serious business...


Last edited by Gpower2 on Wed Feb 29, 2012 2:12 pm; edited 2 times in total
Back to top
View user's profile Send private message Visit poster's website AIM Address Yahoo Messenger MSN Messenger


Joined: 04 Mar 2006
Posts: 2744
Location: Θεσσαλονίκη





















Post Posted: Tue Apr 07, 2009 3:28 pm
Post subject: Goverlay
Reply with quote

Μιας και το μόνο που κυκλοφορεί έξω για overlays είναι το avisign, το οποίο προσωπικά το απεχθάνομαι Razz, είπα να γράψω ένα πιο απλό και εύχρηστο script για εσωτερική και μη χρήση. Ορίστε λοιπόν:

Code:

#####################################################
#                                                   #
# Goverlay v2.0                                     #
#                                                   #
# c1 - Original Video clip                          #
# c2 - Overlay Clip (RGBA)                          #
# startf - start frame (of original video)          #
# endf - end frame (of original video)              #
# convert - convert original video to RGBA or not   #
#                                                   #
#####################################################

function Goverlay(clip c1, clip c2, int "startf", int "endf", bool "convert"){

startf = default(startf, 0)
endf = default(endf, startf+FrameCount(c2))
convert = default(convert, false)

part1=c1.trim(0,startf-1)
part2=c1.trim(startf,endf)
part3=c1.trim(endf+1,0)

part2= convert?part2.ConvertToRGB32().overlay(c2, mask=c2.showAlpha()):part2.overlay(c2.ConvertToYV12(), mask=c2.showAlpha())
part2= convert?part2.ConvertToYV12():part2
return part1+part2+part3
}


Παράδειγμα χρήσης:

Code:

avisource("C:\Garslan\AnimeClipse\GTO\GTO_Episode1_Workraw_Final.avi")

ts1=avisource("C:\Garslan\AnimeClipse\GTO\ep01_tb2_21434_-_21517.avi")
ts2=avisource("C:\Garslan\AnimeClipse\GTO\ep01_tb3_66506_-_66650.avi")
ts3=avisource("C:\Garslan\AnimeClipse\GTO\ep01_tb_18138_-_18219.avi")
ts4=avisource("C:\Garslan\AnimeClipse\GTO\ep01_titlos_6808_-_6934.avi")

goverlay(ts1,21434)
goverlay(ts2,66506)
goverlay(ts3,18138)
goverlay(ts4,6808)


Καινούρια έκδοση με δυνατότητα διαφορετικής μάσκας:

Code:
#####################################################
#                                                   #
# Goverlay v2.6                                     #
#                                                   #
# c1 - Original Video clip                          #
# c2 - Overlay Clip (RGBA)                          #
# mask - Mask clip                                  #
# startf - start frame (of original video)          #
# endf - end frame (of original video)              #
# convert - convert original video to RGBA or not   #
#                                                   #
#####################################################

function Goverlay(clip c1, clip c2, clip mask, int "startf", int "endf", bool "convert")
{
   startf = default(startf, 0)
   endf = default(endf, startf + FrameCount(c2))
   convert = default(convert, false)
   mask = default(mask, c2)

   part1=c1.trim(0, startf - 1)
   part2=c1.trim(startf, endf)
   part3=c1.trim(endf + 1, 0)

   part2= convert ? part2.ConvertToRGB32().overlay(c2, mask=c2.showAlpha()) : part2.overlay(c2.ConvertToYV12(), mask=mask.showAlpha())
   part2= convert ? part2.ConvertToYV12() : part2

   final = startf == 0 ? ((endf > framecount(c1) - 1) ? part2 : part2 + part3) : ((endf > framecount(c1) - 1) ? part1 + part2 : part1 + part2 + part3)
   return final
}


Παράδειγμα χρήσης:

Code:
Avisource("Ep017_lossless.avi")
logo_a=avisource("..\logo_1a.avi")
goverlay(logo_a, logo_a, 1255)


Παρατηρήσεις:
  • Θεωρώ ότι το script θα υπάρχει με την ονομασία Goverlay.avsi
  • Πλέον δε χρειάζεται σαν input το end frame
  • Καλό είναι να αποφεύγεται το convert=true, απλά μπήκε επειδή μου ζητήθηκε
  • Δε χρειάζεται η εντολή return στο τέλος
Tip
Το ξέρατε ότι αν σώσετε τα script με κατάληξη .avsi και όχι την απλή .avs, το avisynth τα φορτώνει αυτόματα χωρίς να χρειάζεται import; Wink
_________________
Διαβάστε τους Κανόνες του Forum! Τα greeklish απαγορεύονται!
Διαβάστε το Playback FAQ
Feeling... nauseous already? Wait to see my anime list first...

And remember, fansubbing is NOT serious business...


Last edited by Gpower2 on Sun Mar 04, 2012 4:26 pm; edited 3 times in total
Back to top
View user's profile Send private message Visit poster's website AIM Address Yahoo Messenger MSN Messenger


Joined: 11 Dec 2006
Posts: 676


















Post Posted: Thu Aug 13, 2009 3:19 am
Post subject: Neo106 IVTC Combo
Reply with quote

Προσφατα χρησιμοποιησα το παρακατω combo για ivtc σε anime με 36% Film, τιγκα στα combed frames και εκει που το τριπλο combo του tritical (μετα απο απειρο configuration) και το telecide εβγαζαν αθλια αποτελεσματα.Οπου δεν εφυγαν τα combed frames εγιναν απλως παρα πολυ ανεκτα σε σημειο που καποιες φορες ουτε καν τα προσεχες.

Code:

#για video με πρωτο field το πανω.
#Μπορουμε δοκιμαστικα να καλεσουμε την
#SeperateFileds() για να δουμε ποιο field (πανω η κατω)
#εμφανιζεται πρωτο στο video μας.

AssumeTFF()

#οριζουμε δικο μας smart bober και οχι τον default του smartdecimate.
#Εγω επελεξα τον DGBob.

my_bobbing=DGBob(mode=1, order=1, thresh=70)

#χωριζουμε τα frames σε fields για να αυξηθει το frame accuracy απο τον
#decimator μας-ταυτοχρονα αυξανεται το fps του video σε 2x.
#H τελευταια εκδοση του smartdecimate καλει μονη της την SeparateFields()

SeparateFields()

#βαζοντας σαν πρωτες παραμετρους 24 (στοχος για τελικο framerate με
#ολοκληρωμενα progressive frames και οχι fields) και 60(αρχικο framerate)
#στο smartdecimate, του δινουμε εντολη για 3:2 pulldown. Σαν αρχικο
#framerate εχουμε ακριβως 60 γιατι το smartdecimate στρογγυλοποιει το
#αποτελεσμα του 29.97x2=59.94. Πιο σωστο θα ηταν να χρησιμοποιήσουμε
#σαν παραμετρους 23976 και 59940, οι τιμες αυτές ομως ειναι πολυ μεγαλες
#και θα επρεπε να προβουμε σε απλοποιηση.

SmartDecimate(24, 60, tel=0.5, bob=my_bobbing)

#smoothing σε frames που εμειναν combed artifacts

SmoothDeinterlace(tff=true, lacethresh=20, edgethresh=50)

#Τελος θελουμε το video να τρεχει σε 23.976 fps (24 frames per 1.001 seconds).

AssumeFPS(24, 1001, false)



Προτεινεται και το antialiasing του lexalkon για ακομη καλυτερα αποτελεσματα.

Code:
eedi2().spline36resize(width, height).turnright().eedi2().spline36resize(height, width).turnleft()


Τα παραπανω φιλτρα υπαρχουν στο http://avisynth.org/warpenterprises/ καθενα με τις οδηγιες του.
_________________
Επισκεφτείτε το κανάλι μας πατώντας εδώ
Για τα τελευταία releases επισκεφθείτε τον tracker μας
Για να δείτε την πρόδο των projects πηγαίνετε στο Project Status πατώντας εδώ
Ζητάτε ευγενικά χωρίς να απαιτείτε
Back to top
View user's profile Send private message


Joined: 30 May 2005
Posts: 740
Location: $root_dir














Post Posted: Wed Feb 29, 2012 4:59 am
Post subject: Modified Signs Overlay
Reply with quote

Αν και έχει περάσει πολύς καιρός, κάλιο αργά παρά ποτέ. Είχα κάνει κάποτε μια διόρθωση στο Signs_overlay, γιατί δεν δεχόταν overlay διάρκειας 1 frame. Δεχόταν από 2 και πάνω.

Τροποιημένη έκδοση του sign, που υποστηρίζει sign 1 frame:

Code:
function sign( clip c , int "start_frame" , int "end_frame" , int "offset" , string "mode" , int "x" , int "y" )
{
   offset = Default( offset , 0 )
   mode = Default( mode , "Blend" )
   end_frame = Default( end_frame , 0 )
   x = Default( x , 0 )
   y = Default( y , 0 )
   start_frame = Default( start_frame , 0 )
   overlay_frame = SIGN_FRAME
   assert( defined( c ) , "You must have a working video clip to be overlayed" )
   end_frame = SIGN_OVERLAY.isclip ? ( ( end_frame > 0 ) ? end_frame : start_frame + SIGN_OVERLAY.framecount - 1 - SIGN_FRAME ) : end_frame
   start_frame = SIGN_OVERLAY.isclip ? ( ( start_frame >= 0 ) ? start_frame : end_frame - SIGN_OVERLAY.framecount + 1 + SIGN_FRAME ) : start_frame
   assert( start_frame <= end_frame , "Starting Frame (" + string( start_frame ) + ") must be smaller than Ending Frame (" + string( end_frame ) + ")!" )
   assert( ( start_frame >= 0 ) && ( end_frame >= 0 ) , "Starting (" + string( start_frame ) + ") and Ending Frame (" + string( end_frame ) + ") must not be smaller than 0" )
   assert( end_frame < c.framecount , "The number of frames being overlayed must not be bigger than the number of frames in the clip you're overlaying on (end frame = " + String( end_frame ) + ")" )
   o = SIGN_OVERLAY.isclip() ? SIGN_OVERLAY.assumefps( c ).trim( overlay_frame + offset , overlay_frame + end_frame - start_frame ) : ""
   global SIGN_FRAME = SIGN_FRAME + end_frame - start_frame + 1
   start_frame = start_frame + offset
   sign_overlays = lcase( mode ) == "splice" ? o : ( SIGN_OVERLAY.isclip() ? c.trim( start_frame , end_frame ).overlay( o , x , y , o.showalpha , mode=mode ) : "" )
   return \
      SIGN_OVERLAY.isclip() ? \
         ( start_frame > 0 ? \
         ( end_frame < c.framecount( ) - 1 ? \
         c.trim( 0 , -start_frame ) ++ sign_overlays ++ c.trim( end_frame + 1 , 0 ) : \
         c.trim( 0 , -start_frame ) ++ sign_overlays ) : \
         ( end_frame < c.framecount( ) - 1 ? \
         sign_overlays ++ c.trim( end_frame + 1 , 0 ) : \
         sign_overlays ) \
         ) : c.trim( start_frame , end_frame )
}


Και με την ευκαιρία, του είχα προσθέσει μερικά fancy features. Δεν τα έγραψα σε ξεχωριστό script γιατί υπάρχουν global μεταβλητές στο sign.

Πολλές φορές θα θέλαμε να περάσουμε μεταβλητή video στο avisign, αλλά αναγκαζόμαστε να περάσουμε καρφωτό path και filename.


Η συνάρτηση clipSign μας επιτρέπει να δώσουμε σαν όρισμα μεταβλητή video αντί για καρφωτό path:

Code:
function clipSign( clip c , clip v , bool "rescale" , string "alpha_file" , string "colorspace" )
{
   rescale = Default( rescale , false )
   colorspace = Default( colorspace , "" )
   colorspace = UCase( colorspace )
   alpha_file = Default( alpha_file , "" )
   v = converttorgb32(v)
   global SIGN_FRAME = 0
   global SIGN_OVERLAY = rescale ? ( ( alpha_file != "" ) ? mergeargb( avisource( alpha_file ) , v.showred , v.showgreen , v.showblue ) : v ).assumefps( c ).lanczos4resize( c.width , c.height ) : ( ( alpha_file != "" ) ? mergeargb( avisource( alpha_file ) , v.showred , v.showgreen , v.showblue ) : v ).assumefps( c )
   global SIGN_OVERLAY = colorspace == "YV12" ? SIGN_OVERLAY.converttoyv12( ) : ( colorspace == "YUY2" ? SIGN_OVERLAY.converttoyuy2( ) : ( colorspace == "RGB" ? SIGN_OVERLAY.converttorgb( ) : ( colorspace == "RGB24" ? SIGN_OVERLAY.converttorgb24( ) : ( colorspace == "RGB32" ? SIGN_OVERLAY.converttorgb32( ) : SIGN_OVERLAY ) ) ) )
   return c
}



Επίσης, μπορεί να θέλουμε να δώσουμε ένα ξεχωριστό video σαν alpha mask. Η συνάρτηση clipSignAlpha δέχεται και ένα όρισμα μεταβλητής video που αντιπροσωπεύει το alpha κανάλι:

Code:
function clipSignAlpha( clip c , clip v , clip a)
{
   v = converttorgb32(v)
   global SIGN_FRAME = 0
   global SIGN_OVERLAY = mergeargb(a , v.showred , v.showgreen , v.showblue ).assumefps( c )
   return c
}



Μια φορά χρειάστηκε να κάνω Tweak στο overlayed video, οπότε έφτιαξα και μια παραλλαγή που να παίρνει και παραμέτρους Tweak:

Code:
function clipSignTweak( clip c , clip v, float "hue", float "sat", float "bright", float "cont")
{
   
   hue = Default(hue, 0.0)
   sat = Default(sat, 1.0)
   bright = Default(bright, 0.0)
   cont = Default(cont, 1.0)
   
   v2 = converttoyv12(v)
   v2 = Tweak(v2, hue=hue, sat=sat, bright=bright, cont=cont)
   v2 = converttorgb24(v2)
   global SIGN_FRAME = 0
   global SIGN_OVERLAY = mergeargb(v.showalpha , v2.showred , v2.showgreen , v2.showblue ).assumefps( c )
   return c
}



Αντίστοιχα, μπορεί να θέλουμε να κάνουμε ImgSign, το οποίο να κάνει Fade-in και Fade-out. Στην συνάρτηση FadeImgSign μπορούμε να ορίσουμε πόσα frames από το συνολικό overlay θέλουμε να καταλαμβάνει το Fade-in, και πόσα το Fade-out:

Code:
function FadeImgSign( clip c , string "filename" , int "length", int "fadein_num", int "fadeout_num")
{
   length = Default( length , 30)
   fadein_num = Default( fadein_num , 10 )
   fadeout_num = Default( fadeout_num , 10 )
   v = imagesource( file=filename , start=0 , end=length - 1 , use_devil = true , pixel_type="RGB32" )
   a = v.ShowAlpha()
   a = FadeIn0(a, fadein_num)
   a = FadeOut0(a, fadeout_num)   
   v = MergeARGB(a, v.ShowRed(), v.ShowGreen(), v.ShowBlue())
   global SIGN_FRAME = 0
   global SIGN_OVERLAY = v
   return c
}



Και επειδή συχνά τα λογότυπα των anime μπορεί να έχουν μια πολύ ελαφριά και ανεπαίσθητη θολούρα, η παρακάτω παραλλαγή μας επιτρέπει να βάλουμε και λίγο Blur στο Logo μας, για να δένει καλύτερα με την εικόνα:

Code:
function FadeImgSignBlur( clip c , string "filename" , int "length", int "fadein_num", int "fadeout_num", float "blur_level")
{
   length = Default( length , 30)
   fadein_num = Default( fadein_num , 10 )
   fadeout_num = Default( fadeout_num , 10 )
   blur_level = Default( blur_level , 0 )
   v = imagesource( file=filename , start=0 , end=length - 1 , use_devil = true , pixel_type="RGB32" )
   v = Blur(v, blur_level)
   a = v.ShowAlpha()
   a = FadeIn0(a, fadein_num)
   a = FadeOut0(a, fadeout_num)   
   v = MergeARGB(a, v.ShowRed(), v.ShowGreen(), v.ShowBlue())
   global SIGN_FRAME = 0
   global SIGN_OVERLAY = v
   return c
}



Και γιατί να μην μπορούμε να βάλουμε και hardsubbed υποτίτλους, με offset συγκεκριμένο frame, για να κάνουμε time-shifts στα credits ή κάποιο άλλο hardsubbed στοιχείο, χωρίς να πειράζουμε κάθε φορά το .ass αρχείο; Η παρακάτω συνάρτηση μας δίνει και αυτή τη δυνατότητα:

Code:
function AssSign(clip c, string filename, int start_frame) {
   c1 = Trim(c, 0, start_frame - 1)
   c2 = Trim(c, start_frame, 0)
   c2 = TextSub(c2, filename)
   return c1+c2
}


Last edited by Left64Vegeta on Mon Mar 05, 2012 12:37 am; edited 1 time in total
Back to top
View user's profile Send private message Visit poster's website


Joined: 04 Mar 2006
Posts: 2744
Location: Θεσσαλονίκη





















Post Posted: Sun Mar 04, 2012 4:59 pm
Post subject:
Reply with quote

Ένα από τα πιο γνωστά προβλήματα στο filtering, είναι το antialiasing, δηλαδή, πώς θα κάνουμε τις γραμμές λείες χωρίς να έχουν σκαλοπατάκια.

Πριν κάποια χρόνια, ο lexalkon βρήκε ψάχνοντας μια τεχνική, η οποία πραγματικά έχει θεαματικά αποτελέσματα. Πλέον το χρησιμοποιούμε σχεδόν πάντα, αλλά ποτέ δεν κάθισε κανένας να το κάνει μια function να τελειώνουμε.

Ε, μου ήρθε έμπνευση και σας προσφέρω το script.

Code:
#####################################################
#                                                   #
# lexalkon Antialising v1.0                         #
#                                                   #
# c1 - Original Video clip                          #
#                                                   #
#####################################################

function lexAntialias(clip c1)
{
   final = c1.eedi2().spline36resize(c1.width, c1.height).turnright().eedi2().spline36resize(c1.height, c1.width).turnleft()
   return final
}


Χρήση:

Code:
lexAntialias()


Τόσο απλό κι ωραίο! big smile

Στο μέλλον θα του προσθέσω κι άλλα καλούδια που χρειάστηκα, αλλά προς το παρόν αυτό φτάνει και περισσεύει. Wink
_________________
Διαβάστε τους Κανόνες του Forum! Τα greeklish απαγορεύονται!
Διαβάστε το Playback FAQ
Feeling... nauseous already? Wait to see my anime list first...

And remember, fansubbing is NOT serious business...
Back to top
View user's profile Send private message Visit poster's website AIM Address Yahoo Messenger MSN Messenger
Display posts from previous:   
Post new topic     Reply to topic     AnimeClipse Forum Index » Εγκυκλοπαίδεια Fansubbing All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:   
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum




Powered by phpBB © 2001, 2002 phpBB Group






MKPortal M1.1 Rc1 ©2003-2005 All rights reserved
Page generated in 0.02404 seconds with 5 queries