AviSynth und QTGMC - Fehlermeldung

  • jup, auch mit RgTools statt RemoveGrain funktioniert es
    mein Pluginordner:

    2016-01-29 19_29_02-plugins.jpg

    das script:

    Code
    video = AVISource("E:\SVHS\1991_06_15_001.avi")
    video = ConvertToYV12(video)
    video = AssumeTFF(video)
    video = QTGMC(video,Preset="slow",NoisePreset="medium",EZDenoise=1.5)
    return video

    bin ich happy nun, aber sowas von......;D

    Bedanke ich mich mal bei Euch für Eure Mithilfe!!!!:encouragement:

    Einmal editiert, zuletzt von frank2000 (29. Januar 2016 um 19:38)

  • Wenn du da noch die avstp.dll mit reintust, soll mvtools angeblich auch multithreaded laufen, selbst unter AviSynth ST.

    Und zu AviSynth MT kommen wir irgendwann auch noch mal. Ansonsten ist QTGMC ja nicht so wirklich "quick" (höchstens im Vergleich zum Original, dem Vorgänger TempGaussMC).

  • zumindest bei der Wiedergabe unter VDub ist keine Beschleunigung zu sehen. Die CPU-Threads werden nur vermeindlich gleichmäßiger ausgelastet:

    script:

    Code
    avstp_set_threads (8)
    video = AVISource("E:\SVHS\1991_06_15_001.avi")
    video = ConvertToYV12(video)
    video = AssumeTFF(video)
    video = QTGMC(video,Preset="slow",NoisePreset="medium",EZDenoise=1.5)
    return video

    mit avstp:

    2016-01-29 21_28_28-VirtualDub 1.9.11 - [1991_06_15_001_test.avs] (dub in progress).jpg

    ohne avstp:

    2016-01-29 21_31_01-VirtualDub 1.9.11 - [1991_06_15_001_test.avs] (dub in progress).jpg

    oder ruf ich die dll im script falsch auf?

  • Dfttest ist intern multi-threaded und ziemlich langsam und maskiert deswegen den Unterschied. Wenn du das Ganze mal ohne Noise-Presets laufen laesst siehst du den Unterschied. Ausserdem ist CPU-Auslastung sekundaer. Was helfen 100% Auslastung wenn das Skript ineffiezient ist. Tipp: Benutze AVSMeter zum Vergleichen von Speed/CPU-Auslastung.

  • bin ich happy nun, aber sowas von......;D
    Bedanke ich mich mal bei Euch für Eure Mithilfe!!!!:encouragement:


    Na prima, besonders weil nicht das Handtuch geschmissen wurde und mit einer 4-Kern CPU mit 8 Thread's sollte es auch mehr Spass machen wie bei meinen Anfängen mit immerhin nur 4-Thread's.
    Der Unterschied zu dem Original wird gut zu sehen sein und jetzt noch verfeinern, die störenden Ränder abdecken durch Letterbox oder durch (Croppen + AddBorder) ersetzen.
    Beim letzteren wird das "Bild" mittig, weil du links mehr abschneiden musst wie rechts, trifft auch auf unten und oben zu.

  • Crop(8, 4,-12,-12).....Addborders(8,4,12,12).....MergeChroma(Crop(0,4,0,0)....wird man da bei dieser "Scriptart" aber nicht weit kommen.

    Das ist zwar hier jetzt OT, weil Problem ja vom Grundsatz her eigentlich gelöst (darf man da hier weitermachen, oder sollte man einen neuen Thread aufmachen?)
    Wie ich schon sagte, ich bin blutiger Anfänger mit AviSynth und Scripterstellung. Deswegen ja auch der Thread hier bei Newbies und nicht bei AviSynth. Von daher interessiert mich schon was mit "dieser "Scriptart"" gemeint ist. Wie sollte das Script (die Scriptart) aussehen bezüglich Anwendung von QTGMC? Mit welcher "Scriptart" komme ich weiter?

    hab nochmal probiert mit und ohne avstp:

    2016-01-30 10_50_21-Administrator_ C__Windows_system32_cmd.exe.png

    der erste Aufruf mit parameter: avstp_set_threads (8)
    der zweite ohne avstp (mit "#" auskommentiert)
    der dritte mit parameter: avstp_set_threads (4)
    alles ohne Denoise (video = QTGMC(video,Preset="slow")#,NoisePreset="medium",EZDenoise=1.5)) DenoisePresets auskommentiert

  • hab nochmal probiert mit und ohne avstp:

    2016-01-30 10_50_21-Administrator_ C__Windows_system32_cmd.exe.png

    der erste Aufruf mit parameter: avstp_set_threads (8)
    der zweite ohne avstp (mit "#" auskommentiert)
    der dritte mit parameter: avstp_set_threads (4)
    alles ohne Denoise (video = QTGMC(video,Preset="slow")#,NoisePreset="medium",EZDenoise=1.5)) DenoisePresets auskommentiert


    Beim ersten Aufruf läuft mvtools2 mit 8 Threads
    Beim zweiten Aufruf läuft mvtools2 ebenfalls mit 8 Threads
    Beim dritten Aufruf läuft mvtools2 mit 4 Threads

    cretindesalpes' mvtools2 2.6.0.5 benutzt avstp.dll zum Multi-Threading wenn sie sich im gleichen Verzeichnis befindet. Ohne die Angabe von "avstp_set_threads()" wird die Anzahl der logischen CPU-Kerne gesetzt. Um mvtools2 ohne avstp zu testen musst du die Datei löschen oder umbenennen (z.B. "avstp.dl").

  • Falls es da bloß um den Stil geht ... technisch ist es nicht relevant, ob man das Skript so schreibt, dass explizit eine benannte Skript-Variable verkettet wird, oder man implizit auf die interne Skript-Variable "last" vertraut, die immer dann zum Einsatz kommt, wenn im Skript keine Zuweisung und kein Quell-Clip verwendet werden.

    Also statt

    Code
    avstp_set_threads(8)video = AVISource("E:\SVHS\1991_06_15_001.avi")video = ConvertToYV12(video)video = AssumeTFF(video)video = QTGMC(video,Preset="slow",NoisePreset="medium",EZDenoise=1.5)return video


    könnte man auch vereinfachen

    Code
    avstp_set_threads(8)AVISource("E:\SVHS\1991_06_15_001.avi")ConvertToYV12()AssumeTFF()QTGMC(Preset="slow",NoisePreset="medium",EZDenoise=1.5)


    weil AviSynth das intern ausführen würde wie

    Code
    avstp_set_threads(8)[I][COLOR='#33CC99']last =[/COLOR][/I] AVISource("E:\SVHS\1991_06_15_001.avi")[I][COLOR='#33CC99']last =[/COLOR][/I] ConvertToYV12([I][COLOR='#33CC99']last[/COLOR][/I])[I][COLOR='#33CC99']last =[/COLOR][/I] AssumeTFF([I][COLOR='#33CC99']last[/COLOR][/I])[I][COLOR='#33CC99']last =[/COLOR][/I] QTGMC([I][COLOR='#33CC99']last[/COLOR][/I],Preset="slow",NoisePreset="medium",EZDenoise=1.5)[I][COLOR='#33CC99']return last[/COLOR][/I]

    Manchmal sind explizite Clip-Variablen notwendig, v.a. beim "Nicht-Linearen Editieren" (NLE), wenn mehrere Zwischenstufen später noch zu einer Mischung kombiniert werden. Dein Skript ist aber soweit ganz linear aufgebaut, da sind Verkettungen und Verschachtelungen leichter zu erreichen, wenn man implizit schreibt und im Hinterkopf behält, dass das dann alles auf einen Standard-Clip angewendet wird, der aber hier nicht näher benannt wird.
    __

    Was nun den praktisch nicht vorhandenen Geschwindigkeitsunterschied angeht ... avstp beschleunigt nur einen kleinen Anteil am gesamten QTGMC-Skript. Aber ausgerechnet ein ziemlich langsamer Anteil wird immer noch nur in einem Thread ausgeführt. — Ich habe ja geschrieben, man müsse testen, ob Rauschminderung mit dfttest im Vergleich zu FFT3D vielleicht zu langsam wäre. — Deutliche Verbesserung würde wahrscheinlich nur die Verwendung von AviSynth MT (oder AviSynth+ MT, was aber z.Z. gerade mit so komplexen Skripten wie QTGMC immer noch sehr fehlerhaft ist) bringen, oder noch radikaler: VapourSynth statt AviSynth (hier ist QTGMC sogar als eigenes Plugin verfügbar, anstatt als Import-Skript vieler einzelner Spezial-Plugins).
    __

    Noch ein Themenwechsel...

    Falls du auf AviSynth 2.60 MT von SEt umsteigen möchtest, solltest du beachten, dass du es mit der Anzahl Threads nicht übertreiben darfst, weder für die Parallel-Ausführung von QTGMC insgesamt noch für die Parallelisierung einzelner Komponenten (sonst multipliziert sich die Thread-Anzahl, und dann warten alle nur noch aufeinander). Bei einem intel Quad-Core mit HyperThreading werden 8 logische Kerne erkannt, aber 8 Threads sind definitiv zu viele, man sollte auf vielleicht 3 oder höchstens 4 begrenzen. Dazu zählen folgende Stellen:

    •  SetMTMode(mode, skript_threads) beim ersten Aufruf vor dem Quellfilter (bei dir: AviSource)
    •  avstp_set_threads(avstp_threads) für die Parallelisierung der MVTools nicht verwenden bei AviSynth MT
    •  QTGMC(..., EDIThreads=edi_threads) für die "Edge Directed Interpolation" (Vergrößerung mit Kantenschutz innerhalb von QTGMC); dfttest verwendet übigens ebenso viele eigene Threads wie NNEDI3, außer man definiert das mit QTGMC(..., DftThreads=dft_threads) anders

    Ein Skript mit SetMTMode(3, 4) und QTGMC(..., EDIThreads=3) würde also in 4 parallelen Threads zur Ausführung des Skriptes jeweils NNEDI und dfttest mit 3 eigenen Threads für sich parallel ausführen, wodurch in diesen Momenten dann bis zu 4*3=12 Threads parallel arbeiten könnten (plus eine AviSynth-Basis, z.B. zur Ausgabe des Ergebnis-Videos). Mit 8 logischen Kernen ist das schon eine gewisse Verwaltungsarbeit für das Betriebssystem, und der RAM füllt sich...

    Der Umstieg auf AviSynth 2.60 MT an sich ist simpel: Man ersetzt einfach die avisynth.dll im 32-bit-Systemverzeichnis (unter einem 64-bit-Windows also SysWOW64); solange man in seinem Skript nicht mit SetMTMode(mode, skript_threads) einen Multi-Threading-Modus auswählt, sollte sich diese Version genauso verhalten wie das herkömmliche AviSynth 2.60 ST.

    Das Ergebnis wäre dann wohl:

  • Was nun den praktisch nicht vorhandenen Geschwindigkeitsunterschied angeht ... avstp beschleunigt nur einen kleinen Anteil am gesamten QTGMC-Skript. Aber ausgerechnet ein ziemlich langsamer Anteil wird immer noch nur in einem Thread ausgeführt.


    Bei mir ist der Unterschied deutlich, ich benutze allerdings nicht die QTGMC() DeNoise-Funktionen sondern einen GPU-Denoiser(KNLMeansCL).

  • Falls du auf AviSynth 2.60 MT von SEt umsteigen möchtest, solltest du beachten, dass du es mit der Anzahl Threads nicht übertreiben darfst, weder für die Parallel-Ausführung von QTGMC insgesamt noch für die Parallelisierung einzelner Komponenten (sonst multipliziert sich die Thread-Anzahl, und dann warten alle nur noch aufeinander). Bei einem intel Quad-Core mit HyperThreading werden 8 logische Kerne erkannt, aber 8 Threads sind definitiv zu viele, man sollte auf vielleicht 3 oder höchstens 4 begrenzen. Dazu zählen folgende Stellen:

    •  SetMTMode(mode, skript_threads) beim ersten Aufruf vor dem Quellfilter (bei dir: AviSource)
    •  avstp_set_threads(avstp_threads) für die Parallelisierung der MVTools
    •  QTGMC(..., EDIThreads=edi_threads) für die "Edge Directed Interpolation" (Vergrößerung mit Kantenschutz innerhalb von QTGMC); dfttest verwendet übigens ebenso viele eigene Threads wie NNEDI3, außer man definiert das mit QTGMC(..., DftThreads=dft_threads) anders

    Ein Skript mit SetMTMode(2, 4) und QTGMC(..., EDIThreads=3) würde also in 4 parallelen Threads zur Ausführung des Skriptes jeweils NNEDI und dfttest mit 3 eigenen Threads für sich parallel ausführen, wodurch in diesen Momenten dann bis zu 4*3=12 Threads parallel arbeiten könnten (plus eine AviSynth-Basis, z.B. zur Ausgabe des Ergebnis-Videos). Mit 8 logischen Kernen ist das schon eine gewisse Verwaltungsarbeit für das Betriebssystem, und der RAM füllt sich...


    Alles richtig aber mit AVS MT sollte avstp.dll nicht benutzt werden. Die beiden spielen überhaupt nicht gut zusammen.

  • Nun schneller machen:
    Hab die dll von AviSynth MT (20150220) mal ins SysWOW64 -Verzeichnis kopiert, Script geändert:

    Code
    SetMemoryMax(1024)
    SetMTMode(3, 4)
    AVISource("E:\SVHS\1991_06_15_001.avi")
    ConvertToYV12
    AssumeTFF
    SetMTMode(2)
    QTGMC( Preset="slow")

    Ergebnis:

    2016-01-30 12_17_48-Administrator_ C__Windows_system32_cmd.exe.png

    sieht schon besser aus (average Framerate verdoppelt)
    Das kam jetzt paralell zu Euren Beiträgen. Ich werde Eure Tips aufgreifen und mal etwas rumprobieren

    Einmal editiert, zuletzt von frank2000 (30. Januar 2016 um 12:40)

  • ^ schaut bitte nochmal durch, hatte noch einiges editiert. Da sollte dann wohl avstp_set_threads(3) aus dem letzten "Ergebnis"-Skript gestrichen werden.

    Insbesondere fiel mir noch ein, wenn die Quelle von VHS stammt, dann könnte es wichtig sein, das Interlacing beim Konvertieren nach YV12 zu beachten, sonst kann es bei Bewegungen Mischfarben geben.
    _

    Dazu noch'n P.S.:

    QTGMC v3.33 (ff.) wollte ja dafür sorgen, dass auch Chroma-Subsampling 4:2:2 unterstützt wird. Und da AviSynth 2.60 nun auch das planare YUV-4:2:2-Format YV16 beherrscht, kann man sich theoretisch das Herumgerechne zwischen dem pixelgepackten YUY2 und einer planaren Hack-Version sparen. Ob das aber praktisch schon sauber läuft, weiß ich noch nicht aus eigener Erfahrung. Jedenfalls wäre die Umrechnung in YV12 gleich am Anfang (was für QTGMC 3.32 und früher noch nötig war) eigentlich gleich eine Qualitätsverschlechterung.

  • Ich meinte eher: ConvertToYV16() statt ConvertToYV12(interlaced=true) ... aber bisher hab ich das selber noch nicht probiert.

    Kann sein, dass nach QTGMC noch mal nach YV12 konvertiert werden muss, um es dann an einen Encoder zu schicken; dann ist das Ergebnis aber schon progressiv, also keine Sorgen mehr wegen Interlaced-Mischfarben.

  • Also in YV16 arbeitet QTGMC bei mir nicht korrekt, und so weit ich weiß wird auch nach wie vor tatsächlich nur YUY2 (neben YV12) unterstützt – war also zu erwarten.

    Gerade getestet mit "v3.33s (mod) 2016 01 19": YUY2 alles normal; YV16 Chroma völlig fehlerhaft (wie in frank2000s Screenshot), aber keine Fehlermeldung.

  • MVTools für VapourSynth unterstützt planares YUV 4:2:2 angeblich bereits im Quelltext, muss nur als DLL veröffentlicht werden; ob das dann auch für die AviSynth-Variante gelten wird, wäre dann wieder nach Erscheinen einer aktuellen Version davon zu testen. Bis dahin aber müssen wir wohl noch etwas bei YV12 und evtl. YUY2 + Planar-Hacks bleiben.

  • Kann es sein, daß das Script QTGMC ab und zu mal die Halbbildreihenfolge vertauscht (statt TFF dann auf einmal BFF)? In dem konvertiertem Video sind ab und zu Sprünge (Ruckler) drin (sporadisch verteilt). In Einzelbildschaltung sieht man dann, daß die Halbbildreienfolge vertauscht ist. Gerade bei Schwenks ist daß dann deutlich zu sehen.

Jetzt mitmachen!

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