progressive in interlaced umwandeln (z.B. 720p in 1080i)

  • Hallo,

    ich habe ein Video mit 720p (50p) gefilmt und möchte dieses nun als 1080i ausgeben.
    Jedoch sind die Ergebnisse grauenhaft da bei Bewegungen starke Ruckler oder Geisterbilder entstehen.

    Habe schon viel gesucht aber nichts konkretes gefunden, daher die Frage:
    Wie kann ich sauber progressive in interlaced umwandeln?

    Gibt es da Filter für VirtualBud oder etwas ähnliches?

    Vielen Dank!
    chris.x

  • Für AviSynth gibt es hier mit Sicherheit schon Lösungen, die mit dem "Reinterlacing" nach bestimmter Filterung zu tun haben. Sicherlich wird man in solchen Beiträgen auch Vorschäge von scharfis_brain finden.

    Nur zur Sicherheit: Mit den 50p bist du dir sicher? So aus Neugier würde mich schon interessieren, welche Kameras so etwas aufzeichnen. Angeblich sendet der ORF wohl so etwas auch manchmal. Eine MediaInfo-Analyse würde sicher beruhigen...

  • Ich würde es so probieren:

    Zitat

    AviSource("C:\Foobar.avi").Lanczos4Resize(1920,540).AssumeFieldBased().AssumeTFF().Weave()

    Wichtig ist, dass du zu aller erst den Resize Filter ausführst. Natürlich nur auf die Hälfte der vertikalen Auflösung, da ja anschließend noch verwoben wird.
    Auch klar sollte sein, dass das Ergebnis ohne Deinterlacing bei der Wiedergabe auf einem PC Monitor die üblichen "Kamm" Artefakte aufweisen wird...

  • LoRd_MuldeR.
    das script ist totaler unfug!
    denn es reduziert die Bildhöhe auf 540 pixel und erhöht sie danach durch vertikale pixeldopplung auf 1080pixel.
    das erzeugt ekelhaftes aliasing und vermindert die komprimierbarkeit erheblich.

    das Script von Bigotti5 ist das Einzig richtige.

  • das script ist totaler unfug!

    Dafür funktioniert es ganz ordentlich :zunge:


    denn es reduziert die Bildhöhe auf 540 pixel und erhöht sie danach durch vertikale pixeldopplung auf 1080pixel.

    Nein, das tu ich eigentlich nicht ;)

    Meine Eingabe ist 50fps progressive. Nach dem Resize haben die Frames bereits die gewünschte Zielgröße von 1920 Pixel in der Breite, jedoch mit halber vertikaler Auflösung - also nur 540 Pxiel in der Höhe. Das entspricht genau der Auflösung eines Feldes, wie man es für ein 1080i video benötigt. Danach noch das Weave(), um die einzelnen aufeinander folgenden Felder (immer noch 50 fps) zu "interlaced" Frames zusammenzufügen (ergibt dann 25 fps). Fertig! Wüsste beim besten Willen nicht, wo da irgendwas "verdoppelt" werden sollte. Aber vielleicht ein Denkfehler irgendwo ???

    1280x720p @ 50fps -> Resize -> 1920x540p @ 50fps -> Weave -> 1920x1080i @ 25fps

    (Soweit ich verstehe ist Weave() genau die Umkehrung von SeparateFields, da sollte eigentlich nix gedoppelt werden)

  • die halbbilder sind aber jeweils gegeneinander vertikal um einen halben pixel verschoben!
    und aus diesem Grunde gilt eben NICHT: 1080i = 540p!

    probiere einfach mal beide scripte aus. Du wirst sehen, dass deins ein wesentlich schlechteres bild macht!

    wenn Du es 'richtig' machen möchtest, müsstest Du die geraden bilder mit einem offset von 0.25 pixel der zielauflösung nach oben shiften und die ungeraden bilder um 0.25pixel nach unten shiften. zum schluss dann weaven. nur dann wird das was.
    aber mit einem normalen resize machst Du nur das Bild kaputt.

    und der einfachheit wegen wird von BIgotti (und mir auch) infach auf volle zielauflösung hochskaliert und dann reinterlaced (also sepfields.selevery(4,0,3).weave).

  • Da die Ausgabe ja "interlaced" ist, fällt der Vergleich mit meinen "progressive" Augen naturgemäß etwas schwer.
    Wenn ich aber beide Ergebnisse wiederum bobbe, dann sehe ich - abgesehen von einem minimalen vertikalen Versatz zwischen den beiden Videos) keinen Qualitätsunterschied.
    Und da der vertikale Versatz nur zwischen den Videos auftritt (nicht innerhalb eines Videos) sehe ich da kein Problem...

    (Möchte nicht bezweifeln, dass dein Skript im Zweifel "korrekter" arbeitet, aber der Unterschied ist wirklich sehr sehr klein)

  • außerdem verlierst du vertikal 180 Zeilen Auflösung (720 nach 540)

    Das verlierst du so oder so, ganz egal welche Methode du nun benutzt: Die Quelle besteht aus Frames mit einer Auflösung von 1280x720. Das gewünschte Ergebnis soll aber 1080i, also "interlaced", sein und besteht demzufolge aus Feldern mit einer Auflösung von jeweils 1920x540. Jeder "interlaced" Frame enthält zwei dieser Felder. Die voll vertikale Auflösung kannst du also nicht erhalten! Es sei denn du gehst von "1280x720p @ 50 fps" nach "2560x1440i @ 25 fps" anstatt nach 1080i. Da hier aber 1080i gefordert war...

  • Nicht ganz..
    Ein 720er Frame enthält Infos für 360 Zeilen Halbbild 1 und 360 Zeilen Halbbild 2.
    Resized man nach 1080 und erstellt jetzt Halbbilder bleibt die volle Information der 360 Halbbild Zeilen erhalten, sprich Halbbild 1 hat 360 Zeilen echte Info und 180 Zeilen Interpolation.
    Resized man aber gleich nach 540 enthält das nun entstandene Halbbild nur noch 270 Zeilen echte Information und 270 Zeilen Interpolation.

    Sieh dir doch mal den angehängten Vergleich an...

  • Nicht ganz..
    Ein 720er Frame enthält Infos für 360 Zeilen Halbbild 1 und 360 Zeilen Halbbild 2.
    Resized man nach 1080 und erstellt jetzt Halbbilder bleibt die volle Information der 360 Halbbild Zeilen erhalten, sprich Halbbild 1 hat 360 Zeilen echte Info und 180 Zeilen Interpolation.
    Resized man aber gleich nach 540 enthält das nun entstandene Halbbild nur noch 270 Zeilen echte Information und 270 Zeilen Interpolation.

    Nö. Ich glaube Du verstehst nicht genau, was Weave() tut. Wenn ich nach 1920x540 Resize, dann bleiben von den ehemals 720 Pixel vertikaler Auflösung noch genau 540 übrig. Und die bleiben beim anschließenden Weaven erhalten: Es werden ja jeweils zwei aufeinander folgende Frames (jetzt eigentlich "Felder") á 1920x540 zu einem einzigen 1920x1080 "interlaced" Frame in verwoben. Bei diesem Schritt ändert sich auch die Framerate von ursprünglich 50 Frames/Sek auf 25 Frames/Sek (25 "interlaced" Frames/Sek == 50 Felder/Sek). Wo da deine 270 Pixel herkommen sollen, ist mir schleierhaft. Fakt ist aber: Durch dein Ziel-Format, nämlich 1080i (1920x1080i == 2 Felder á 1920x540), ist die vertikale Auflösung der Felder bereits mit 540 Pixeln vorgegeben. Die Frage ist nur, wie man da hin gelangt. Aber das Ergebnis, das am Ende rauskommen soll, steht bereits fest. Wenn "meine" Methode einen Nachteil hat, dann ist es der von Scharfi bemängelte vertikale Versatz von 0.25 Pixel...

  • even field:
    aaa
    bbb
    ccc

    odd field
    AAA
    BBB
    CCC

    weaved:
    aaa
    AAA
    bbb
    BBB
    ccc
    CCC

    bei Dir haben beide fields die gleiche vertikale position, d.h.
    groß und kleinbuchstaben bei unbewegten inhalten den gleichen pixelwert -> treppcheneffekte.
    ausserdem wackelt das bilder in bewegten breichen hoch und runter.

    es haben schon viele leute deine methode versucht, und sind ins Boxhorn gerannt.
    nur die reinterlace methode ist die richtige.
    auf 540 pixel zu resizen und dann zu weaven ist schlichtweg FALSCH!

  • Deine Argumentation habe ich bereits vorhin verstanden und niemals bezweifelt. Meine Methode ist formal gesehen "falsch". Die Unterschiede zur "korrekten" Methode sind im Ergebnis sind aber so klein, dass zumindest ich sie nicht sehen kann. Was vielleicht aber auch daran liegt, dass die Ergebnisse ja "interlaced" sind und man diese erstmal wieder Deinterlacen/Bobben muss, um einen Vergleich durchführen zu können. Auf jeden fall aber ist die Auflösung der Felder bei beiden Methoden am Ende identisch, nämlich 1080x540 Pixel pro Feld. Das ist schon durch die Ziel-Vorgabe "1080i" festgelegt. Nix mit 270. Und gedoppelt wird da auch nix, weil "aaa" und "AAA" ja einen unterschiedlichen Zeit-Index haben...

  • aaa und AAA haben aber einen identischen spatial-index.
    somit hast du den vorteil von interlaced video komplett verspielt, weil sie in statischen bereichen des bildes identischen inhalt haben, also eine arrt zeilenverdopplung darstellen.
    ergo: Treppcheneffekte und/oder Bildzittern (je nach wiedergabegerät)

    interlaced ist ja gerade der Trick, bei statischen inhalten die volle 1080p auflösung zu behalten, während es in bewegten bereichen nur noch 540 zeilen sind.

    bei deinem script ist halt nur noch max. 540 zeilen auflösung drin.
    bei meinem /bigottis bleibt die volle bildqualität erhalten und du hast durch die die korrekte anpassung auch keine treppchen, wie ich schon schrieb.

  • hmm. und was ist nun der Vorteil, wenn man Dein Script verwenden würde?

    Da gibt es wohl keinen. Es war einfach meine Idee, um das Problem zu lösen.

    Vllt nicht perfekt, aber es tut trotzdem ganz passabel :zunge:

Jetzt mitmachen!

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