Anti-Alias für progressives Material

  • Hi zusammen,
    Ich habe hier einen Clip der nicht gerade optimal deinterlaced wurde -> Bob().SelectEven().PointResize(...) -> reencode Xvid
    Vor allem an den Ränder sieht man die typischen "Treppen". Ich habe mir daraufhin mal das AAA aus doom9 angeschaut, aber das verwendet SangNom und ist demnach doch wohl eher für Interlaced als Progressives Material gedacht ? Oder liege ich da falsch ?


    PS: Sorry aber die Forumssuche scheint noch nicht wieder zu funktionieren ...

  • Probier mal nnedi3 – das dürfte genau das richtige sein. Du hast uns zwar kein Sample zur Verfügung gestellt, aber wenn es wirklich nur schlechtes Deinterlacing mit Point-Interpolierung ist, dann ist nnedi3 genau das richtige.
    Nach Bob() braucht man übrigens eigentlich kein Resize mehr, das macht Bob() schon (und zwar kein Point).


    Das AAA script ist imo nicht dafür gedacht. Und Sangnom alleine würde zwar gehen, ist aber außerhalb von Cartoons eher unangebracht und erzeugt ein Ergebnis wie "Malen nach Zahlen".

  • Hi, na ja ich hab ihn jezt mal eingebaut, aber sehr viel un-aliased des nicht:

    Code
    1. nnedi3(0, dh=true).turnright().nnedi3(1, dh=true).turnleft().spline64Resize(720,406)
  • Hi, na ja ich hab ihn jezt mal eingebaut, aber sehr viel un-aliased des nicht:

    Code
    1. nnedi3(0, dh=true).turnright().nnedi3(1, dh=true).turnleft().spline64Resize(720,406)


    So ist das ja auch falsch.:) - Du willst nicht die Höhe des bereits gebobbten Clips verdoppeln (wobei automatisch die "schlechte" Interpolation von Bob() im Bild drinnen bleibt) ... sondern Du willst die von Bob() interpolierten Zeilen komplett verwerfen, und durch eine neue/bessere Interpolation ersetzen. Also: ohne "dh=true", und in der Folge auch ohne TurnLeftRight() oder hin-und-her-Resizing.


    Abhängig davon ob das Originalmaterial BFF oder TFF war, entweder


    NNEDI3(field=0) oder NNEDI3(field=1)


    Im Zweifelsfall einfach probieren, eines der beiden sollte augenfällig "schärfer" erscheinen.

  • Aaaahhh ... moment mal.

    Zitat

    Bob().SelectEven().PointResize(...) -> reencode Xvid


    Ist das mit dem PointResize() wirklich sicher? Wenn ja, dann ist das schon ein Problem.


    Ein "stärkeres" AA das auch über den (schwierig zu fixenden) Phase-Shift von einem Pointresize drüberbügelt (die bob()-interpolierten Zeilen liegen mal in den Even-Fields, mal in den Odd-Fields) wäre dann


    NNEDI3(field=-2)
    Merge(SelectEven(),SelectOdd())


    Das ist vom AA her auf jeden Fall stärker, kann aber (so wie alles andere) nicht viel gegen eventuelle "Unstetigkeiten" in der Signalkurve ausrichten, die von PointResize ggf. verursacht wurden.

  • Hm, mit PointRezise bin ich mir nicht 100% sicher. Aber schaut man sich das Bild an - vor allem die "Treppenbildung" - sieht's schon so aus. Mediainfo nennt "Super" als encoding App. Da muß man glaub ich nicht viel mehr dazu sagen ...
    Jedenfalls habe ich beide Versionen mit NNEDI3 mal getestet und tatsächlich führt die mit:

    Zitat

    NNEDI3(field=-2).Merge(SelectEven(),SelectOdd())


    zum Besten Ergebnis.
    Vielen Dank nochmals Didée :)

  • Schön wenn's funktioniert. Allerdings muss der Code schon in zwei Zeilen geschrieben werden, so wie ich's gepostet hatte. In einer Zeile, über "." verkettet, ist es falsch. So können die beiden Select()'s den NNEDI nämlich noch gar nicht "sehen", sondern nehmen die vorherige Zeile als Input. Avisynths Konzept von "inherent 'last' ".

  • Sprich mit dem '.' hätte NNEDI3 gar keinen Effekt?
    Hätte erwartet, dass

    Code
    1. NNEDI3(field=-2).Merge(SelectEven(),SelectOdd())


    umgewandelt wird in:

    Code
    1. last = NNEDI3(last, field=-2)last = Merge(SelectEven(last),SelectOdd(last))


    und nicht in:

    Code
    1. a = last
    2. last = NNEDI3(a, field=-2)
    3. last = Merge(SelectEven(a),SelectOdd(a))


    Gut, dass ich immer alles in mehrere Zeilen schreibe. :)

  • Möglicherweise kann man das noch anders interpretieren.


    Das Problem bei der Punktschreibweise ist, dass es nicht nur ein "Nacheinander" bedeutet, sondern auch ein "links vom Punkt wird erster Parameter". Also aus der Postfix-Notation


    Code
    1. NNEDI3(field=-2).Merge(SelectEven(),SelectOdd())


    wird in Infix-Notation:


    Code
    1. Merge(NNEDI3(last, field=-2), SelectEven(last), SelectOdd(last))


    Merge vermischt nach dieser Sichtweise also zumindest mal nicht die zwei gewünschten Clip-Zwischenstände.


    Und ich würde mal vermuten, dass Merge auch mit drei Clip-Parametern überfordert sein könnte; gibt es da keine Fehlermeldung, dass der dritte Parameter keine Zahl (float weight) ist? Dann war meine Idee vielleicht gar nicht richtig...

  • würde mal vermuten, dass Merge auch mit drei Clip-Parametern überfordert sein könnte; gibt es da keine Fehlermeldung,


    Du hast recht, stimmt, das müsste sowieso eine Fehlermeldung geben. War mir nicht aufgefallen - glaube mein Hirn ist gerade am verdunsten, es ist ZU WARM. :D