High Quality - Deinterlacing mit AVISynth

  • Jetzt REICHTS! TMCkernelbob ist out, tot, uralt, crappy etc.
    Wehe dem, der das Ding noch verwenden will!

    Habe mal einen etwas "anderen" Deintelacer zusammengabestelt.

    er basiert auf Tomsmocomp und einem (beliebigen?) anderen deinterlacer.

    Tomsmocomp (0,-1,0) ist ein spezieller interpolationsmodus von Tomsmocomp,
    der nicht deinterlaced, sondern nur zwischenzeilen errechnet.
    Und das wahnsinnig gut ohne informationen aus den anderen Halbbildern zu kennen.

    hier das Script:

    TMCkernelbob.avs

    Code
    function TMCkernelbob(clip input, int "th", bool "TFF")	{	function kernelbob(clip a, int th, int ord)		{		f=a.kerneldeint(order=ord, sharp=false, twoway=false, threshold=th)		e=a.separatefields.trim(1,0).weave.kerneldeint(order=1-ord, sharp=false, twoway=false, threshold=th)		interleave(f,e)		}	th =  default(th,7)	input = (TFF == true) ? input.assumetff.addborders(0,4,0,4) : input.assumebff.addborders(0,4,0,4)	input = input.converttoyuy2(interlaced=true)	x=input.separatefields.selecteven.tomsmocomp(0,-1,0).separatefields.selectodd	y=input.separatefields.selectodd.tomsmocomp(0,-1,0).separatefields.selecteven	a=interleave(x,y).weave.swapfields.kernelbob(th,0).crop(0,0,0,-1).addborders(0,1,0,0)	#select TMC's extra-lines and deinterlace them	b=input.kernelbob(th,0)	#take the input clip and deinterlace it	layer(a,b,"fast").crop(0,4,0,-4)	#mix both to get a higher resolution	blur(0,-1)	#restore the sharpness lost due to the mixing	}

    benutzung:

    Code
    loadplugin("c:\x\kerneldeint140.dll")
    loadplugin("c:\x\tomsmocomp.dll")
    import("tmckernelbob.avs")
    
    
    avisource("interlacedvideo.avi")
    tmckernelbob(TFF=true)     #TFF=false , wenn nur schrott rauskommt

    Der Deinterlacer ist hauptsaechlich auf natuerliches Video ausgelegt.
    Computergraphiken werden unscharf/unsauber.
    Dafuer hat man bei nat. Video fast keine Treppcheneffekte in den interpolierten Bildstellen mehr, wie das Beispielbild veranschaulicht:

  • auf meinem Lautlos-Rechner (K6-2 mit PC66 SD-RAM, also so schnell, wie nen durchschnittlicher PII-266 oder lahmer)
    hab ich etwas mehr als 1fps -> reicht zum testen locker aus.

    auf aktuellen 2 bis 3 GHz Maschinen sollte das script also mind. 10 bis 15 fps bringen...

  • Hallo "scharfi",

    Das klingt sehr interessant mit dem deinterlacer ... werd das mal testen. Beim TMCkernelbob.avs bekomme ich zwar Kopfschmerzen, aber ich muß das auch nicht verstehen ;)

    Gruß Gunnar

  • Ich werde den hoffentlich bald an einer Live-DVD (Zapped!) testen können - mal schauen, was er auf einem Duron-800 erlaubt (Vergleich Komplettskript mit/ohne). Vielleicht übernehme ich ihn in meinen zur Zeit unter Bearbeitung stehenden GK-Guide als "Profi-Tipp", wenn es sich lohnt - und du erlaubst. Ich muss sowieso noch mehrere von GK unterstützte Methoden vergleichen

  • Gunnar: so, jetzt erklaer' ichs euch, wie dat Dingens funzt:

    Kernelbob ist blosz eine Umsetzung des Kerneldeinterlacers auf 50fps Fullframerate (halt wie bob, oder DGbob)

    input = (TFF == true) ? input.assumetff.addborders(0,4,0,4) : input.assumebff.addborders(0,4,0,4)
    input = input.converttoyuy2(interlaced=true)

    sorgt fuer die richtige Fieldorder, je nachdem TFF true oder false ist.

    nun ans Eingemachte:
    Tomsmocomp hat einen internen Interpolationsmodus, der mit den Parametern (0,-1,0) aufgerufen werden kann. Dieer Modus interpoliert neue Zwischenzeilen, unter der Annahme, dass die Eingangsbilder progressive sind.
    x=input.separatefields.selecteven.tomsmocomp(0,-1,0).separatefields.selectodd
    macht also nix anderes, als:
    - das gerade Halbbild auszuwaehlen (input.separatefields.selecteven)
    - mit tmc wieder auf die volle Bildhoehe zu interpolieren (tomsmocomp(0,-1,0))
    - und dann nur die neuen zwischenzeilen selektieren (separatefields.selectodd)

    Das gleiche geschieht mit dem anderen Halbbild.

    dann werden die beiden neu erstellten Halbbilder wieder mit weave zusammengefuehrt und dem kernelbob zum deinterlacing ueberlassen.
    crop und addborders schieben den ganzen Spass noch um 1 Pixel nach unten, damit es deckungsgleich mit dem Originalvideo wird.

    nun wird noch das Originalvideo dem kernelbob unterzogen
    und zum Schluss werden beide gemischt.

    und genau hierbei ueberlagern die neu (mit TMC) interpolierten Zeilen die Treppchen des kernelbob. Dadurch gibts dann ein fast treppchenfreies Bild.

    Der Nachteil ist allerdings eine leichte Unschaerfe, die durch das mischen beider Clips entsteht.
    Ich versuche das durch ein anschlieszendes blur (0,-1) wieder etwas auszugleichen.

  • Wenn ich dein Script ausführe zeigt mir Vdub eine FPS=50 an. Der CCE labert irgendwas von 800/16 Framerate nicht unterstützt und läuft nicht. Wo hab ich denn da noch einen Knick in der Optik ?

    Gruß Gunnar

  • Logo, naja ... den Wald vor lauter Bäumen nicht ;)

    Zitat

    auf aktuellen 2 bis 3 GHz Maschinen sollte das script also mind. 10 bis 15 fps bringen...


    Stimmt ungefähr. Auf meinem 3 GHz läuft das Script mit (CCE) 0.68 ->17fps.

  • An alle Tester: neue Version, diesmal ohne den Layer breitmanscher, sondern mit ordentlicher interlacing-detection. Sodass das Bild nichtmehr an Schaerfe verliert, wie es bei obiger Version der Fall war.


    Diese Version duerfte aehnlich schnell, wie die vorige laufen.

    Gunnar: wie gefaellt Dir das deinterlacing?

  • Hi,

    scharfis_brain

    in deiner neuesten Version fehlen in der obersten Zeile die Anführungszeichen um TFF!
    Bei mir gab dann das script als error message aus:
    there is no function named "overlay"

    Ich glaub mein avisynth ist zu alt, ich check das mal.....

    *Edit:
    jo zu alt:

    Zitat

    Overlay is new from version 2.54


    quelle

    also ich hab hier 2.53 installiert, wo gibt es denn 2.54??

    Edit2:
    Es lebe die suchfunktion:
    http://forum.gleitz.info/showthread.php…t=avisynth+2.54
    :D :D

    *Edit3:
    nun funktioniert das script :)
    Hab das jetzt nur schnell an DVB Stream von Viva getestet, das ist nicht gerade ne ideale Quelle.
    Auf jedenfall ist das Bild deutlich besser als dgbob alleine.
    Sinnvoll ist es aber doch nur wenn auch ursprüngliche echte 50 Halbbilder vorhanden sind. Das kommt doch z.b. bei Kinofilmen im TV nie vor.
    Interlaced DVD, DV Cammaterial oder live Übertragungen im TV wären wohl die idealen Quellen.


    ...cya

  • Zitat

    in deiner neuesten Version fehlen in der obersten Zeile die Anführungszeichen um TFF!


    Nein sie fehlen nicht!
    denn die anfuehrungszeichen um einer Variable bedeutet, dass sie optional ist.
    d.h. der TFF-Parameter MUSS angegeben werden (sinnvoll, nichtwahr?)
    und die th und show - Parameter haben bereits voreingestellte Werte, d.h. sie sind optional.
    ahso, hab ja ganz vergessen, die Parameter zu erklaeren:

    TFF = true/false => gibt die Fieldorder des Videos an. ANalogcaptures haben meist TFF=true und DV-AVIs meist TFF=false, hier gilt: im Zweifelsfall probieren!

    th = 0...255 => gibt den deinterlacing schwellwert an, je kleiner, desto mehr wird deinterlaced, desto mehr flackert es auch.
    wenn der wert hoeher wird, bleiben mehr interlacing-reste uebrig
    der Default-wert is 12

    show = true/false => zeigt bei true die deinterlacing-map an. nuetzlich bei veraenderungen. default = false

    eine Forumsuche nach 2.54 haette dies
    http://forum.gleitz.info/showthread.php…&highlight=2.54
    zutage befoerdert, hehe

  • scharfis_brain

    also hier mein Aufruf:

    Code
    tmcbob(TFF=true)


    und die erste Zeile ausm tmcbob.avs script:

    Code
    function TMCBob(clip c, bool "TFF", int "th",bool "show")


    lasse ich die Anführungszeichen um TFF weg, dann kommt die meldung:

    Zitat

    AVIsynth open failure:
    Script error: Invalid arguments to function "tmcbob"


    Was ist wohl die Ursache??

    Ich hab mal von Eurosport nen Fussball schnipsel aufgenommen und mit TCMbob ausprobiert, sieht sehr gut aus. Ich hab dabei aber auch nur 6fps aufm 1600xp, deeinterlace ich mit TomsMoComp(1,15,0) bekomme ich knapp 16fps. Trotzdem, TCMbob ist der wohl beste deinterlacer im sinne 25fps Halbbilder --> 50 fps Vollbilder :)


    ....cu

  • Es gibt einfach einen Unterschied zwischen der Deklaration der Funktion und ihrem Aufruf: In der Deklaration muss AviSynth erst mal gesagt werden, wie ein Parameter heißt - und wenn hier der Name des Parameters in Anführungszeichen steht, dann ist er optional (muss nicht angegeben werden - aber wenn, dann entweder alle vorherigen Werte auch, oder mit "Name=Wert").

    http://www.avisynth.org/index.php?page=SkriptFunktionen

    Der erste "clip"-Parameter ist immer optional: Falls der erste Parameter vom Typ "clip" ist, und nicht verwendet wurde, dann wird immer der letzte Bearbeitungsschritt (interne Variable "last") dafür angenommen.
    __

    Ich hatte gerade noch einen Parameter "select" eingearbeitet (Werte: {[0]|1|2}), der es ermöglicht, die Rückgabeart zu wählen (Single-Speed SelectEven / Single-Speed SelectOdd / Double-Speed-Progressiv). Nun hast du wieder eine neue Version - jetzt muß ich die erst mal einpflegen und testen...

    Aber es kann nur besser werden! :daumen:

    Andere Deinterlacer brachten jedenfalls noch erhebliche Aussetzer - entweder Interlacing-Artefakte oder Blend-Matsch. Mehr dazu später.

  • Noch besser wuerde nur ein Deinterlacer arbeiten:

    Der MotionPerfect-Deinterlacer, der mit dem Ghost-Forum in der Versenkung verschwunden ist. (Echte Bewegungsverfolgung und -interpolation)

    Der MP-Deinterlacer war aber alles andere als einfach handhabbar (viele Zwischendateien), brachte aber enorm gute Resultate mit sehr hoher Detailschaerfe auch in bewegten Bereichen.
    Das einzige Manko war, dass MP sich manchmal bei starken, unvorhersehbaren Bewegungen verschaetzte und statische Overlays (Senderlogos und (transparente) Einblendungen mit der Hintergrundbewegung mitriss. Die liesze sich aber mit meinem heutigen kenntnisstand leicht mit TMC(0,-1,0) und einer comb-mask ausmerzen, ohne dass es zu allzugroszen Verlusten kaeme.

    nunja, ich bin mal gespannt, was Ligh noch so alles veraendert und verbessert.

    btw. man sollte der Mask evtl. noch ein undot hinzufuegen, was ich hier leider nicht testen kann (K6-2 hat kein iSSE)

    also in der Zeile, wo das auskommentierte #blur(1) steht, einach mal undot() hinschreiben....

    Ich bin auf die Resultate gespannt!

  • Hi scharfi! Ich kann dir flüstern - "ZAPPED!" ist eine DVD, die gnadenlos die Schwächen von Deinterlacern aufdeckt. DGBob, FieldDeint, KernelDeint - alles unbrauchbar, die hinterlassen immer wieder mal Artefakte (wie z.B. 'durchsichtige Finger' und Streifen). TMCBob (dein zweiter Versuch) ist unheimlich langsam im Vergleich zu den anderen, und ebenfalls "löchrig". TomsMoComp ist allgemein sehr brauchbar, und TMCKernelBob (dein erster Versuch) beinahe perfekt (nur eben auch merklich langsamer).

    ohne Deinterlacer: 5,7 fps
    DGBob: 3,6 fps
    FieldDeint, blend=true: 5,1 fps
    FieldDeint, blend=false: 5,3 fps
    KernelDeint: 4,8 fps
    TMCKernelBob: 3,3 fps
    TMCBob: 1,4 fps
    TomsMoComp: 5,4 fps

    Wie krieg ich jetzt die Beispielbilder online? Sind ja einige Megabytes, weil man ja PNG verwenden muss und nicht resizen soll. Na, zumindest häng ich meine Versionen erst mal an (als *.avsi, mit "Import()" einzubinden, lädt seine benötigten Plugins selber - Pfadangaben müssen vorher angepasst werden!).

  • naja, TMCkernelbob kann garkeine Interlacing-artefakte zuruecklassen, da er 2x deinterlaced (originalvideo und TMCs extra-lines) und beide resultate ineinanderblendet. D.h. evtl. uebriggebliebene Kaemme werden vermatscht, was natuerlich angenehmer ausschaut. Dafuer muss man aber auch einen Verlust in der Vertikalen Aufloesung in Kauf nehmen.

  • Da ich am Ende sowieso meist resize, dürfte einfach nur TomsMoComp für mich die beste Lösung sein.

    Wenn man auf perfekt lückenloses Deinterlacing besteht und volle Bildhöhe erhalten will, dann ist TMCKernelBob einfach umwerfend.

    TMCBob jedoch ist bisher nicht erheblich besser als die anderen Deinterlacer, nur erheblich langsamer - auch hier bleiben Artefakte zurück (wenn auch bedeutend weniger); ich denke, der beste Ansatzpunkt für eine Optimierung der Bildqualität ist die Überarbeitung der Maske, für dieses Stück brauche ich aber leider noch mehr Hintergrundwissen (gerade der Threshold ist mir noch schleierhaft). Soweit ich die analysiert habe, erkennt er bei einigen Stellen nicht korrekt, dass dort gefiltert werden sollte, anscheinend benutzt die Maskenbildung nur Helligkeitsinformationen? Jedenfalls sind einige Stellen schwarz, die meiner Meinung nach besser weiß sein sollten.

    (Für deinen Prozessor muss ich dich da wohl bedauern - der hilft der Optimierung nicht gerade, weil er deine Wahl der Filter einschränkt.)

Jetzt mitmachen!

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