Einsatz von Seesaw mit MT macht Probleme

  • Hallo,

    folgendes Script habe ich nach Hinweisen hier und bei Doom9 im Test:

    Mit dem Ergebnis bin ich sehr zufrieden, aber leider kommt es zu unregelmäßigen Abstürzen beim x264 Encoding.

    Mal läuft ein Video durch, dann wieder Abbruch, bei verschiedenen Abarbeitungsständen jeweils beim gleichen Film.

    Die Fortschrittsanzeige von Staxrip hält an, der Encoder läuft unter Auslastung eines CPU-Kernes weiter, tut aber eigentlich nichts mehr, zumindest wird nichts mehr auf die Platte geschrieben.

    Erstmal habe ich einen (unwahrscheinlichen) Fehler der Oberfläche ausgeschlossen = analoges Problem unter Megui.

    Dann nocht diverse Tests mit z.B. verschiedenen Avisynth-Varianten (2.58, 2.60), den Encoder aktualisiert, verschiedene SetMtMode-Einstellungen getestet, auf SSse3 verzichtet, ....

    Der Fehler bleibt konstant erhalten, es sei denn ich lasse nur SetMtMode(5) stehen, dann läuft die Verarbeitung durch, allerdings mit unterirdischem Tempo.

    Ein ähnliches Script mit LSFMod anstelle Seesaw läuft ohne Probleme, auch eine reduzierte Variante nur Mdegrain oder Mdegrain + fft läuft ebenfalls durch.

    Leider habe ich es mit LSFMod noch nicht geschafft nah genug an das Ergebnis von Seesaw ranzukommen, dann könnte ich ja dabei bleiben.

    Im Moment habe ich jedenfalls keine Idee was ich noch versuchen könnte bzw. woher das Problem kommt. Nachdem was ich gelesen habe müsste Seesaw ja grundsätzlich für MT geeignet sein.

    Beste Grüße Michael

  • Hmm. Ein ausdrücklicher Fehler ist nicht zu sehen. Allerdings ... ist das auch nicht das komplette Script, es wird ja kein Quellvideo geladen. Nehme mal an, dieses Script wird per Import() an passender Stelle in einem Hauptscript geladen?

    Mal kontrollieren, dass:

    - am Anfang des Hauptscriptes ein SetMemoryMax() angegeben wird, mit ca. 512 oder so (manche Avisynth-Versionen haben da nen Bug, und ohne SMMax knallt's irgendwann)
    - am Ende des Hauptscriptes ausdrücklich ein Return(last) steht - wegen der automatischen Distributor-Geschichte, Erfahrung hat gezeigt mit Return(last) ist's besser, keine Ahnung warum
    - Wieviel Threads werden ursprünglich im Hauptscript definiert? Im Zweifelsfall mal auf 4 Threads reduzieren/begrenzen, und dan mal sehen

    Überhaupt, warum ist eigentlich nur der MVTools-Teil unter Multithreading? Würde eigentlich auch den FFT3D und SeeSaw mit unter den MTMode(2) nehmen, speziell FFT3D profitiert davon. Und - so wie es jetzt da steht, läuft SeeSaw ja sowieso nur in einem einzigen Thread, ganz ohne MT.

    Uuuund ... was ist der Quellfilter? Falls das zufällig DGDecodeNV sein sollte: das hat sowieso gerne mal Probleme mit Multithreading im Script.

  • Hallo Didée,

    schonmal vielen Dank für die Hinweise, da fehlt tatsächlich was, sorry.

    Da ich mit Staxrip arbeite habe ich in den Einstellungen die Angaben hinterlegt welche immer am Anfang auszuführen sind.

    Das aufrufende Script sieht dann z.B. so aus:

    LoadPlugin("G:\StaxRip\Applications\DGMPGDec\DGDecode.dll")
    SetMemoryMax(512)
    SetMTMode(5)

    MPEG2Source("H:\Vob\Film1\SZ_32\VIDEO_TS\VTS_01_1 temp files\VTS_01_1.d2v")
    Crop(0,0, -Width % 8,-Height % 8)
    ConvertToYV12()
    Crop(0,86,-0,-90)
    Import("g:\Staxrip\Avisynth\sswfft.avsi")

    Der letzte Importbefehl ruft dann das zuerst genannte Script auf.

    Davon ausgehend sollte die Problematik mit dem Speicher ausgeschlossen werden können.

    In der aktuellen Variante (liegt auf meinem "Rechenknecht" und war daher hier nicht mit dabei) gibt es auch leider schon die Anweisung Return(last) am Ende, das hatte ich beim Durchsuchen des Forums gefunden mit dem von Dir genannten Hinweis, kann sogar sein, dass das von Dir stammte.

    Die Reduktion auf 4 Threads kann ich noch versuchen. Allerdings habe ich das ganze schon auf zwei Rechnern getestet, einmal Zweikern, einmal Vierkern, jeweils Ivy Bridge (vielleicht liegt hier das Problem?). Der Vierkernrechner sollte mit 8 Threads normalerweise arbeiten, der andere mit 4, soweit mit meine Architekturkenntnisse da nicht im Stich lassen.

    Den MtMode(2) hatte ich schon an verschiedenen Stellen stehen (auch den Mode 3). Seltsamerweise hatte ich eine höhere Framerate wenn Mode 2 nach FFT3D stand. Das war aber in einer anderen Evolutionsstufe des Scripts, daher werde ich das ebenfalls noch ändern.

    Was mir noch einfällt: Crop ist nicht Mod 16, wäre vielleicht auch noch einen Versuch wert?

    So läuft jetzt und sieht wie folgt aus:

    LoadPlugin("G:\StaxRip\Applications\DGMPGDec\DGDecode.dll")
    SetMemoryMax(512)
    SetMTMode(5,4)

    MPEG2Source("H:\Vobneu\MainMovie\DRAGONHEART\VIDEO_TS\VTS_01_1 temp files\VTS_01_1.d2v")
    Crop(0,0, -Width % 8,-Height % 8)
    ConvertToYV12()
    Crop(0,74,-4,-74)
    Import("g:\Staxrip\Avisynth\sswfft.avsi")


    Das aufgerufende Script (mal wieder ohne Sse3):

    Ich hatte das zwischenzeitlich reinkopiert, auch wegen der Tests mit AVSP. Soothe hatte ich entfernt, da nicht von mir genutzt.

    Gruß Michael

  • Beide abgestürzt, einmal wie oben, einmal mod16, einmal bei 10%, einmal immerhin bei 16%.

    Zum debuggen gibt es ja vermutlich nichts passendes? Zumindest hätte ich nichts gefunden.

    Vielleicht lasse ich noch eine Windows-Neuinstallation laufen, man greift ja nach jedem Strohhalm :).

    Ansonsten habe ich mal ansatzweise versucht die beiden Scripte im Editor nebeneinander zu legen (Seesaw und LSFMOd) und zu vergleichen, was für mich aber schwerer Tabak ist. Eventuell macht der Ansatz Zug um Zug Teile wegzulassen mehr Sinn, auch wenn es dann inhaltlich sicher nicht immer einen Sinn ergibt.

  • Hallo
    hab zwar kein Staxrip und auch nur die Vorversion von IvyBridge und normale 8 Kerner,aber statt
    RemoveGrainSSE3.dll")
    RepairSSE3.dll")
    hätte ich die Version "2" eingesetzt.

    und nicht die

    RemoveGrainS.dll")
    RepairS.dll")

    Der "Sprung" von
    mt_masktools-26.dll")
    zur
    mt_masktools-25.dll")
    ist mir auch aufgefallen.
    Didée wie auch User LigH habens zwar mal erklärt wo man welche Version einsetzen sollte,verstanden habe ichs damals aber geklappt hats dann doch mit der "25"
    unter Avisynth 2.60.

    Datenrettungen Normwandlungen Restaurierungen Digitalisierungen

  • Hallo,

    die Removegrain-Versionen habe ich schon alle durch, leider, sowohl die 3er, die 2er als auch die statisch verlinkten.

    Der Sprung bei den Masktools hängt tatsächlich mit der eingesetzten Avisynth-Variante zusammen, bei 2.58 hatte ich die 25, bei 2.60 die 26 eingesetzt.

    Witzigerweise habe ich gerade einen Film zu 100% umwandeln können.

    Ich habe angefangen Funktionsteile ausser Gefecht zu setzen in der Hoffnung Zug um Zug den problematischen Teil zu isolieren.

    Der Funktionsaufruf war jetzt wie folgt:

    sharp0 = source.Seesaw(denoised=preNR, nrlimit=0, nrlimit2=99, bias=49, sstr=1.24, Spower=3, Szp=12, Sdamplo=4, SdampHi=19, Slimit=99, sootheT=0, sootheS=0)

    Es wurde der Parameter denoised hinzugefügt.

    Daher ist folgende Zeile jetzt anders verarbeitet worden:

    denoised = defined(denoised) ? denoised : mt_lutxy(clp,clp.removegrain(4,-1),"x "+NRL+" + y < x "+NRL+" + x "+NRL+" - y > x "+NRL+" - y ? ?",chroma="copy first")

    Wenn ich die Syntax korrekt interpretiere wird der zweite Teil hinter dem Fragezeichen nun nicht mehr ausgeführt.

    Leider ist ein Film zu 100% noch kein verlässlicher Anhaltspunkt, das passiert auch so hin und wieder. Daher habe ich gleich zwei weitere auf den Weg gebracht. Falls die beiden ebenfalls durchlaufen ist die Wahrscheinlichkeit relativ hoch, dass hier das Problem liegt /lag.

    Gruß Michael

  • Zitat

    die Removegrain-Versionen habe ich schon alle durch,

    dann müsstest Du ja ein Archiv haben wie ich hier..........grauenhaft was da so rumliegt.
    Aktuell sind diese Beiden.


    und hier marschiert mt_masktools-25.dll" [944 KB vom 31.12.2010]
    mit Avisynth 2.60.
    Ansonsten kann ich zu Deinem Scripts nichts beitragen,da ist Didée gefragt.

    Bin aber trotzdem gespannt was Du aus dieser Quelle [Verpackung=VOB]
    mit filtern rausbekommen hast,da ich ja regelmässig DVDs bekomme die
    früher User von ihren billigen Kombi-VHS/DVD produziert hatten.

    Datenrettungen Normwandlungen Restaurierungen Digitalisierungen

  • Die Kombi mt-25 und Avisynth 2.60 lief bei mir auch grundsätzlich, in diesem Fall aber auch mit Abbruch wie beschrieben.

    Wenn ich hiermit durch bin werde ich auch erstmal aufräumen müssen, da ich einiges von den Staxrip-Applicationen kreuz und überschrieben habe.

    Analog habe ich nicht mehr viel, die meisten Sachen gab es irgendwann auf DVD, mir fehlen nur noch zwei Filme (Shadowhunter, Der tödliche Kreis). Das letzte was ersetzt wurde war das blaue Palais, die Qualität könnte da aber besser sein, auf Welt am Draht und Das Millionenspiel musste ich auch lange warten.

    Ansonsten ist es eine ziemlich umfangreiche DVD-Sammlung mit geringen HD-Anteilen. Meine ersten Versuche zum Umwandeln habe ich abgebrochen, da trotz übertaktetem Vierkern eine Hochrechnung eine Laufzeit von 2 Jahren ergab bei gegebenem Script-Grundgerüst. Vor allem der Stromverbrauch des übertakteten Rechners war nicht ohne. Die Idee das originale Mpeg2-Video in MKV-Container zu packen war auch nicht ideal, das ging zwar, auch sehr schnell, mir waren aber über 30 Terrabyte dann doch zu viel.

    Das sieht heute alles besser aus. Mit einem Core i5 und 4x3,8 komme ich beinahe auf Echzeit (22-25fps), ohne Übertaktung, ca. 45 Watt Stromverbrauch. Selbst preisweite Upscaler (Panasonic Uniphier Pro im entsprechenden Blu Ray Player, MKV-tauglich) unterscheiden sich, sofern man nicht großartig einstellen möchte, kaum noch von einem dedizierten Upscaler (Radiance + DVDO). Im Moment spiele ich mit einem Apple TV3 rum und wundere mich was so ein Kästchen bei 2-3 Watt Verbrauch leistet im Vergleich zum Beispiel zu einem HTPC mit MadVR, der natürlich viel mehr kann, wenn man es möchte.

    Daher auch der jetzige Versuch, das nochmal in Angriff zu nehmen und die Scheiben nur noch wie bei der Musik auch als Notreserve im Schrank zu lagern.

  • Ich versuche gerade den folgenden Ausdruck aus Seesaw zu verstehen:

    denoised = defined(denoised) ? denoised : mt_lutxy(clp,clp.removegrain(4,-1),"x "+NRL+" + y < x "+NRL+" + x "+NRL+" - y > x "+NRL+" - y ? ?",chroma="copy first")

    Hierzu habe ich mir die UPN-Beschreibung durchgelesen und versucht den String in mt_lutxy() umzuformulieren.

    Davon ausgehend, dass beim Aufruf NRLIMIT = 0 ist ergibt sich (hoffentlich) folgendes:

    "x < y ? x : x > y ? x : y"

    Ich hoffe nicht ganz soweit weg zu sein, Klammern und Operatorprioritäten mal aussen vor. Jedenfalls käme dann immer x raus, also das Pixel des ersten Clips wenn ich es halbwegs richtig verstanden haben sollte?

    Und wenn x = y dann gar nichts?

    Das Thema scheint gar nicht so einfach.

  • Du kannst deine eigenen Doppelposts auch "Bearbeiten" und dann "Löschen"... hab ich nun getan.
    __

    Wichtig bei den DLLs von RemoveGrain / Repair ist: Bitte nicht alle in das AviSynth-plugins-Verzeichnis entpacken, wo sie alle automatisch geladen werden würden, und die defekte SSE3-Version dann abstürzt.

    Die MaskTools2-Variante '-25' sollte sich in AviSynth 2.5x und 2.6x laden lassen; Variante '-26' wird wohl die zusätzlichen Pixelformate von AviSynth 2.6x unterstützen, also in AviSynth 2.5x nicht funktionieren.

  • Ist schon richtig, hast Du korrekt aufgelöst. NRLimit gibt ja vor, plus/minus wieviel Änderung-per-Pixel maximal vom Denoised-Clip (an der Stelle: ==> RemoveGrain(4)) auf den Original-Clip übernommen werden soll. Und wenn NRLimit=0, dann wird eben eine maximale Änderung von Null übernommen, also keine Änderung zum Original.

    Sicher, dieser Spezialfall hätte eleganter gelöst werden können, über eine weitere Abfrage ob NRLimit Null ist, so wie es z.B. weiter unten im Script ja auch gemacht wird:

    Code
    (NRlimit==0) ? clp : \
    mt_lutxy(clp,NRdiff, "y 128 "+NRL+" + > x "+NRL+" - y 128 "+NRL+" - < x "+NRL+" + x y 128 - - ? ?",chroma="process")

    Vermutlich war's mir einfach egal (oder ich war zu faul) als ich das Script zusammengeschrieben habe. Erstens kommt ja trotzdem das richtige raus, zweitens ist ein zusätzliches LutXY ziemlich nebensächlich was den Rechenaufwand angeht, und drittens dürfte NRLimit=0 sowieso ziemlich selten vorkommen, weil's von vornherein nicht sonderlich sinnvoll ist ... bzw anders, die Idee war dass ein wenig von dem RemoveGrain(4) immer angewendet werden sollte, um vorhandenes Rauschen nicht zu sehr zu schärfen.

  • Hallo Didée,

    das sollte keine Kritik sein, bitte nicht falsch verstehen, ich wollte nur sehen ob ich das halbwegs interpretiert bekomme.

    Interessieren würde mich allerdings wieso nur ausschließende Intervallgrenzen, also größer und kleiner und nicht wenigstens einmal mit gleich versehen, vorkommen, hätte ich halt anders erwartet, das muss aber in diesem Zusammenhang nicht viel bedeuten :-).

    LigH: Die Dll-Dateien liegen alle separat und werden explizit referenziert, bis auf die beiden die bei der Installation reinkopiert worden sind.

    Ansonsten arbeite ich im Moment nach dem Außschlussprinzip weiter, im Moment sieht es so aus, also ob der Aufruf von Removegrain in der genannten Zeite die Ursache sein könnte, speziell der Parameter -1, was aber noch nicht sicher ist.

    Gruß Michael

  • Als Kritik hab ich das auch gar nicht aufgefasst. Hab halt nur etwas über das warum-weshalb-wieso herumgebrummelt. Und überhaupt, das zieht sich wohl wie ein roter Faden durch die meisten meiner Scripte: Genau gearbeitet wird da wo's nötig ist - und da wo's nicht weiter weh tut, da dürfen die Hemdsärmel auch gerne offen bleiben. Außerdem komm ich meistens eh nur bis an den Punkt "Methode -> funktrioniert? ==> Jaa, funktioniert!!" - Der weitere Rattenschwanz mit Optimierung, Feintuning, und Absicherungen gegen Falscheingaben ist dann immer so lästig, da braucht's keine Kreativität, nur viel Fleißarbeit, und da mag ich dann meistens nimmer weitermachen. ;)

  • Scheint endlich geklärt.

    Nach diversen unfruchtbaren Vermutungen und Analyseschritten hat sich die verwendete Removegrain-Version (1.0) als Übeltäter herausgestellt. Nach dem Wechsel auf die Version 0.9 läuft das Script jetzt ohne weitere Probleme, unabhängig der Avisynth-Version usw..

    In Erinnerung habe ich, dass es mal Probleme mit Sse in den neueren Versionen gab, das Phänomen hier trat aber auch mit der nicht Sse-Variante auf. Hauptsache es läuft jetzt und ich kann mich dem Vergleich von MDegrain2 und MDegrain3 widmen :-).

Jetzt mitmachen!

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