Leserartikel Multithreaded Denoising mit Temporal Degrain 2 in StaxRip

Guten Abend liebe Foristen,

ich bin Plexer, encode gerne Filme und insbesondere auch ältere Filme mit viel Bildrauschen und möchte Euch zeigen, wie man mit meinem liebsten Denoiser anstatt mit Singlecore-Leistung, mit Multicore-Leistung rendert und so viel performantere Ergebnisse erzielt.
Mir geht es darum, meine aktuell gewonnenen Kenntnisse mitzuteilen und festzuhalten, damit man ggfs. auf diese verweisen kann, bzw. ich sie nicht vergesse.:D

1. Was ist Temporal Degrain 2?

Temporal Degrain 2 ist erst mal ein Denoiser wie diverse andere Denoiser, basiert allerdings auf AviSynth und ist daher keine kompilierte Binary eines Programms, sondern ein anpassbares Skript. Dass es anpassbar ist, ermöglicht es überhaupt, von Single- auf Multicoreleistung zu "wechseln".
Temporal Degrain 2 ist außerdem eine Weiterentwicklung von Temporal Degrain, wie man auch vermuten kann. Das ursprüngliche Temporal Degrain wurde geschrieben, um das Bildrauschen aus dem Film "300" zu beseitigen. Dabei bietet TDG2 diverse qualitative Verbesserungen, um auch generisch anwendbar zu sein.


2. Wieso Temporal Degrain 2?

Ich schätze das in diesem Abschnitt subjektiv ein: Ich habe diverse Filme vorliegen, welche unter verschiedenen "Problemen" mit Bezug zum Bildrauschen "leiden". TDG2 hat mich von allen getesten Denoisern bisher von Qualität und Dateigröße am meisten überzeugt.
Dagegen sprach immer die extrem niedrige Leistung, da AviSynth-Skripte regulär auf einem CPU-Kern laufen und damit im Zeitalter von Multicore-CPUs enorm Leistung verschenkt wird. Aber dazu später mehr.


3. Wieso Denoising betreiben?

Ich empfehle Denoising aus zwei Gründen:
1. Die Optik:
Ich empfinde Bildrauschen als unangenehm und störend beim anschauen eines Films, auch dies ist wieder subjektiv. Das entrauschte Bild wirkt viel ruhiger und gleichmäßiger.

2. Die Dateigröße:
Dies ist der eigentliche Punkt, weshalb man Denoising erwägen sollte. Selbst moderne Encoder wie h.264/AVC, bzw. h.265/HEVC haben große Probleme, ihre Algorithmen auf verrauschtes Filmmaterial effizient anzuwenden und im schlimmsten Fall ist die Ausgabedatei größer als die Quelldatei. Dann kann man sich die Arbeit sparen.
Fakt ist allerdings, dass aktuelle Filme auf Blu-ray im FullHD- oder gar UltraHD-Format sehr groß ausfallen, z.B. 35, respektive 60 GiB pro Film. Ein Streaming via Plex übers Internet ist damit fast ausgeschlossen, außer man darf sich als Glücklicher mit einer Glasfaserleitung und üppigem Upload bezeichnen. Daher ergibt das Durchlaufen eines Kompressionsalgorithmus schon Sinn, so lassen sich immerhin moderate Dateigrößen erzielen, insofern das Bild ruhig ist und der Algorithmus gut arbeiten kann.


4. Das Programm StaxRip

Ich fasse mich hier kurz, StaxRip ist vereinfacht gesagt, eine mächtige Open Source-Tool-Sammlung von Audio-, Bild- und Videobearbeitungsprogrammen und vereinheitlicht dies in einer GUI.
Der Quellcode und das Programm kann über GitHub heruntergeladen werden: StaxRip

Wenn Ihr das aktuelle Release heruntergeladen habt, müsst Ihr es zunächst entpacken und anschließend die StaxRip.exe öffnen. Danach werdet Ihr gefragt, wo StaxRip seine Konfigurationsdateien hineinschreiben soll, hier empfehle ich die erste Option in der Liste auszuwählen, dies ist der Speicherort der .exe. Danach könnt Ihr noch entscheiden, ob Ihr über Updates informiert werden wollt und dann solltet Ihr dieses Fenster erblicken:
1690654227897.png


Das sieht erst mal sehr unübersichtlich aus, da man mit vielen Informationen bombardiert wird, wir brauchen aber nur eine Handvoll Einstellungen, der Rest kann für die erste Verwendung vernachlässigt werden.

Folgende Bereiche werden interessant:
1690654876655.png


Zuerst nehmen wir uns "Apps" vor, bzw. das Untermenü "Manage", welches wir auch auf der initialen Seite mit "F9" aufrufen können
1690655267512.png


Dort geben wir oben links ins Suchfeld "TemporalDegrain2" ein, so wie im Bild abgebildet und damit öffnet sich die Übersicht der Anwendung. Dort gehen wir dann auf "Launch" im Untermenü und es öffnet sich der Editor von Windows.
1690655613223.png


Dort müssen wir genau einen Wert anpassen und das machen wir, indem wir folgende Zeile mit Strg + F suchen:
Code:
fftThreads = default( fftThreads, 1)
und ändern diese 1 zu einer 2, speichern die Datei und schließen sie wieder.

Dies verbessert schon die Auslastung der CPU und sorgt für eine kleine Leistungssteigerung, aber noch nicht so wie wir es gern hätten.
1690655811983.png


Wieder im vorherigen Menü angelangt, klickt Ihr einmal auf "Version" und hängt an die vorgegebene Version einfach "-1" an und besstätigt mit "OK".

Damit habt Ihr den ersten Schritt zur besseren Auslastung der CPU bereits getan und Ihr könnt das mit "F9" geöffnete Fenster wieder schließen und könnt Euch wieder dem Hauptfenster widmen.

Nun klickt Ihr oben links auf "File" und dann auf die erste Option im Untermenü "Open Video Source File(s)", welche auch über das Shortcut "Strg + O" direkt erreichbar ist.

Damit öffnet sich folgendes Fenster und Ihr wählt wieder die erste Option des Menüs aus:
1690656344447.png


Jetzt sucht Ihr Eure zu bearbeitende Film- oder Seriendatei auf dem Rechner und öffnet diese.

StaxRip beginnt jetzt im gleichen Verzeichnis einen Ordner zu erstellen und extrahiert Video- und Tonspur(en) in dedizierte Dateiein, das ist für diesen speziellen Film das Arbeitsverzeichnis. Je nachdem wie schnell Eure Festplatte oder SSD arbeitet und je nachdem wie groß die File ist, kann dies ein paar Momente dauern.

Fertig geladen, sieht das so aus:
1690656745647.png


Im roten Kästchen erkennt man jetzt alle Details zum geöffneten Filmmaterial, Dauer, Größe, Bitrate, FPS, Codec, Auflösung und diverse Bild- und Videoinformationen.

Direkt darunter befindet sich das Feld "AVS Filters":
1690656967309.png


Dort findet der eignetliche "Zauber" statt.:D

Ihr macht über dem Feld "Noise" einen Rechtsklick es öffnet sich dieses Menü:
1690657167502.png


Dort navigiert Ihr zu TemporalDegrain2 und wählt dieses aus, damit wird es ins Projekt eingebunden, das kann einen kurzen Augenblick dauern.

Wenn dies erfolgreich geklappt hat, erscheint es in der Filterliste mit einem vorangehenden Häkchen und Ihr macht bitte nochmal einen Rechtsklick über dem Bereich "AVS Filters" dann erscheint wieder das Kontextmenü von eben, nur dieses Mal klickt Ihr auf "Edit Code", damit öffnet sich wiederum dieses Fenster:

1690657445678.png


Hier müsst Ihr genau eine Änderung durchführen, diese betrifft den eingerahmten Bereich. Dort wird die Funktion "TemporalDegrain2" mit default Parametern aufgerufen. Wir packen diesen Funktionsaufruf in folgende AviSynth-Funktionen, sodass die Zeile dann so ausschaut:
1690657649209.png


Code:
SetFilterMTMode("DEFAULT_MT_MODE", MT_MULTI_INSTANCE) TemporalDegrain2(degrainTR=2, postFFT=3, postSigma=3) Prefetch(8)

ABER ACHTUNG!

An diesem Snippet muss eine individuelle Änderung, je nach Eurer verbauten CPU erfolgen. Und zwar Am Ende wird Prefetch() aufgerufen, diese Funktion übergeben wir die Anzahl der Threads unserer CPU. Mein Desktoprechner hat z.B. den Intel i9 9900K verbaut, dieser hat 8 Cores und 16 Threads, also ersetze ich die 8 durch eine 16.
Code:
SetFilterMTMode("DEFAULT_MT_MODE", MT_MULTI_INSTANCE) TemporalDegrain2(degrainTR=2, postFFT=3, postSigma=3) Prefetch(16)

Ihr klickt dann auf "OK" und bestätigt damit die allerwichtigste Änderung in dieser Anleitung.

Als Letztes empfehle ich Euch die Encoding-Einstellungen zu überarbeiten und nach Eurem Geschmack anzupassen, dies hat den allergrößten Einfluss auf die Filesize, wenn einmal der Grain beseitigt wurde.
1690658221815.png


Ich versuche mich kurz zu fassen, da die Anleitung schon lang genug ist.
Oben links im eingerahmten Bereich könnt Ihr zwischen den verschiedensten Encodern wählen.
Oben rechts könnt Ihr den Container für Eure Videofile bestimmen.

Unten links könnt Ihr die Encodereinstellungen anpassen, aber ich empfehle nur eine Änderung:
1690658417831.png


In den Default-Einstellungen sind bei der Farbtiefe 10 Bit vorausgewählt, die meisten Produktionen werden aber nach wie vor in 8 Bit Farbtiefe veröffentlicht, wenn Eurer Material den Zusatz "HDR" hat, könnt Ihr die Option bei 10-Bit belassen.

Bestätigt wieder einmal mit "OK" und Ihr kommt zum Ausgangsfenster zurück.

Damit seid Ihr fast fertig. Jetzt müsst Ihr den Job nur noch zur Warteschlange hinzufügen und diese Starten:
1690658686537.png


1690658769820.png


Nun müsstet Ihr im Taskmanager eine tüchtig arbeitende CPU sehen:
1690659086029.png


Nachwort:

Ich werde allerdings keine Bildvergleiche für den Filter einfügen, da ich mir nicht sicher bin, wie das bei urheberrechtlich geschütztem Material im Forum ausschaut, falls mir ein Forist dies beantworten kann, werde ich diese ggfs. nachreichen.
Falls Ihr außerdem Verbesserungsvorschläge habt, könnt Ihr diese gern äußern. Ich denke dieses Thema ist schon sehr spezifisch, daher wird das allgemeine Interesse eher gering ausfallen, aber da ich noch nirgends im Netz eine Anleitung wie diese gefunden habe, dachte ich mir, ich halte es für alle und für mich einmal fest.

Viele Grüße
 

Anhänge

  • 1690658137278.png
    1690658137278.png
    58,8 KB · Aufrufe: 83
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Fusionator, Otsy, Restart001 und 3 andere
_anonymous0815_ schrieb:
In den Default-Einstellungen sind bei der Farbtiefe 10 Bit vorausgewählt, die meisten Produktionen werden aber nach wie vor in 8 Bit Farbtiefe veröffentlicht, wenn Eurer Material den Zusatz "HDR" hat, könnt Ihr die Option bei 10-Bit belassen.
nope, auf 10bit lassen -> https://yukisubs.files.wordpress.com/2016/10/why_does_10bit_save_bandwidth_-_ateme.pdf

ansonsten svtav1 und dessen integrierten denoiser mal probieren. der ist sehr leistungsstark beim denoisen und braucht quasi keine leistung. einziger nachteil ist, dass man ihn nicht konfigurieren kann, es geht nur an/aus.
 
  • Gefällt mir
Reaktionen: _anonymous0815_
0x8100 schrieb:
nope, auf 10bit lassen ->
Oha, das überrascht mich etwas. Da ein Bekannter und ich mit der Option experimentierten und mit 8 Bit die Files stets kleiner waren. (SDR Ausgangsmaterial) Ich muss das bei Gelegenheit nochmal überprüfen.
 
Grain und Noise sind nicht das gleiche. Wieso gibt es so viele Filmkorn-Hater :o Schade bezüglich der Vergleichsbilder, erfahrungsgemäß gehen Details verloren und der Look wird unnatürlich und plastisch. (Wachsfiguren)

Desweiteren ist es kein "Rendern", sondern Encoden.
 
  • Gefällt mir
Reaktionen: Fusionator und DaysShadow
Dann bin ich auch ein Filmkornhater...wobei es hier wirklich sehr viele Level von Filkorn und Grain gibt..aber Jurassic Park zb..ist ein Beispiel, das hat nichts mit Filmkorn zu tun das ist einfach Schmutz. Ähnlich bei Alien 1.
Ich bin generell nicht dagegen, aber wenn es nu rnoch ein wildes Rauschen über den gesamten Bildschirm ist, verstehe ich nicht wo das Details reinholen soll? Wenn ich unter massivem rauschen keine Hauttöne oder Haare mehr sehen kann...was bringt das an Detailgrad?

Am Ende muss für jeden selbst das Ergebnis stimmen. Ich habe in all den Jahren mit Temporal Degrain und mit Topaz Video AI die besten und für mich stimmigsten Erfahrungen gemacht.

Wobei das Topaz eine ganze Stange Geld kostet
Durch die hier beschriebene Anleitung konnte ich von 1-2FPS Bearbeitungsgeschwindigkeit auf 10-12FPS steigen. Ergebnisse und Samples wurden vor und nach Anpassung gemacht und verglichen und für objektiv gleich befunden. Kostenlos.
 
x264.exe schrieb:
Grain und Noise sind nicht das gleiche.
x264.exe schrieb:
Desweiteren ist es kein "Rendern", sondern Encoden.
Das ist natürlich korrekt, hat sich bei mir also auch schon falsch eingeschlichen, ich bessere nochmal bei Gelegenheit nach.

x264.exe schrieb:
Schade bezüglich der Vergleichsbilder, erfahrungsgemäß gehen Details verloren und der Look wird unnatürlich und plastisch.
Das kommt immer auf die Parameter an.

Vorher habe ich mit Topaz Video AI denoised und immer nur so viel entfernt, damit es einigermaßen gut komprimierbar ist, aber dieser plastische Look nicht auftritt. Allerdings hat Topaz andere Schwächen (Preis/Performance/Usability).

Bei TDG2 habe ich noch nicht so viel experimentiert, da die Performance es einfach nicht hergegeben hat, aber ich weiß durch meine jüngsten Recherchen, dass viel Anpassung möglich ist, aber auch Einarbeitungszeit und Geduld erfordert. Plastisch empfand ich den Look aber nie.

Auch ich finde das mit den Vergleichsbildern schade, aber es ist mir zu riskant.
Ergänzung ()

0x8100 schrieb:
ansonsten svtav1 und dessen integrierten denoiser mal probieren. der ist sehr leistungsstark beim denoisen und braucht quasi keine leistung. einziger nachteil ist, dass man ihn nicht konfigurieren kann, es geht nur an/aus.
Das müsste ich mir auch noch im Detail anschauen, eben wenn nur an/aus möglich ist, aber das größere Problem sind meine Endgeräte, alle können sie HEVC, aber die wenigsten AV1.
 
_anonymous0815_ schrieb:
Das kommt immer auf die Parameter an.
Das ist richtig. Die eigentliche Kunst ist es, diese zu finden =D
Die von dir geposteten Parameter finde ich persönlich zu stark, da sie in meinem Test sehr viele Details entfernt haben u.a. Bartschatten, Haare, Struktur der Kleidung etc.
 

Anhänge

  • Original.jpg
    Original.jpg
    6,9 KB · Aufrufe: 96
  • Degrain.jpg
    Degrain.jpg
    5,4 KB · Aufrufe: 100
  • Beautiful UHD Grain..jpg
    Beautiful UHD Grain..jpg
    1,9 MB · Aufrufe: 97
Der Grain ist ekelhaft xD Interessant wie unterschiedlich Geschmäcker sind. Sieht für mich absolut schmutzig aus, und Haare sehen bei mir nicht so verwaschen aus was ist das für Quellmaterial?
 
Zurück
Oben