Alfred J Kwack - Was lässt sich da machen?

  • Ich bin momentan am Capturen der "Alfred J Kwack" Serie. Seit einigen Folgen ist die Qualität gesunken. Es finden sich überblendungen und eine "gröbere auflösung" im bild.

    hier ist ein sample: http://rapidshare.com/files/6620499/…_mjpeg.zip.html

    1.) die überblendungen bekomme ich recht gut mit telecide weg, es bleiben aber unschöne "farbränder", wenn sich die figuren bewegen (frame 49 am roten schal erkennbar). weiß da jemand abhilfe?

    2.) die grobe auflösung / pixelrasterung stört mich noch vielmehr (Frame 17 am schnabel, am stirnband und am kissen im hintergrund). da hätte ich gern eine lösung, die auch nach was aussieht. ich habe es einfach mal mit sangnom() versucht. dabei bilden sich aber hässliche fehler-klötzchen an manchen stellen.

    mein script bisher:

    es wäre schön, wenn ihr mir "fertige" oder schnell durchzuführende maßnahmen vorschlagen könntet (wenn möglich mit links zu den filtern), da ich momentan auf eine prüfung lernen muss und wenig zeit fürs herumspielen an filtern habe.

    vielen dank!

    freak

  • Das Ding scheint mir eh' schon völlig vermurkst: Nach einem einfachen Bob() - oder auch "unfold fields" in VirtualDub - seh' ich da schlimmes Chroma-Blending. Da scheint vorher schon etwas ziemlich schief gegangen zu sein.

    Ausserdem passen die even/odd fields irgendwie gar nicht richtig zusammen ... nach Bob() flackert's ganz erheblich, deutliche Helligkeitsunterschiede bei Linien, und so. Kein Wunder, dass Deinterlacer bzw. Fieldmatcher da ein komisches Ergebnis liefern: die Quelle IST komisch.
    => wohl am besten 1 Feld ganz wegwerfen, und mit EEDI2 interpolieren.
    Das Chroma-Problem müsste sich auch verbessern lassen, da hat unlängst foxyshadis im englischen Forum so 'ne Funktion gegen "asynchrones Chroma" gepostet, meine ich.

  • Ich hab auch mal was ausprobiert:

    Die Rotation der Erde wurde in den letzten Jahren primär durch sich im Grab umdrehende Musiker angetrieben - Mainstream sei dank.

  • Vielen Dank für die Beiträge! Da hat sich ja richtig Prominenz versammelt ;)

    Ich habe jetzt wie vorgeschlagen ein feld weggeworfen und interpoliert.
    wenn ich das ins bisherige script einbaue, sieht es ganz brauchbar aus. einzig das chroma-blending ist noch da ( Didée: ich finde den post im englischen forum nicht :hm: ).

    Das BlindDeHalo3 habe ich rausgelassen, da es mir das bild zu unscharf macht.

    das skript sieht damit folgendermaßen aus:

    Wenn jetzt das Chroma-Blending noch zu entfernen wäre, wäre ich überglücklich.

    (Anmerkung zum "vorrher schon was schief gegangen": ich glaube das produktionsstudio der serie hat beim eintreten der bildveränderungen gewechselt. die folgen haben ab diesem zeitpunkt einen anderen abspann, und ein "studio tokio" oder ähnlich wird erwähnt. ich vermute dass es damit zusammenhängt.)

    freak

  • einzig das chroma-blending ist noch da ( Didée: ich finde den post im englischen forum nicht :hm: ).

    Jo, ist nicht ganz so einfach zu finden ... hab' selber mächtig kramen müssen, um's wiederzufinden. Geschlagene fünfeinhalb Minuten!! :D

    http://forum.doom9.org/showthread.php?p=907384#post907384

    Allerdings hat foxyshadis das Script für telecined NTSC Quellen zusammengebaut, ob das direkt auch für PAL funktioniert ... keine Ahnung.

    ---

    Mein eigener (noch nie umgesetzter) Gedankengang zu diesem Problem ist der:

    - erstelle EdgeMask der Luma-Ebene (auf current_frame)
    - erstelle EdgeMask der Chroma-Ebenen auf previous_frame, current_frame, next_frame

    - Auswerten, welche dieser 3 Chroma-EdgeMasks die höchste Korrelation zur Luma-EdgeMask hat. Chroma des Frames mit der besten Korrelation wird dann für current_frame verwendet.

    Sollte vom Prinzip her funktionieren ...

    Ich lass das hier einfach mal so stehen: Hausaufgabe für den Script-Nachwuchs. :D

  • Danke Didée für den link. diesen thread habe ich auch gefunden, war aber nicht sicher, ob er auch der von dir gemeinte ist.

    bin gerade am ausprobieren, allerdings meint avsynth:

    Code
    there is no function named max ([ScriptClip],line 1)

    wo liegt der fehler?
    das script sieht momentan so aus (mal ohne sonstige filterung):

    freak

  • Oh, da hat foxy wohl eine Maximalwert-Funktion in seinen Standard-Imports. Kann selbergemacht sein, vielleicht isses auch aus Stickboy's Toolbox ... wer weiss.

    Pflanz' einfach das hier irgendwo ins Script, das macht auf jeden Fall das nötige:

    Code
    function max(val a, val b) { return( a>b ? a : b ) }
  • Ich bin nicht so ganz mit diesen Skripten zufrieden, hier mal mein Entwurf:

    Meiner meinung solte man erst Rauschfiltern und dann das saubere material Interpolieren.

    Test Encode: 1.5mb
    http://rapidshare.com/files/9448751/test4.avi.html

    Gefält mir etwas besser, bersonders die Dotcrawl wirt jetzt etwas besser entfernt. Konnte man mit Kikas "Masktolls und Kanten stabilisieren"- Skript fileicht noch etwas besser hinkriegen.

    Ubrigens, das ist kein CROMABLEDING, sondern das croma ist einfach temporal versetzt. Das das noch keiner gemerkt hat ;) .

  • Also ich hab mal gebastelt:

    Zum einen habe ich dem Chroma-"Corrector" eine Funktion spendiert, das hab ich gerade noch hinbekommen ;)

    Code
    #Plugins:# TIvtc.dll		# TIvtc 1.0 RC 1		(http://bengal.missouri.edu/~kes25c/)# mt_masktools.dll	# MaskTools 2.0 Alpha 27	(http://manao4.free.fr/)#Usage:## AviSource("...")## x=last# y=tfm()# ChromaCorrect(x,y,0)Function ChromaCorrect(clip inclp, clip filteredclip, int "pancomp"){global o=inclpglobal t=filteredclipglobal pancmp = default(pancomp,0)		# set 0 to use closest chroma if no match, instead of blurringglobal cnext=t.mergechroma(t.deleteframe(0)) global cprev=t.mergechroma(t.duplicateframe(0))global cblur=t.removegrain(0,11)# swap removegrain for depan if you're adventurousethis=t.mt_edge()enext=ethis.deleteframe(0)eprev=ethis.duplicateframe(0)global mnext=mt_logic(ethis,enext,"and")global mprev=mt_logic(ethis,eprev,"and")a1=scriptclip(t,""" combed?(max(dprev,dnext)>15*pancmp?(dprev>dnext?cprev:cnext):cblur):t	#subtitle(string(dprev)+", "+string(dnext))""")a2=a1.FrameEvaluate("""	global dnext=combed?averageluma(mnext):0	global dprev=combed?averageluma(mprev):0""")a99=a2.FrameEvaluate("""global combed=o.iscombedtivtc()""")return a99}function max(val a, val b) { return( a>b ? a : b ) }

    Allerdings muss ich zugeben, dass ich nicht ganz verstanden habe, was GANZ GENAU passiert. Es werden der vorige, der aktuelle und der nächste Frame verglichen, oder? Aber der rest.... *schulterzuck*
    Jedenfalls klappt es nicht so perfekt bei meinen Versuchen. Es werden zwar sehr viele Chromafehler behoben, aber manchmal erhält ein Frame die Farbe von dem 4 Frames zuvor.
    Da RedFox rechtzuhaben scheint, wäre die Funktion in meinem Fall warscheinlich viel einfacher.
    Auf die Gefahr hin, zurechtgestaucht zu werden, poste ich mal zwei alternative scripts, die die funktion verwenden (und ich mir nicht so sicher bin, ob die position im script so korrekt ist -> bitte korrigieren!)

    script 1 - so wie es bissher diskutiert wurde:

    Code
    path="C:\Software\AviSynth 2.5\plugins_anime\"LoadPlugin(path + "mt_masktools.dll")		LoadPlugin(path + "TIvtc.dll")			Import("LRemoveDust.avs")Import("chroma_correct.avs")AviSource("sample source_mjpeg.avi")x=lastSeparateFields().SelectOdd()eedi2()y=lastChromaCorrect(x,y)Deen("a2d",4,9,11)  		LRemoveDust(4,4)mSharpen(threshold=8,strength=30,mask=false,highq=true)Tweak(cont=1.01,sat=1.15,bright=+1)ColorYUV(gain_u=5)Crop(8,8,-8,-10)          		LanczosResize(688,512)

    Script 2 - ich hab mich mal an mr.browns skript gewagt (komischerweise wirken die Filter im Gesamten dem Treppcheneffekt ebenfalls entgegen)

    Kann mir jemand eine Funktion schreiben, die jedem Frame den Farbwert des vorigen Bildes verpasst?
    (edit:
    der genaue Sachverhalt:
    meines erachtens nach wird momentan in frame x die farbinformation aus frame x+1 verwendet, d.h. die farbe "kommt zu früh" (hehe). man müsste also die farbe "um eins nach hinten" verschieben. Um die funktion auch für andere nützlich zu machen wäre es vielleicht sinnvoll, wenn man den versatz über einen parameter regeln könnte um sowohl positive als auch negative Versätze behandeln zu können
    )

    Redfox: Deine Testcodierung sieht gut aus. Vielleicht einen Tick unscharf (muss ich morgen nochmal ansehen im vergleich zu dem bisherigen). Allgemein werde ich mir das morgen nochmal genauer ansehen.

    Anmerkung: Ich hab die Kommentare aus den scripts mal rausgelassen.

    freak

  • Anmerkung: (Ich mach der Übersichthalber ne neue Antwort)

    Ich habe alle bisher aufgenommenen Folgen mal durchgesehen, ob die Farbüberblendungen auch drin sind. Ab dem 19. Dezember sind die Aufnahmen nicht mehr "interlaced" und es scheint auch keinen Chroma-versatz sondern dafür ein Chroma-blending(!) drin zu haben.
    Hier mal ein beispiel vom 26. dezember: sample 2
    das sample 2 ist von mir zusammengeschnitten: schnitt zwischen frame 11 -> 12 und zwischen 36-> 37 . die anderen schnitte waren auch so in der ausstrahlung.

    Das heißt, es wäre zum einen eine Funktion für den Versatz zu finden, und eine für das Blending (mit den vorher geposteten scriptversuchen lässt sich sample 2 nicht recht bearbeiten.)

    bei dem bisherigen sample (sample 1) scheint die farbe immer vom nächsten frame zu sein, nicht vom vorgänger, wie oben geschrieben. ich werde es oben korrigieren.

    freak

  • Also, wenn's nur ein zeitlicher Versatz der Farbebenen ist (hab ich gar nicht dran gedacht), dann ist's sehr einfach:

    Verwende Chroma vom Vorgängerframe:
    -> MergeChroma( DuplicateFrame(0) )

    Verwende Chroma vom nachfolgenden Frame:
    -> MergeChroma( DeleteFrame(0) )


    Zu dem neuen Sample2:
    Hmh. Ob das jetzt "echtes" Blending/Ghosting ist, oder nur ein zu aggressiver Rauschfilter (wird leider oft gemacht) ... schwer zu sagen.
    Ist AJKwack eigentlich durchgehend mit 8fps animiert? Wenn ja, könnte man relativ einfach eine Funktion basteln, die immer aus 3 fast-gleichen Frames den mittleren auswählt. Wenn aber 8fps / 12fps gemischt auftreten, dann is' nicht mehr so einfach ...

  • Die AJKwack Folgen haben unterschiedliche animationsgeschwindigkeiten. Ich habe auch Kameraschwenks gefunden, die in jedem bild eine änderung zeigen.
    (hier ein sample nr 3: sample 3)

    zum sample2: das Beispiel ist auch ein ziemlich krasses. An anderen stellen fällt es nicht so auf. das lass ich einfach drin.

    wieder zurück zu den Farben im Sample 1:

    Ich werd noch verrückt!
    Die Farben sind nicht (!) nur versetzt.
    Schaut man sich jedes Field einzeln und aufgeteilt in Farbe und Helligkeit an, so sieht man, dass die Helligkeiten ok sind, und bei der Farbe in manchen fields ein blend drin ist. Eventuell sind sogar alle Farbinformationen jedes Fields ein Blend, nur fällt es nicht auf, da viele Bilder gleich sind. Hier das script dazu:

    Code
    AviSource("sample source_mjpeg.avi")clp=last.AssumeTFF().ConvertToYuY2()blank=BlankClip(length=clp.Framecount , width=clp.width, height=clp.height, fps=clp.Framerate , color=$FFFFFF).ConvertToYuY2().AssumeTFF()clp_c=MergeChroma(blank,clp)clp_l=MergeLuma(blank,clp)clp_c=clp_c.SeparateFields()clp_l=clp_l.SeparateFields()StackVertical(clp_c,clp_l)


    Im Anhang die Fields 79,80,81,82 aus sample 1.
    Wenn ihr ein Script/ eine Funktion hinbekommt, was hier greift, dann wäre es schön.Andererseits ists mir langsam auch egal, und ich werde es so lassen wie es ist. Den Aufwand hierfür ist es einfach nicht Wert. Es sind momentan 9 Folgen, das ist auch kein Weltuntergang.

    Trotzdem noch ein kleiner Ansatz, um die Blends weniger Sichtbar zu machen:
    Zu jedem Field x werden zwei varianten gemacht: einmal ein chroma-blend zwischen field x-1 und x , und eine variante mit chroma x+1 und x, also
    version1 = MergeChroma(x,xprev,0.5)
    version2 = MergeChroma(x,xnext,0.5)
    anschließend müsste nur noch entschieden werden, welcher blend besser zum aktuellen field x passt (wie geht das?). am beispiel der Bilder im Anhang müsste Field 80 ein Blend zwischen 79 + 80 werden, und Field 81 ein Blend zwischen 81 und 82. Damit wäre nur noch 25% Fehler im bild, statt 50% bei den bisherigen blends.

    Anmerkung am Rande:
    Betrachtet man nur die Luma-Ebene, so kann das interlacing behoben werden, indem man ein halbbild abschneidet (was nach obigem muster ja auch Sinn macht);

    Code
    separatefields().trim(1,0).weave()


    dadurch erhält man aber ein ähnliches bild wie im englischen forum (didées link)-> die farbe scheint interlaced zu sein. In wie weit das weiterhelfen kann weiß ich noch nicht :D

  • Also, wenn's nur ein zeitlicher Versatz der Farbebenen ist (hab ich gar nicht dran gedacht), dann ist's sehr einfach:

    Verwende Chroma vom Vorgängerframe:
    -> MergeChroma( DuplicateFrame(0) )

    Verwende Chroma vom nachfolgenden Frame:
    -> MergeChroma( DeleteFrame(0) )


    hab ich gestern auch mal ausprobiert, mit folgender konstruktion

    Code
    OrigCLP=lasttemporalShiftetCromaCLP=Deleteframe(0)mergeluma(temporalShiftetCromaCLP, OrigCLP)


    Ohne Erfolg, warscheinlich weil das Croma wirklich geblendet wurde und nicht nur Zeitlich verschoben. :nein:


    Zu dem neuen Sample2:
    Hmh. Ob das jetzt "echtes" Blending/Ghosting ist, oder nur ein zu aggressiver Rauschfilter (wird leider oft gemacht) ... schwer zu sagen.
    Ist AJKwack eigentlich durchgehend mit 8fps animiert? Wenn ja, könnte man relativ einfach eine Funktion basteln, die immer aus 3 fast-gleichen Frames den mittleren auswählt. Wenn aber 8fps / 12fps gemischt auftreten, dann is' nicht mehr so einfach ...

    Auf eine Änliche Idee bin ich gestern auch gekommen, alerdings benutze ich Dup mit spezielen Einstelungen. Damit sollte das auch bei 12FPS klappen. 24FPS sind natürlich immernoch Essig.


    In meinem Testencode sind jetzt keine Cromablends mehr drin:

    http://www.filepoint.de/download/532/test5.avi/

  • sorry dass ich so lange abwesend war. ;)

    Redfox: das sample sieht gut aus, allerdings weiß ich in deinen scripts nicht, was da so genau passiert. was tun z.b die "DePanEstimate", "DePanInterleave", "DeGrainMedian", "ImproveSceneSwitch", wo sind diese funktionen enthalten (dlls etc ?)und an welcher 'Stelle' hast du die chromablends rausbekommen?

    klappt das auch mit sample3?

    freak

  • Redfox: das sample sieht gut aus, allerdings weiß ich in deinen scripts nicht, was da so genau passiert. was tun z.b die "DePanEstimate", "DePanInterleave", "DeGrainMedian", "ImproveSceneSwitch",

    ATM bim ichselbst etwas im stress, deshalb hate ich erst auf dein Urteil gewartet, bis ich da ausfürliche Erklärungen zu abgebe. Ich werde am Wochende mal ne ausfürliche Erklärung posten.

    wo sind diese funktionen enthalten (dlls etc ?)

    Steht doch alles am Anfang der Skripte.

    und an welcher 'Stelle' hast du die chromablends rausbekommen?

    Auf eine Änliche Idee bin ich gestern auch gekommen, alerdings benutze ich Dup mit spezielen Einstelungen. Damit sollte das auch bei 12FPS klappen. 24FPS sind natürlich immernoch Essig.


    Hier stehts. ;)

    klappt das auch mit sample3?

    Hab ich mir gerade heruntergeladen und werde es gleich mal ausprobieren.

    Aktuelles Skript ist übrigens:

    Encode 1.2 MB

  • Moin Freak!

    Ich hatte leider noch keine Zeit die Erklärungen zu Schreiben, aber ich habe mir gerade noch mal kurz die Ausschnitte angesehen, die du geupt hast.

    Dabei sind mir noch zwei Sachen aufgefallen, die nicht ganz uninteressant sind.

    1. scheint das Chroma nicht interlanced zu sein, sondern progresiv und tatsächlich enthält es Blends. Nur das Luma ist interlaced.

    An diesem Vergleichsbild kann man das sehen:
    [Blockierte Grafik: http://img2.myimg.de/Zwischenablage02c0b_thumb.jpg]
    (Vielleicht hätte ich das vorher machen sollen, anstatt mit Mutmasungen vorzupreschen :rolleyes:... das muss ich mir wirklich abgewöhnen. Ein dickes SORRY an alle die ich mit meiner Falschaussage iritiert habe!)

    2. Desweiteren habe ich AJQuack endlich doch Progesiv bekommen. Naja, Fast ;). Irgentwie scheien die Fields zwar "Temporal" zusammen zu passen, aber nicht "Spatial". Soll heisen, sie sind jetzt im richtigen Bild, aber nicht in der Richtigen Reinenfolge untereinender.

    Das hat mich an:

    Zitat

    SwapFields(clip)

    Dieser Filter tauscht Zeile 0 mit Zeile 1, Zeile 2 mit Zeile 3, usw. . Er tauscht daher die Felder in einem interlaced Frame. Das gleiche geschieht bei SeparateFields.ComplementParity.Weave.


    erinnert, aber das machte es nur noch schlimmer.

    Warscheinlich müsste man Zeile 1 mit Zeile 0, Zeile 3 mit Zeile 2, usw tauschen, aber ich hab keine Ahnung wie das geht.
    (HILFE!!!)

    Hier mal das Skript und ein Bild vom Output(pan-24fps):

    [Blockierte Grafik: http://img2.myimg.de/Zwischenablage01312_thumb.jpg]
    Das wars erstmal, die Erklärungen kömmen dann dieses WE, OKAY?

Jetzt mitmachen!

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