Second Generation Tape - Welche Filter?

  • Ich bin absolut kein Profi was die Arbeit mit AviSynth betrifft, aber als ich mich (genau wie Du) nicht mehr drücken konnte, weil es anders einfach nicht zu lösen war, hat mir ein (alter) Beitrag auf den Gleitz Seiten sehr geholfen. Der "Mein erstes Scrip"-Artikel auf Avisynth.org ist für mein Verständnis doch ein wenig knapp gehalten.

    Leider finde ich diese Anleitung aktuell auf den Seiten nicht mehr und sie ist auch etwas veraltet, aber damit habe ich die Grundlagen damals gut nachvollziehen können. Vor allem da hier in Verbindung mit dem mir schon bekannten Virtual Dub gearbeitet wird.

    Ich hänge die Seite einfach mal als ZIP mit dran, vielleicht hilfts Dir ja.

    Mittlerweile wird sicher mit anderen moderneren Filtern gearbeitet. Da können Dir die professionellen AviSynthler sicher unter die Arme greifen.

  • @ Didèe: das schlimme ich hab NIX davon verwandt....

    aber bitteschön, Du wolltest es nicht anders.
    und wehe, Du haust!

    Ich übernehme keine verantwortung für dieses script!

  • Ich krieg den Joke einfach nicht. *Warum* fürchtest Du Haue?
    Weil Du statt Tesafilm & schweizer Taschenmesser "nur" den kleinen Heimwerkerkoffer & doppelseitiges Klebeband benutzt hast, oder warum? :)

  • Hallo Leute,

    hier mein erster Versuch ein Avisynth-Script zu schreiben:

    AVIFileSource("C:\CAPTURE02.avi")
    i=converttoyuy2()
    i.assumetff()
    SeparateFields()
    ConvertToYUY2()
    Weave()
    FieldDeinterlace()
    Convolution3D (0, 32, 128, 16, 88, 10, 0)
    LanczosResize(672,542,6,8,698,562)
    AddBorders(24,17,24,17)
    Tweak(hue=0.0, sat=1.0, bright=0.25, cont=1.0)
    temporalsoften(2,2,4)

    Ist das so in Ordnung? Oder wiederspricht sich da etwas, sollte ev. eine andere Reihenfolge eingehalten werden???? Andere bessere Filter oder Einstellungen???

    Zufrieden bin ich zwar noch nicht, aber ich wollte erst einmal wissen, ob ich grundsätzlich auf dem richtigen Weg bin. Convolution3D verwäscht irgendwie die Details.
    Vom Ergebnis her, gefällt mir scharfis_brain Script sehr gut, auch wenn nur „brachiales breitmanschen“ ist.

    Ich habe da auch noch eine Frage:

    1. Wenn ich in VDMod eine Preview anschaue, sehe ich ja rund um das ganze Bild die schwarzen Ränder. Die sehe ich aber doch nicht am TV, oder???

    Das Endergebnis soll eine DVD sein. Das Format muss also 720x576 sein. Aufgenommen habe ich 704x572 unter Einsatz des BT8x8-Tweakers.
    Dann wurde mit Nulltransform ermittelt, wieviel am Rand weg geschnitten werden muss.
    Das Format war dann 698x565. FITCD 1.05 hat mir dann die o.g. Resizes und Borders vorgeben.

    2. Sollte ich eventuell noch einen Bild-Schärfer einsetzen? Wenn ja, welchen Schärfer???

    @ neals: Vielen dank für den Gleitz-Artikel. War wirklich hilfreich.

  • 1) Du versuchst, zwei Mal nach YUY2 zu konvertieren, was wahrscheinlich schon längst in YUY2 vorliegt (weiß man natürlich nicht, wenn du nicht schreibst, welchen Codec du beim Aufnehmen verwendet hattest).

    2) Du zerlegst das Material in Fields, und fügst sie gleich wieder mit Weave zusammen. Und dazwischen passiert nichts wichtiges. Also: Wozu?

    Zeilen 2,4,5,6 (und der Clip "i", auch in Zeile 3) kommen mir als insgesamt überflüssig vor.

    3) Du achtest beim Croppen und Resizen nicht darauf, dass die Bilddimensionen in Höhe und Breite durch 2 oder gar 4 teilbar bleiben.

    4) Convolution3D und TemporalSoften - beides nacheinander?

  • LigH:

    Das heisst also, dass alle Werte in LanczosResize & AddBorders durch Vier teilbar sein müssen???
    Ich glaube, dass ich da ein Problem bekommen werde, da mir nämlich immer die AddBorders oder LanczosResize einen Strich durch Rechnung machen.

    Beispiele:

    698x565
    LanczosResize(672,542,6,8,698,562) => Hier scheint ja alles i.O. zu sein....
    AddBorders(24,17,24,17)

    oder auch:

    698x564
    LanczosResize(672,542,6,9,698,562)
    AddBorders(24,17,24,17)

    Habe die anderen Sachen zur Kenntnis genommen und auch geändert. Die Werte von Convolution3D habe ich auch noch mal geändert...

  • Hallo !

    Hier mein nächster Versuch.
    Bin eigentlich ganz zufrieden, jedoch frage ich mich, ob ich noch einen Deinterlacer (z.B. blur) einbauen sollte.... Von Gleitz wurde ja für Anfänger empfohlen, alles zu deinterlacen.
    In anderen Quellen steht wiederum, dass man dies, wenn man eine DVD erstellen möchte, nicht machen muss.

    Ist es eigentlich für die Filterwirkung besser, die Aufnahme am Anfang des Scriptes in fields zu zerlegen?

    loadplugin("C:\Programme\AviSynth 2.5\plugins\sse2tools.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\removegrainSSE2.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\repairSSE2.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\masktools.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\warpsharp.dll")
    Import("C:\Programme\AviSynth 2.5\plugins\LimitedSharpen.avs")
    function LRemoveDust(clip input, int _mode, int "limit")
    {
    limit=default(limit,4)
    repmode = 2
    clensed = Clense(input)
    rep=Repair(clensed, input, mode=repmode)
    rg = RemoveGrain(rep, mode=_mode)
    rd=TemporalRepair(rg, rep)
    return LimitChange(rd, input, limit, limitU=255)
    }
    AVIFileSource("C:\CAPTURE.avi")
    converttoyv12() # ist nötig
    undot() # "bereinigt" das vorliegende .avi ein wenig
    LRemoveDust(4,2) # Denoiser (mind. 4,0, max. 4,2)
    y=8
    mergechroma(crop(0,y,0,0). addborders(0,0,0,y)) # chroma shift
    Tweak(hue=0.0, sat=1.0, bright=0.25, cont=1.0) # Helligkeit ein wenig angehoben
    LanczosResize(672,544,8,8,696,564) # alles durch 4 teilbar
    AddBorders(16,16,16,16) # alles durch 4 und 8 teilbar
    FadeIn(10) # bis Frame 10 wird langsam eingeblendet, gilt auch f. Audio
    FadeOut(143300) # ab Frame 143300 wird ausgeblendet, gilt auch f. Audio
    Limitedsharpen() # ist ja nun mit den Defaultwerten aktiviert,oder???

    Für Korrekturen bin ich immer zu haben... :D

  • Zitat

    FadeOut(143300) # ab Frame 143300 wird ausgeblendet, gilt auch f. Audio

    Nö - das bedeutet, dass du die letzten 143300 Frames ausblendest, also z.B. bei PAL (25fps) wären das 5732 Sekunden bzw. 1,59 Stunden Ausblendzeit...

    Zitat
    Zitat

    Limitedsharpen() # ist ja nun mit den Defaultwerten aktiviert,oder???

    Richtig.

    Weiters würde ich LimitedSparpen noch vor dem AddBorders setzen, da es dann weniger Pixel bearbeiten muss und auch die scharfen Kanten zu den Borders hin nicht weiter schärfen muss ;) Auch würde ich das Resizing von LimitedSharpen versuchen.

    Aus

    Code
    [/i]LanczosResize(672,544,8,8,696,564)AddBorders(16,16,16,16)FadeIn(10)FadeOut(10)Limitedsharpen()

    wird dann z.B.

    Code
    Crop(8,8,696,564)LimitedSharpen(dest_x=672,dest_y=544)  AddBorders(16,16,16,16)  FadeIn(10)  FadeOut(10)
  • Zitat von capture_newbie

    Ist es eigentlich für die Filterwirkung besser, die Aufnahme am Anfang des Scriptes in fields zu zerlegen?


    Hierüber sind schon einige Diskussionen entfacht worden, und die Antwort lautet: kommt drauf an. Oder anders: es scheint keine klare Antwort zu geben und hängt zudem vom verwendeten Filter ab.
    Ich persönlich zerlege die Streams, einfach um sicherzugehen, in Odd und Even:

    Code
    separatefields()
    odd=SelectOdd().Filter1().Filter2()...
    evn=SelectEvn().Filter1().Filter2()....
    Interleave (evn,odd).Weave()

    Der Vorteil:
    - falls Du von VHS capturen tust, und bei der Aufnahme die Köpfe nicht absolut gleich funktioniert haben (durch leichte Verschmutzung oder einfach Bauteiletoleranzen), kannst Du so die Unterschiede ausgleichen, indem Du die Filter für odd und evn getrennt parametrierst
    - Du filterst wirklich BENACHBARTE Pixel, die im Originalmaterial tatsächlich bereits vorhanden sind.

    Der Nachteil: temporale Filter arbeiten auf die Weise nicht optimal, da Du nur 25 "Bilder" pro Sekunde filterst, bei Interlaced jedoch 50 Bildwechsel pro Sekunde hast. Irgendwo (finde es nicht spontan) hat Scharfi daher vorgeschlagen, die Felder zu trennen, die fehlenden Zeilen zu interpolieren und temporale Filter so auf das "Gesamtwerk" loszulassen, danach die interpolierten Zeilen wieder löschen und den Stream wieder zu verzahnen.
    Qualitätsmäßig scheint das Ergebnis nicht eindeutig besser bei einem der Verfahren. Ich denke, die Interpolation ist deutlich fortgeschrittener, da hier noch algorithmische Feinheiten des Verwendeten Interpolations-Filters zum Tragen kommen.

    ...a seeker of knowledge...swimming in the bitstream...

  • Erstmal "Danke,Danke" für die raschen Antworten.
    Ich habe mein Script nun ein wenig umgestellt.

    Bzgl. dem Ausblenden:

    Wenn ich also möchte das z. B. die lletzsten 40 Frames langsam ausgeblendet werden, muss ich also folgendes eingeben:

    FadeOut(40) und nicht FadeOut(143300). Ist das so richtig?

    Meine FadeOut-Eeingabe konnte ich nicht in VirtualDubMod kontrollieren, da es in der Mitte der Datei grundsätzlich immer "einfriert".

    grua: Die .pdf les´ ich mir durch.


    capture-newbie

  • Zitat von capture-newbie

    Wenn ich also möchte das z. B. die lletzsten 40 Frames langsam ausgeblendet werden, muss ich also folgendes eingeben:

    FadeOut(40) und nicht FadeOut(143300). Ist das so richtig?

    Ja

  • Zitat von Capture-newbie

    Meine FadeOut-Eeingabe konnte ich nicht in VirtualDubMod kontrollieren, da es in der Mitte der Datei grundsätzlich immer "einfriert".


    Ein Fehler in VirtualDub. Arbeitest Du mit VirtualDubMOD und dem eingebauten Script-Editor? Wenn ja: statt F5 mal F7 (im Scripteditor) probieren, das schließt und öffnet die Datei in VDubMod, dadurch verschwindet dieses Problem. Oder VDubMod komplett schließen und neu starten - bei viel Bastelei entstehen manchmal seltsame Effekte wie der von Dir beschriebene. Dafür ist das Tool Freeware :)

    ...a seeker of knowledge...swimming in the bitstream...

  • So,

    habe mich dazu entschieden, mein .avi in Fields aufzuteilen und habe noch den Befehl
    colorYUV(levels="PC->TV") eingebaut.

    Mein Script sieht jetzt so aus:

    loadplugin("C:\Programme\AviSynth 2.5\plugins\sse2tools.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\removegrainSSE2.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\repairSSE2.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\masktools.dll")
    loadplugin("C:\Programme\AviSynth 2.5\plugins\warpsharp.dll")
    Import("C:\Programme\AviSynth 2.5\plugins\LimitedSharpen.avs")
    function LRemoveDust(clip input, int _mode, int "limit")
    {
    limit=default(limit,4)
    repmode = 2
    clensed = Clense(input)
    rep=Repair(clensed, input, mode=repmode)
    rg = RemoveGrain(rep, mode=_mode)
    rd=TemporalRepair(rg, rep)
    return LimitChange(rd, input, limit, limitU=255)
    }
    AVIFileSource("C:\CAPTURE.avi")
    converttoyv12() # ist nötig
    SeparateFields() # Avi in Fields aufgeteilt, da später Nutzung v. 2 räumlichen Rauschfiltern: Undot & RemoveGrain
    undot() # "bereinigt" das vorliegende .avi ein wenig; 1. räuml. Rauschfilter
    LRemoveDust(4,2) # Denoiser (mind. 4,0, max. 4,2); 2. räuml. Rauschfilter
    Weave() # Fields wieder im Urzustand
    y=8
    mergechroma(crop(0,y,0,0). addborders(0,0,0,y)) # chroma shiften
    Tweak(hue=0.0, sat=1.0, bright=0.25, cont=1.0) # Helligkeit ein wenig angehoben
    Limitedsharpen() # Defaultwerte
    LanczosResize(672,544,8,8,696,564) # alles durch 4 teilbar
    AddBorders(16,16,16,16) # alles durch 4 und 8 teilbar
    colorYUV(levels="PC->TV") # eine Art "Farbausgleich", vorher: colorYUV(analyze=TRUE). Wenn Min unter 16 und Max über 235 liegen, hat man ein Luma-Range-Problem; hier der Fall!
    FadeIn(10) # bis Frame 10 wird langsam eingeblendet
    FadeOut(33) # die letzten 33 Frames werden langsam ausgeblendet

    Nun kann ich das Script ja mit TmpgEnc laden und ins DVD-Format umwandeln.

    Muss man vorher noch einmal eine Konvertierung in RGB24 vornehmen, da Tmpenc dies lt. Doom9-Guide benötigt oder sonst irgendwas beachten???
    Zu viele Farbraumkonvertierungen sollen ja neg. Wirkungen auf die Bildqualität haben...

    Bin ja echt gespannt, wie das am Ende auf dem TV wirkt :D

    capture-newbie

  • Wenn du schon den Quelltext von "LimitedSharpen" aus einem eigenen Skript importierst:

    :motz: Schreib doch entlich mal die Deklaration von LRemoveDust in ein eigenes Skript, und importiere das auch! ;)

    Das erhöht mit Sicherheit erheblich die Lesbarkeit!
    __

    Und noch eins: Wenn du nach AviSource (oder AviFileSource, warum auch immer?!) nach YV12 konvertierst, tu dir selber einen Gefallen: Verwende hier den Parameter "interlaced". Die falsche Wahl sorgt für fehlerhafte Farbigkeiten, das wirst du bereuen, wenn du's nicht tust! Probiere es bitte aus:

    a) ConvertToYV12(interlaced=true)
    b) ConvertToYV12(interlaced=false)

    Du wirst mit ziemlicher Sicherheit einen Unterschied in einigen Szenen feststellen können.
    __

    Eine Konvertierung zu RGB24 am Ende dürfte für TMPGEnc 2.5.x sinnvoll sein. Aber auch hier wieder auf den "interlaced"-Parameter achten!

  • Zitat

    LRemoveDust(4,2) # Denoiser (mind. 4,0, max. 4,2); 2. räuml. Rauschfilter

    Nur Kosmetik, aber LRemoveDust ist meines Wissens nicht nur räumlich, sondern räumlich+zeitlich (spatial+temporal) kombiniert wirkend.

    Und versuch wie oben (Post 29 in diesem Thread) von mir schon mal vorgeschlagen statt LanczosResize das Resizing mit LimitedSharpen. Ist schnell und neigt zu weniger Artefakten.

Jetzt mitmachen!

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