AVISynth MT -> AVISynth+ MT Wie muss das vorherige Skript geändert werden?

  • Ich habe mit AVISynth MT für meine Zwecke ein geeignetes Skript erstellt. Jedoch würde ich gerne auf AVISynth+ MT umstellen. Sprich das was ja bei MeGUI auch schon enthalten ist.

    Für das normale AVISynth MT gab es ja SetMTMode und bei AVISynth+ MT gibt es dieses SetFilterMTMode

    Wie genau müsste ich das umschreiben, damit der Effekt der MT Nutzung der gleiche wäre?

    Hier mal das Skript, wenn es voll bestückt ist:

    Und bitte... ich möchte jetzt keine riesen Beanstandung des Skriptes haben, sondern wirklich nur wissen wie ich die MT Sachen von AVISynth MT nach AVISynth+ MT umändern muss, damit das von der Reihenfolge gleich arbeitet.

    PS: Jeder SetMTMode Befehl im Skript sollte dabei bitte beachtet werden, das dies Punkte sind die sich ändern können. Einfach so wie es da steht halt umkonvertiert auf dieses AVISynth+ MT. ^^

    Ich weiß nämlich überhaupt nicht so richtig wie ich das machen soll.

  • 1:1 konvertieren geht nicht. AviSynth 2.6 MT definiert die MT-Modi "ab hier im Skript, bis es geändert wird", AviSynth+ MT definiert sie "für den jeweiligen Filter, egal wann und wo er dann verwendet wird".

    Mit SetFilterMTMode() kannst du von vorn herein den bevorzugten Modus pro Filter definieren, so dass du das dann nicht mehr im Skript abschnittsweise tun musst. Am einfachsten ist es wohl, dies mit einem Standard-Importskript zu erledigen.

    Im Unterschied zu AviSynth 2.6 MT muss aber bei AviSynth+ MT in die allerletzte Zeile ein Prefetch(threads), also auch gern noch nach einem return-Statement. Das hat damit zu tun, dass das Skript wohl vom Ende her analysiert wird, so ist es wohl leichter, die Abschnitte zu ignorieren, die an der Ausgabe ohnehin nichts ändern.

    AviSynth Wiki – AviSynth+: MT Notes und aktuelle avsplus_mt.avsi (oder wie du das nennen magst).

  • Sprich ich müsste die Filter erst mit MT Mode ganz oben irgendwo angeben mit jeweiligen Mode, dann kann ich sie anwenden und zum Schluss muss, also am Ende des Gesamten Skriptes, muss ich mit Prefetch die Threads angeben.
    Hab ich das so jetzt richtig verstanden?

    Als Beispiel aus dem was ich verstanden habe:

    Code
    SetFilterMTMode("AVISource", 3)
    SetFilterMTMode("FFVideoSource", 3)
    SetFilterMTMode("Tweak", 2)
    SetFilterMTMode("Blockbuster", 2)
    
    
    AVISource("xxx.avi") ++ FFVideoSource("xxx.avi")
    Tweak(sat=1.3)
    Blockbuster("Blur", Block_size=8, Detail_min=75, Detail_max=100, Luma_offset=0, Luma_threshold=25, Strength=100)
    Prefetch(2)

    Hab ich das so richtig verstanden oder gibt es da jetzt ein Denkfehler?

  • Nicht Umsteigen, sondern mit anbieten.
    Mein Programm was die Skripte erstellt ist jetzt so das es mit AVISynth 32Bit, AVISynth 32Bit MT und AVISynth+ arbeiten kann und auch die nötigen Optionen halt anbieten bzw. ausblendet in Hinsicht auf MT.
    Jedoch hab ich gedacht das man ja AVISynth+ MT auch mit einbringen kann. Allein schon weil das ja mit MeGUI auch schon mit ausgeliefert wird beim Updaten.
    Sprich mein Programm was mir die Skripte erstellt stellt sich dann so ein je nach dem welche AVISynth Version auf dem Rechner installiert ist.

    Und entsprechend der MT Geschichte wollte ich halt zu AVISynth+ MT das Ganze anpassen. ^^

  • Da was für beide parallel anzubieten wird schwierig, AviSynth+ geht da doch an einigen Stellen andere Wege und will auch gar nicht völlig kompatibel sein, teilweise um gar nicht erst mit den Schwachstellen der AviSynth-2-Entwicklung weiterzumachen.

    Es ist schon etwas paradox, dass AviSynth 2.6 nun durch die lange Entwicklung stabiler läuft, obwohl so manches Feature nur etwas trickreich zu funktionieren scheint, weshalb die Übertragung auf 64-bit-Code so schwer war. AviSynth+ wollte da von vorn herein sauberer und portabler arbeiten, aber ausgerechnet jetzt, wo sich herausstellt, dass komplexe Skripts Fehler provozieren, fehlt es an Entwicklungskraft, um die Ursachen dieser Fehler zu erforschen.

    Der Umstieg von MeGUI auf ein integriertes AviSynth+ war noch in einer Zeit passiert, als AviSynth+ MT noch nicht so ganz öffentlich verfügbar war. Und mit QTGMC hatte MeGUI ja auch nichts zu schaffen, außer man schob so ein Skript manuell unter. Entsprechend fiel das Risiko dieser Entscheidung erst spät auf.

  • Also ist AVISynth MT gegenüber AVISynth+ MT besser, weil stabiler?

    Ist es denn richtig wenn man sagt das AVISynth selbst ohne MT besser ist als AVISynth+?

    Hast ja gesagt das AVISynth+ sauberer programmiert und auch portabler gemacht wurde. Aber dennoch an diversen Macken leiden kann, sofern man selbst geschriebene AVISynth Skripte in MeGUI einbindet wo Filter enthalten sind die auf das normale AVISynth laufen.

  • Die problematischen Skripte sind auch ohne MeGUI problematisch, vor allem aufgrund ihrer Komplexität. Im Moment ist AviSynth+ wohl in einer fehlerhaften Phase, und es gibt zur Zeit nicht genug Programmierer, die das beheben können. MeGUI erzeugt nicht besonders komplexe Skripte und verwendet eine überschaubare Auswahl relativ gut bekannter Plugins, die daraus generierten Skripte sollten recht zuverlässig laufen. Außer jemand findet Gegenbeispiele.

  • Selbst unter den verschiedenen AVS+ Versionen gibt es erhebliche Unterschiede. Die "offizielle" AVS+ (r1576) Version ist stabilitätsmässig mehr oder weniger vergleichbar mit 2.6, bietet allerdings kein Multi-Threading. Die aktuelle AVS+ (r1825) Version ist teilweise unbrauchbar, Probleme mit MT, bestimmten Filtern und Speicherverwaltung. QTGMC wird zum Beispiel mit der Zeit immer langsamer, siehe hier.
    Ansonsten - Alles was Ligh geschrieben hat. :D

  • Also kann ich beruhigt auf der AVISynth MT Schiene weiterarbeiten fürs erste. Jedenfalls bis AVISynth+ MT Programmiertechnisch weiter ist und stabil läuft. ^^

    Weil MT Nutzung ist unverzichtbar, gerade da der Skripterzeuger den ich habe auf Youtubes Let's Play Scene zugeschnitten ist und die Leute schon ohnehin rumnörgeln das ihr Rechner nicht weitläufig CPUmäßig ausgelastet wird beim Encodieren.

    Mit MT ist der Prozess schon wesentlich schneller.

    Nur wenn AVISynth+ MT irgendwann Brauchbar und Stabil daherkommt... wann auch immer dies sein möge ..., dann wäre es schon Nice ein entsprechendes Anhängsel in mein Programm einzubinden, der dann bei der Skripterstellung sich auf die MT Nutzung von AVS+ bezieht. Und die ist ja wie ihr sagt ganz anders.

    Sprich Momentan steuere ich die MT Nutzung wie folgt:
    [Blockierte Grafik: http://fs2.directupload.net/images/150820/24wskvyq.png]

    Je Position ein SetMTMode Befehl im Skript. Wird keine Angabe gemacht wie bei den letzten drei, so wird der letzte SetMTMode verwendet für die entsprechenden Filter. Im Startpost hatte ich diesbezüglich alle angeschaltet.
    MemoryMax steht noch über den SetMTMode und die Threadangabe gilt nur dem erst gesetzten SetMTMode Aufruf.

    So der jetzige Stand.

    Bei AVISynth+ müsst ich dann Quasi für jeden Filter der im Skript verwendet wird quasi eine Mode Angabe machen mit abschließender Prefetch Angabe für die Threadnutzung.

    Quasi so wie ich das halt schon als Beispiel hatte hier

    Wäre das so korrekt in meinem Denk-Beispiel?

    Die Sache ist die... falls es mal soweit sein sollte... dann ist die Funktion schon mal soweit da.

    MT kann ich ja auch komplett Abschalten in mein Programm.
    [Blockierte Grafik: http://fs2.directupload.net/images/150820/qve6hwnd.png]
    Dann ist MT komplett raus aus dem Skript.

    Ich habe das auch schon so gemacht das wenn AVISynth MT nicht installiert ist, sondern das normale, das man die MT Funktion im Programm selbst nicht nutzen kann. Sprich die ist dann ausgegraut.

    Ich kann auch zwischen AVISynth+, AVISynth+ MT, AVISynth und AVISynth MT unterscheiden lassen und entsprechend die Skripte darauf abstimmen.

    Daher war es nur so ein Gedanke das entsprechende Skript was ich im Startpost hatte mit der MT Funktion speziell auf AVS+ abzuändern. Hätte dafür auch ein extra Fenster noch mal gebaut.

    Nur müsst ich dann wissen wie es funktioniert entsprechend. Wenn mein Denk-Beispiel-Skript so klappen sollte wie es gedacht war, dann könnt ich das entsprechend so bauen.


    Mein Programm analysiert halt die fest installierte AVISynth Version. Entsprechend darauf arbeitet dann mein Programm auch. ^^ Daher auch die Idee mit dem AVS+ MT. ^^

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!