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
    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
    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.

    Quote

    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:

    Quote

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


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

    Edited once, last by may24 (August 3, 2013 at 9:59 AM).

  • 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
    NNEDI3(field=-2).Merge(SelectEven(),SelectOdd())


    umgewandelt wird in:

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


    und nicht in:

    Code
    a = last
    last = NNEDI3(a, field=-2)
    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
    NNEDI3(field=-2).Merge(SelectEven(),SelectOdd())

    wird in Infix-Notation:

    Code
    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

  • ok, ok, ok, ich hab's so gemacht:

    Code
    AviSource("aresrec.avi")
    NNEDI3(field=-2)
    a=SelectEven()
    b=SelectOdd()
    Merge(a,b)
    return(last)

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!