|
|
Προβολή προηγούμενου Θέματος
::
Προβολή επόμενου Θέματος
|
Συγγραφέας |
Μήνυμα |
Ένταξη: 04 Μάρ 2006
Δημοσιεύσεις: 2744
Τοποθεσία: Θεσσαλονίκη




















|
Δημοσιεύθηκε: Τρι Απρ 07, 2009 3:22 pm
Τίτλος: Homebrew Avisynth Scripts
|
|
|
Μιας και τώρα τελευταία το filtering είναι της μοδός (  ), είπα να ανοίξω κι ένα 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 φορές συνολικά
|
|
Επιστροφή στην κορυφή
|
|
Ένταξη: 04 Μάρ 2006
Δημοσιεύσεις: 2744
Τοποθεσία: Θεσσαλονίκη




















|
Δημοσιεύθηκε: Τρι Απρ 07, 2009 3:28 pm
Τίτλος: Goverlay
|
|
|
Μιας και το μόνο που κυκλοφορεί έξω για overlays είναι το avisign, το οποίο προσωπικά το απεχθάνομαι  , είπα να γράψω ένα πιο απλό και εύχρηστο 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;  _________________ Διαβάστε τους Κανόνες του 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 φορές συνολικά
|
|
Επιστροφή στην κορυφή
|
|
Ένταξη: 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
} |
Χρήση:
Τόσο απλό κι ωραίο!
Στο μέλλον θα του προσθέσω κι άλλα καλούδια που χρειάστηκα, αλλά προς το παρόν αυτό φτάνει και περισσεύει.  _________________ Διαβάστε τους Κανόνες του Forum! Τα greeklish απαγορεύονται!
Διαβάστε το Playback FAQ
Feeling... nauseous already? Wait to see my anime list first...
And remember, fansubbing is NOT serious business...
|
|
Επιστροφή στην κορυφή
|
|
|
|
Δεν μπορείτε να δημοσιεύσετε νέο Θέμα σ' αυτήν την Ενότητα Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Ενότητας Δεν μπορείτε να επεξεργασθείτε τις δημοσιεύσεις σας σ' αυτήν την Ενότητα Δεν μπορείτε να διαγράψετε τις δημοσιεύσεις σας σ' αυτήν την Ενότητα Δεν έχετε δικαίωμα ψήφου στα δημοψηφίσματα αυτής της Ενότητας
|
|
|
|
|
Powered by phpBB © 2001, 2002 phpBB Group
|
|
|
 |
|
|
|