4K UHD Denoising mit FFT3DGPU,FFT3DFilter,neo_fft3d (Performance,Bugs,VapourSynth-Umsetzung,...)

  • Ne, sollte nicht schwer sein.

    Man lädt die dll avs.LoadPlugin(..)

    Code
    core.avs.LoadPlugin(path="i:/Hybrid/64bit/Avisynth/avisynthPlugins/<NAME der DLL>.dll")

    und greift dann später über avs.FilterName(...) auf den Filter zu:

    Code
    clip = core.avs.<NAME des FIlters>(clip=clip)

    Bei YUY2 oder RGB32 muss man noch mehr machen.

    siehe: http://www.vapoursynth.com/doc/functions/…dpluginavs.html

    Aber 0-Ahnung und Erfahrung wie das mit Filtern ist die zusätzliche Abhängigkeiten haben.

    Vermute ein die können wie gehabt mit LoadDLL geladen werden.

    Nebenbei: wenn man GPU Filter nutzt kann gerade in Avisynth sinnig sein die Threadanzahl zu senken.

    Cu Selur

  • Hier mal ein Beispiel mit FFT3DGPU:

    der wichtige Teil ist:

    Code
    import ctypes
    # Loading Support Files
    Dllref = ctypes.windll.LoadLibrary("i:/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
    Dllref = ctypes.windll.LoadLibrary("i:/Hybrid/64bit/Avisynth/avisynthPlugins/d3d9.dll")
    # Load FFT3DGPU
    core.avs.LoadPlugin(path="i:/Hybrid/64bit/Avisynth/avisynthPlugins/FFT3dGPU.dll")
    # Use FFT3DGPU
    clip = core.avs.fft3dGPU(clip)

    Cu Selur

  • Kleiner 'Trick' noch, wenn man sich unsicher ist wie der Name ist unter den man einen Avisynth-Filter findet.

    Mit:

    Code
    clip = core.text.Text(clip=clip,text=', '.join(map(str, dir(core.avs))),scale=1)

    werden auf dem Bild alle Funktionen im 'core.avs'-Namensraum angezeigt. :)

    Cu Selur

  • Zitat

    Code

    1. import ctypes
    2. # Loading Support Files
    3. Dllref = ctypes.windll.LoadLibrary("i:/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
    4. Dllref = ctypes.windll.LoadLibrary("i:/Hybrid/64bit/Avisynth/avisynthPlugins/d3d9.dll")
    5. # Load FFT3DGPU
    6. core.avs.LoadPlugin(path="i:/Hybrid/64bit/Avisynth/avisynthPlugins/FFT3dGPU.dll")
    7. # Use FFT3DGPU
    8. clip = core.avs.fft3dGPU(clip)

    Bei 8. gehören dann die Parameter in der selben schreibweise wie beim Avisynth Skript rein?

    Und mal noch ne Verständnisfrage: Wird der Name der Funktion (fft3dgpu) bei 8. dadurch definiert, dass bei 6. der Name der DLL "FFT3dGPU.dll" ist? Oder könnte da genausogut clip = core.avs.HansWurst(clip) stehen, weil immer eine DLL geladen wird, dann verwendet wird, danach evtl. eine andere geladen wird und diese dann verwendet wird (wenn man mehrere AviSynth-Filter kombinieren würde)

  • Zitat

    Bei 8. gehören dann die Parameter in der selben schreibweise wie beim Avisynth Skript rein?

    Denke schon, habe nirgendwo etwas anderes gelesen soweit und nutze das normalerweise nicht.

    Zitat

    Und mal noch ne Verständnisfrage: Wird der Name der Funktion (fft3dgpu) bei 8. dadurch definiert, dass bei 6. der Name der DLL "FFT3dGPU.dll" ist? Oder könnte da genausogut clip = core.avs.HansWurst(clip) stehen, weil immer eine DLL geladen wird, dann verwendet wird, danach evtl. eine andere geladen wird und diese dann verwendet wird (wenn man mehrere AviSynth-Filter kombinieren würde)

    siehe meinen letzten Post,...

  • Hat sich überschnitten...

    Die Funktionsnamen werden durch die DLL erzeugt/verfügbar gemacht und sind damit identisch wie in AviSynth, oder?

    (Dort heißt der aufruf ja auch fft3dgpu(...) )

    Also die DLL an sich legt fest wie die Funktion heißt, nicht der Name der DLL.

    Muss jetzt mal eben was essen, die Murmel arbeitet mit Hunger irgendwie auf Sparflamme...

  • Zitat

    Also die DLL an sich legt fest wie die Funktion heißt, nicht der Name der DLL.


    Genau. Haken an der Geschichte: bei Avisynth ist Groß&Kleinschreibung egal, bei Vapoursynth nicht.

    Darum der Tipp von mir wie man die Funktionen sehen kann die in einem Namensraum (hier core.avs) sind.

    Cu Selur

  • Hab mal folgende RUN_FFT3DGPU_VS.BAT erstellt.

    Sie lädt folgendes VapourSynth-Skript RUN_FFT3DGPU_VS.VPY

    Pfade in den Skripten müssen angepasst werden.

    Im Ordner der .bat Datei muss sich eine "4k-Testclip.mp4" befinden.

    Bricht mit folgender Meldung ab:

    Wenn ich das argument clip=clip hinzufüge wird dieses abgelehnt. Das Argument C1 fehlt, was auch immer das ist, noch nicht rausgefunden...

    (Bei den Dateien im Anhang musste ich die Endung .txt hinzufügen, damit das Forum es akzeptiert hat)

  • Zitat

    fft3dGPU: argument c1 is required

    Hmm,...

    Code
    FFT3dGPU(PClip cl1, float _sigma, float _beta, int _bw, int _bh, int _bt, float sharpen, int _plane, int _mode, int border, int precision,
     bool NVPerf, float _degrid, float scutoff, float svr, float smin, float smax, float kratio, int ow, int oh, int wintype, bool interlaced,
     float _sigma2, float _sigma3, float _sigma4, FFTCODE fftcode,
     FFT3dGPUallPlane* getdst, int _xRatio, int _yRatio, IScriptEnvironment* env);

    Quelle: https://github.com/pinterf/FFT3dG…/FFT3dGPU.h#L67

    -> keine Ahnung, sehe keinen c1-Parameter, da müssteste pinterf oder Myrsloik fragen,....

    Code
    clip = core.avs.fft3dGPU(bw=64,bh=64,plane=4,mode=2,bordersize=0,precision=1)

    Ist aber auf jeden Fall falsch, da wird der Clip nicht übergeben,...

  • Ich glaub mit diesem Aufruf scheint's zu laufen:

    Zitat

    clip = core.avs.fft3dGPU(clip, bw=64,bh=64,plane=4,mode=2,bordersize=0,precision=1)

    Weiß der Geier was der Argument C1 Fehler sollte.

    Irgendwie bin ich mir aber nicht ganz sicher, ob da jetzt wirklich was filtert...

  • Zitat

    Die reinen VapourSynth Filter haben am Beginn des Aufrufs immer clip=clip,...

    Ne, gibt auch Filter bei denen die erste 'clip'-Variable nicht clip heißt. ;)

    Kann der Filter-/Skriptschreiber benennen wie er will.
    'clip' hat sich nur 'eingebürgert' weil es leicht verständlich ist. :)

    Zitat

    Keine Ahnung warum's jetzt nur mit clip,... losgelaufen ist...

    Ohne 'clip' konnte es nicht gehen,.. :)

  • 1.)

    Ich sammle gerade einige 4K Benchmarks die fft3dgpu bei AviSynth und VapourSynth jeweils mit LSmash und ffindex vergleichen.

    Was sich bis jetzt abzeichnet, ist dass fft3dgpu mit VapourSynth tendenziell je nach Anzahl der MT-threads, mode, bw/bh und input file 7-12% schneller ist.

    Ich will den Vergleich vernünftig machen, weswegen ich immer erst teste mit wie vielen MT-Threads jeweils bei AviSynth bzw. VapourSynth der höchste Speed erreicht wird.

    Es scheint so zu sein, dass:

    A) fft3dgpu Von mehr als 1-3 MT-threads kaum profitiert. Bei AviSynth gibt's dann sogar teils deutliche Geschwindigkeitseinbußen. Bei VapourSynth sind bei mehr Threads die Geschwindigkeitseinbußen nur geringfügig oder nicht vorhanden

    B) tendenziell VapourSynth mit 1-2 MT-threads mehr als AviSynth die höchste Geschwindigkeit erreicht.

    Ob man LSmash oder ffindex als source Filter verwendet macht i.d.R. wohl nur einen marginalen Unterschied, weswegen ich die jetzt nicht mehr weiter untereinander vergleichen werde.

    2.)

    Zum Thema Bildfehler bei bestimmten Konstellationen hauptsächlich im Mode 2: Diese verschwinden leider auch bei der Nutzung von VapourSynth nicht :(

    7 Mal editiert, zuletzt von mogobime (2. Mai 2022 um 01:48) aus folgendem Grund: Verschiedene Ergänzungen zu MT-Threads/Speed und Bildfehler im Mode 2

  • Zitat

    Zum Thema Bildfehler bei bestimmten Konstellationen hauptsächlich im Mode 2: Diese verschwinden leider auch bei der Nutzung von VapourSynth nicht

    Okay, das war zu erwarten, da sich die Arbeitsweise der Bibliothek ja nicht ändert, wenn sie von Vapoursynth anstatt Avisynth aufgerufen wird.

    Cu Selur

  • Selur Wenn du Neo FFT3dFilter in AviSynth nachrüsten würdest (vielleicht ist's auch schon passiert), könnte ich auch ein paar vergleichende Benchmarks zwischen den beiden Filtern machen.

    Da es leichte Unterschiede in der Performance zwischen AviSynth und VapourSynth gibt, möchte ich ungern fft3dgpu in AviSynth + Neo FFT3DFilter in VapourSynth vergleichen.

    Das auch noch einzeln mit Skripten zu machen artet in viel Zeitaufwand auf (oder ich muss erst aufwändigere Skripte basteln).

    In Hybrid kann ich einfach mal 10 verschiedene settings in die joblist packen und die logfiles auswerten.

    Bei 4K wird sich da ziemlich sicher ein großer Unterschied ausmachen lassen und bei fhd auch ein deutlicher...

  • Okay, das war zu erwarten, da sich die Arbeitsweise der Bibliothek ja nicht ändert, wenn sie von Vapoursynth anstatt Avisynth aufgerufen wird.

    Cu Selur

    Nö, da war das nur bei QTGMC implementiert, oder du hast vergessen mir nochmal nen neueren Link zu schicken. Der "Neo" Haken fehlt bei mir beim AviSynth fft3dfilter.

Jetzt mitmachen!

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