Wie versprochen gibt es natürlich noch die fertige Funktion. Ja, es waren noch einige Bugs vorhanden, sollte jetzt aber alles rund laufen.:D
InterlacingReader(wmode=true, mthresh=0.28, progressiv=8, prerange=3, patternlength=11)Function InterlacingReader(clip clp, bool "wmode", float "mthresh", int "progressiv", int "prerange", int "patternlength") {###### PREPARATION ######ord = clp.getparity() ? 1 : 0global thresh = default(mthresh,0.3)global source = clpglobal output = "D:\text.log"global patlength = default(patternlength, 1)global prev = default(prerange,0)global mode = default(wmode, false)global untel = mode == false ? clp.leakkerneldeint(order=ord) : clp.tfm(mode=0, pp=0, MI=72)global maxpuffer = default(progressiv, 2)###### VAR.. ######global diffc = 100.0global temp = 0global pnumber = maxpuffer+1global proc = 1global intc = 0###### Conditional Function Chain, evaluated from bottom to top (!) ######c99=WriteFileIf(source, output, "proc != prop", "proc", """ ":" """, """ "progressiv" """, append=true)c98=WriteFileIf(c99, output, "intc != intp", "intc", """ ":" """, """ "interlaced" """, append=true)c4=FrameEvaluate(c98, "global proc = pnumber == maxpuffer ? ceil(float(temp-intc)/patlength)*patlength + intc : proc global intc = diffp < thresh && diffc > thresh && proc > intc ? current_frame - prev : intc")c3=FrameEvaluate(c4, "global pnumber = diffc > thresh ? 0 : (diffp > thresh && diffc < thresh ? 1 : pnumber+1) global temp = diffp > thresh && diffc < thresh ? current_frame : temp global prop = proc global intp = intc")c2=FrameEvaluate(c3, "global diffc = LumaDifference(source, untel)") c1=FrameEvaluate(c2, "global diffp = diffc")return(c1) }
Die Parameter habe ich dir ja bereits erklärt, falls aber andere auch noch interessiert sind, werde ich gerne noch eine readme dazu schreiben. Bei eigenen Bedarf werde ich die Funktion auch noch etwas erweitern, sollte aber so für dich ausreichen.
Modifizieren könntest du das ganze denn zum Beispiel so:
c99=WriteFileIf(source, output, "proc != prop", """ "\ source.interlacef(" """, "intc", """ "," """, "(proc-1)", """ ") ++" """, append=true)c98=WriteFileIf(c99, output, "intc != intp", """ "\ source.progressivef(" """, "proc", """ "," """, "(intc-1)", """ ") ++" """, append=true)
Einfach die betreffenden Zeilen mit diesen hier ersetzen, die "source" festlegen (source = audiodub(video,audio)) und die notwendigen Funktion anfügen, z.B.
Function progressivef(clip clp, int "startp", int "endp")
{
return clp.trim(startp,endp)
}
Function interlacef(clip cli, int "starti", int "endi")
{
vid = cli.tfm(mode=0,pp=0,MI=68).trim(starti,endi).decimate(11)
return audiodub(vid.assumefps(25), vid.timestretch(tempo=110))
}
Alles anzeigen
Die erste Zeile muss natürlich dann auch noch abgeändert werden.
Ob die Modifizierung auf diese Weise nun wirklich macht, was sie soll, kann ich dir nicht sagen, aber ein bisschen ausprobieren, denn erhält man recht schnell das richtige.
Viel Spaß beim Testen.:zunge: