Σύνδεση Όνομα μέλους Κωδικός
Να γίνεται η σύνδεση αυτόματα σε κάθε μου επίσκεψη    
Εγγραφή
Εγγραφή
Συνδεθείτε, για να ελέγξετε τα προσωπικά σας μηνύματα
Συνδεθείτε, για να ελέγξετε τα προσωπικά σας μηνύματα
AnimeClipse Αρχική σελίδα » Εγκυκλοπαίδεια Fansubbing

Homebrew Avisynth Scripts
Προβολή προηγούμενου Θέματος :: Προβολή επόμενου Θέματος  
Συγγραφέας Μήνυμα


Ένταξη: 04 Μάρ 2006
Δημοσιεύσεις: 2744
Τοποθεσία: Θεσσαλονίκη





















Δημοσίευση Δημοσιεύθηκε: Τρι Απρ 07, 2009 3:22 pm
Τίτλος: Homebrew Avisynth Scripts
Απάντηση με παράθεση αυτού του μηνύματος

Μιας και τώρα τελευταία το 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...


Έχει επεξεργασθεί από τον/την Gpower2 στις Τετ Φεβ 29, 2012 2:12 pm, 2 φορές συνολικά
Επιστροφή στην κορυφή
Προβολή του προφίλ του συγγραφέα Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του συγγραφέα Διεύθυνση AIM Yahoo Messenger MSN Messenger


Ένταξη: 04 Μάρ 2006
Δημοσιεύσεις: 2744
Τοποθεσία: Θεσσαλονίκη





















Δημοσίευση Δημοσιεύθηκε: Τρι Απρ 07, 2009 3:28 pm
Τίτλος: Goverlay
Απάντηση με παράθεση αυτού του μηνύματος

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

Κώδικας:

#####################################################
#                                                   #
# 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
}


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

Κώδικας:

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)


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

Κώδικας:
#####################################################
#                                                   #
# 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
}


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

Κώδικας:
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...


Έχει επεξεργασθεί από τον/την Gpower2 στις Κυρ Μάρ 04, 2012 4:26 pm, 3 φορές συνολικά
Επιστροφή στην κορυφή
Προβολή του προφίλ του συγγραφέα Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του συγγραφέα Διεύθυνση AIM Yahoo Messenger MSN Messenger


Ένταξη: 11 Δεκ 2006
Δημοσιεύσεις: 676


















Δημοσίευση Δημοσιεύθηκε: Πεμ Αύγ 13, 2009 3:19 am
Τίτλος: Neo106 IVTC Combo
Απάντηση με παράθεση αυτού του μηνύματος

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

Κώδικας:

#για 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 για ακομη καλυτερα αποτελεσματα.

Κώδικας:
eedi2().spline36resize(width, height).turnright().eedi2().spline36resize(height, width).turnleft()


Τα παραπανω φιλτρα υπαρχουν στο http://avisynth.org/warpenterprises/ καθενα με τις οδηγιες του.
_________________
Επισκεφτείτε το κανάλι μας πατώντας εδώ
Για τα τελευταία releases επισκεφθείτε τον tracker μας
Για να δείτε την πρόδο των projects πηγαίνετε στο Project Status πατώντας εδώ
Ζητάτε ευγενικά χωρίς να απαιτείτε
Επιστροφή στην κορυφή
Προβολή του προφίλ του συγγραφέα Αποστολή προσωπικού μηνύματος


Ένταξη: 30 Μάι 2005
Δημοσιεύσεις: 740
Τοποθεσία: $root_dir














Δημοσίευση Δημοσιεύθηκε: Τετ Φεβ 29, 2012 4:59 am
Τίτλος: Modified Signs Overlay
Απάντηση με παράθεση αυτού του μηνύματος

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

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

Κώδικας:
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:

Κώδικας:
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 κανάλι:

Κώδικας:
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:

Κώδικας:
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:

Κώδικας:
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 μας, για να δένει καλύτερα με την εικόνα:

Κώδικας:
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 αρχείο; Η παρακάτω συνάρτηση μας δίνει και αυτή τη δυνατότητα:

Κώδικας:
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
}


Έχει επεξεργασθεί από τον/την Left64Vegeta στις Δευ Μάρ 05, 2012 12:37 am, 1 φορά
Επιστροφή στην κορυφή
Προβολή του προφίλ του συγγραφέα Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του συγγραφέα


Ένταξη: 04 Μάρ 2006
Δημοσιεύσεις: 2744
Τοποθεσία: Θεσσαλονίκη





















Δημοσίευση Δημοσιεύθηκε: Κυρ Μάρ 04, 2012 4:59 pm
Τίτλος:
Απάντηση με παράθεση αυτού του μηνύματος

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

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

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

Κώδικας:
#####################################################
#                                                   #
# 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
}


Χρήση:

Κώδικας:
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...
Επιστροφή στην κορυφή
Προβολή του προφίλ του συγγραφέα Αποστολή προσωπικού μηνύματος Επίσκεψη στην ιστοσελίδα του συγγραφέα Διεύθυνση AIM Yahoo Messenger MSN Messenger
Προβολή όλων των Δημοσιεύσεων που έγιναν πριν από:   
Δημοσίευση νέου Θέματος     Απάντηση στο Θέμα     AnimeClipse Αρχική σελίδα » Εγκυκλοπαίδεια Fansubbing Όλες οι Ώρες είναι GMT + 2 Ώρες
Σελίδα 1 από 1

 
Μετάβαση στη:   
Δεν μπορείτε να δημοσιεύσετε νέο Θέμα σ' αυτήν την Ενότητα
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Ενότητας
Δεν μπορείτε να επεξεργασθείτε τις δημοσιεύσεις σας σ' αυτήν την Ενότητα
Δεν μπορείτε να διαγράψετε τις δημοσιεύσεις σας σ' αυτήν την Ενότητα
Δεν έχετε δικαίωμα ψήφου στα δημοψηφίσματα αυτής της Ενότητας




Powered by phpBB © 2001, 2002 phpBB Group






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