• Hallo Leute!

    Ich habe interlaced TV Captures in 480x576 als Ausgangsmaterial.
    Da ich mit deinterlacing einfach keine gescheiten Ergebnisse erzielen konnte, encode ich Svcd mit Bitraten um 3500 AVR und 4500 MAX interlaced.
    Dazu benutze ich folgendes Script:
    SeparateFields()
    ConvertToYV12()
    Convolution3D(0,32,128,32,128,10,0)
    BilinearResize(448,272,0,1,480,285)
    Weave()
    AddBorders(16,16,16,16)
    ConvertToYUY2()

    Bin eigentlich ganz zufrieden mit dem Ergebniss, allerdings bin ich eher
    durch Trial and Error zu dieser Lösung gekommen, nicht durch reines Verständnis der einzelnen Befehle.
    Gibts da was zu verbessern, z.B. den Filter vorher oder nachher, Bitraten usw

    grüsse
    burner

  • Zitat

    Original von burner75
    Gibts da was zu verbessern, z.B. den Filter vorher oder nachher, Bitraten usw


    Ja:
    1. Lasse die ConvertTo...-Befehle weg und verwende die YUV2-Version von Convolution3D für AviSynth 2.5x!
    2. Du verwendest recht aggressive Einstellungen für Convolution3D. Versuche mal eine 1 als ersten Parameter, dafür geringere Werte für die Thresholds. Vor allem der vorletzten Parameter (temporal influence) ist mit 10 viel zu hoch - das führt zu "Nachzieh"-Effekten im Video. Ich würde hier höchstens 3 wählen. Du hast das nicht bemerkt, da Du die (nicht fertiggestellte) YV12-Version von Convolution3D verwendest, und da ist dieser Parameter inaktiv.
    3. Convolution3D nach dem resize bringt eine etwas stärkere Filterung und eine etwas bessere Komprimierbarkeit.

    bb

  • Convolution3D ist ein räumlicher und zeitlicher Weichzeichner. Die räumlicher Komponente wird schon richtig durch SeparateFields().Weave() behandelt, aber die zeitliche Komponente nicht. Im Moment guckt sich Convolution3D bei einem obereren Halbbild das vorhergegangene und das nachfolgende untere Halbbild an. Und das ist falsch. Besser ist:

    video = SeparateFields()
    gerade = SelectEven(video).Convolution3D(...)
    ungerade = SelectOdd(video).Convolution3D(...)
    Interleave(gerade,ungerade)
    BilinearResize(448,272,0,1,480,285)
    Weave()
    AddBorders(16,16,16,16)
    ConvertToYUY2()

    Gruß
    Arlsair

  • Vielen Dank für die Antworten.

    Die Einstellungen für den Filter habe ich aus der Gleitz Capture Anleitung.
    Ich habe mir mal die Filterung der einzelnen Halbbilder angeschaut, ist alles total verwaschen.

    Ich habe mal den Resize durch cropping ersetzt, das Bild scheint dadurch schärfer zu werden. Bringt das Resize eigentlich was, wenn ich mit 480x576 capture? Den Rand, den ich mit Cropping wegschneide und durch Borders ersetze ist doch im TV auch nicht zu sehen, oder?

    burner

  • Sehr interessant das Avisynth-Script ... was würdet ihr denn bei normal verauschtem TV-Material (704x576 YUY2 PicVideo) für Werte bei Convolution3D nehmen ?

    Gruß Gunnar

  • Ein erster Test mit folgendem Script (Avisynth v2.5.2) brachte schon ganz gute Ergebnisse.

    LoadPlugin("C:\User\AviSynth2\plugins\Convolution3DYV12.dll")
    AviSource("H:\TV-Cap\vvcr (2003-10-02 at 22-04-04).avi")
    ConvertToYV12
    SeparateFields()
    tfield = SelectOdd().Convolution3D(0, 6, 10, 6, 8, 2.8, 0)
    bfield = SelectEven().Convolution3D(0, 6, 10, 6, 8, 2.8, 0)
    Interleave(tfield,bfield).Weave
    Letterbox(16,16,16,16)
    ConvertToYUY2

    Der Speed (CCE) betrug 0.88 gegenüber 0.50 mit Avisynth v2.08

    LoadPlugin("C:\User\AviSynth2\plugins\Convolution3D.dll")
    AviSource("H:\TV-Cap\vvcr (2003-10-02 at 22-04-04).avi")
    SeparateFields()
    tfield = SelectOdd().Convolution3D(0, 6, 10, 6, 8, 2.8, 0)
    bfield = SelectEven().Convolution3D(0, 6, 10, 6, 8, 2.8, 0)
    Interleave(tfield,bfield).Weave
    Letterbox(16,16,16,16)

    Jetzt müßte man nur noch mit dem Picvideo im YV12 Farbraum capturen können. Aber das wird wohl nicht funktionieren ... jedenfalls wird bei mir irgendein Renderfehler angezeigt. Und der CCE frißt ohne "ConvertToYUY2" das File auch nicht weil wohl ein spezieller Decoder fehlt.

    Gibbet dafür eine Lösung ?
    Welcher Codec unterstützt überhaupt YV12 ?

    EDIT: Habe ein paar Tips in der Avisynth-FAQ gefunden.

    Gruß Gunnar

  • Ich weiß ja nicht, warum ich mir hier den Mund fusselig rede, dass man besser den ausgereiften YUV2-Convolution3D-Filter verwendet anstelle der halbfertigen YV12-Version. Bei Letzterer ist nämlich der Parameter "temporal influence" deaktiviert; außerdem macht die YV12-Version Probleme an Szenenwechseln.

    bb

  • Alles klar, kapiert.

    Avisynth 2.5.2 wird immer wieder in Verbindung mit YV12 erwähnt. Und ich ging davon aus das Avisynth 2.5.2 nur YV12 unterstützt und habe deswegen den Betafilter verwendet.

    Wenn man also wie du schreibst die "ConvertTo...-Befehle" weglassen soll wo bleibt denn da der Vorteil von Avisynth 2.5.2 ? Da kann ich doch gleich wieder die 2.0.8er verwenden, oder nicht ? Der (Geschwindigkeits-) Vorteil soll doch gerade darin liegen im YV12 Farbraum zu arbeiten. Mach ich da wieder einen Denkfehler ?

    Gruß Gunnar

  • Gunnar,

    der Löwenanteil der Prozessorzeit geht sowieso für Convolution3D drauf; YV12 vs. YUV2 macht da nicht mehr viel Unterschied. Bei etwas umfangreicheren Skripten kann es sich u.U. lohnen, nach Convolution3D auf YV12 umzuschalten.

    Wenn Du aber einen Encoder verwendest, der nur YUV2 akzeptiert (z.B. CCE), dann würde ich überhaupt nicht nach YV12 konvertieren. Schließlich ist die Quelle schon im besseren YUV2-Format - warum also die bessere Farbqualität aufgeben? Außerdem müßtest Du zweimal den Farbraum konvertieren (CCE macht's dann zum dritten Mal): YUV2-Quelle -> YV12 Script-Anfang -> YUV2 Script-Ende -> YV12 in CCE. Die Zeit für die beiden zusätzlichen Farbraumkonvertierungen musst Du bei den Filtern erst mal wieder reinholen.

    Insgesamt bleibt für mich folgendes Fazit:
    - Quelle YUV2: möglichst bei YUV2 bleiben
    - Quelle YV12: möglichst bei YV12 bleiben, da schneller

    bb

  • Um bei v2.5.2 zu bleiben muß noch ein Plugin geladen werden:

    LoadPlugin("C:\User\AviSynth2\plugins2\LoadPluginEx.dll")
    LoadPlugin("C:\User\AviSynth2\plugins\Convolution3D.dll")
    AviSource("H:\TV-Cap\vvcr (2003-10-02 at 22-04-04).avi")
    SeparateFields()
    tfield = SelectOdd().Convolution3D (1, 6, 10, 6, 8, 2.8, 0)
    bfield = SelectEven().Convolution3D (1, 6, 10, 6, 8, 2.8, 0)
    Interleave(tfield,bfield).Weave
    Letterbox(16,16,16,16)

    Der Speed verbessert sich bei mir von 0.50 (v2.08 ) auf 0.60 (v2.5.2)
    Wenn ich dagegen den TemporalSoften(3,6,4) nehme komme ich auf 1.20 ... der Convolution3D ist somit nicht der schnellste.

    bb
    Gibt´s denn einen MJPEG-Codec der YV12 unterstützt ?

    Gruß Gunnar

  • Zitat

    Original von Gunnar
    Gibt´s denn einen MJPEG-Codec der YV12 unterstützt ?


    Ich glaube, der Morgan MJPEG Codec unterstützt YV12 (weiß ich aber nicht sicher). Unterstützt denn Deine TV-Karte YV12?

    bb

  • Zitat

    Original von Gunnar
    Interleave(tfield,bfield)


    Dies sollte eigentlich zu einer falschen Feldreihenfolge führen.
    AviSynth beginnt bei Null an zu zählen (wie es üblich ist in der Informatik). Damit ist das erste Feld = 0, das zweite Feld = 1, usw.
    Um die Felder wieder richtig zusammenzusetzen, muss man es also Interleave(bfield,tfield) heißen.

    Gruß
    Arlsair

  • Zitat von arlsair

    Dies sollte eigentlich zu einer falschen Feldreihenfolge führen.
    AviSynth beginnt bei Null an zu zählen (wie es üblich ist in der Informatik). Damit ist das erste Feld = 0, das zweite Feld = 1, usw.
    Um die Felder wieder richtig zusammenzusetzen, muss man es also Interleave(bfield,tfield) heißen.

    Vielleicht heben sich hier zwei fehler auf?

    Zitat von gunnar


    tfield = SelectOdd().Convolution3D (1, 6, 10, 6, 8, 2.8, 0)
    bfield = SelectEven().Convolution3D (1, 6, 10, 6, 8, 2.8, 0)


    er nimmt für tfield die ungeraden (odd) zeilen und für bfield die geraden...
    ich habe mit dem script bei mir keinen unterschied gemerkt, kein ruckeln oder so (in vDub). egal ob tfield oder bfield zuerst. ist aber eine interlaced aufnahme. wie kann das sein? *grübel

    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • ach, rischtitsch. danke.
    noch eine kleine verständnisfrage (leider halb OT):
    habe heute nacht das erste mal progressiv-material von TV aufgenommen (Terminator), mit analoger TV-karte (cinergy)
    muß ich da beim encoding was beachten? ziel ist der Fernseher. der cce Basic hat das interlace immer anstandslos gefressen, da stand was von "encoded frames" und "encoded fields". brauchte ich ja auch nix ändern, es sollte ja auf den TV. muß ich bei progressiv was anders machen? die quelle an sich ist ja erstmal interlaced, nur halt keine kammartefakte.
    und dann habe ich gerade im VHS->DVD-Guide von SVCD-freak gelesen, man solle die enkodierte .m2v mit "bitrateView" auf topfield first prüfen und wenn "YES", dann das mit ReStream ändern.
    bin ich stutzig geworden, habe ich ein paar threads gelesen zu dem thema, lese was von "CCE schiebt zeilen nach oben", wenn quelle bff ist. TMPGEnc zeigt mir an, daß die quelle bff ist. tatsächlich habe ich in den schwarzen balken ganz unten eine graue drin.
    so, mit doubleweave().selectOdd() sieht das avi anschließend ziemlich scheiße aus. mit Restream wird das graue-Zeilen-Problem nicht behoben.
    bin etwas ratlos...

    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • Zitat von ZapBee

    habe heute nacht das erste mal progressiv-material von TV aufgenommen (Terminator), mit analoger TV-karte (cinergy)
    muß ich da beim encoding was beachten?


    Ja, da musst Du was beachten: Du verwendest CCE-Einstellungen für progressives Encoding:
    - Progressive frame flag ankreuzen
    - ZigZag scan verwenden, nicht alternate scan
    - Upper field first nicht ankreuzen

    Und noch was: Bei progressiver Kodierung brauchst Du weniger Bitrate für die selbe Qualität bzw. die Qualität wird bei gleicher Bitrate besser. :)

    Zitat von ZapBee

    ziel ist der Fernseher. der cce Basic hat das interlace immer anstandslos gefressen, da stand was von "encoded frames" und "encoded fields". brauchte ich ja auch nix ändern, es sollte ja auf den TV. muß ich bei progressiv was anders machen? die quelle an sich ist ja erstmal interlaced, nur halt keine kammartefakte.


    Die Quelle ist eben *nicht* interlaced, sondern progressiv. Generell sollten interlaced Quellen interlaced kodiert werden, progressive Quellen progressiv. Alle Hollywood-Filme sind *progressiv*, auch wenn Du sie vom TV capturest, auch wenn Du Interlace-Artefakte siehst (in dem Fall spricht man von einem sog. "phase shift"; solltest Du z.B. mit AviSynth und Telecide() reparieren).

    Zitat von ZapBee

    und dann habe ich gerade im VHS->DVD-Guide von SVCD-freak gelesen, man solle die enkodierte .m2v mit "bitrateView" auf topfield first prüfen und wenn "YES", dann das mit ReStream ändern.


    Bei progressiven Quellen spielen die field settings keine Rolle.

    Zitat von ZapBee

    bin ich stutzig geworden, habe ich ein paar threads gelesen zu dem thema, lese was von "CCE schiebt zeilen nach oben", wenn quelle bff ist. TMPGEnc zeigt mir an, daß die quelle bff ist. tatsächlich habe ich in den schwarzen balken ganz unten eine graue drin.


    Stimmt. die "Upper field first"-Option in CCE schiebt das Bild um eine Zeile nach oben. Ist natürlich Blödsinn für progressive Quellen. tff/bff-Anzeigen kannst Du bei progressiven Quellen getrost ignorieren.

    Zitat von ZapBee

    so, mit doubleweave().selectOdd() sieht das avi anschließend ziemlich scheiße aus. mit Restream wird das graue-Zeilen-Problem nicht behoben.


    Keine Änderung der Field Order durchführen, wenn die Quelle progressiv ist! (Außer phase shift Korrektur per Telecide()).

    bb

  • Zitat von bb


    Stimmt. die "Upper field first"-Option in CCE schiebt das Bild um eine Zeile nach oben. Ist natürlich Blödsinn für progressive Quellen. tff/bff-Anzeigen kannst Du bei progressiven Quellen getrost ignorieren.


    Keine Änderung der Field Order durchführen, wenn die Quelle progressiv ist! (Außer phase shift Korrektur per Telecide()).


    und wie kriege ich die graue zeile weg? geht auch bei "Upper field first"-Option "aus" nicht weg. und was ist mit makroblockoptimierung?

    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

Jetzt mitmachen!

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