Bobber - mal wieder etwas anders betrachtet

  • Ich habe verschiedene Bobber jetzt ebenfalls einer SSIM-Analyse unterzogen. Inwieweit diese überhaupt dafür geignet ist, werden die Leserzuschriften zeigen. :lol: Auch wollte ich damit die Ergebnisse von Doom9 für mich noch mal verifieren. Einfach irgendwelche Durchschnittswerte anzugeben, genügt meiner Meinung nach nicht. Ich will das Auf und Ab der Werte in einer Kurve sehen und daraus weitere Betrachtungen anstellen.

    Da MCBob nur im YV12-Farbraum hantieren kann, habe ich gleich zu Beginn mit ConvertToYV12() dafür gesorgt, dass alle die gleichen Chromainformationen erhalten (für den Fall, dass man auch die metrischen Werte von U und V vegleichen möchte).

    Grundlage der Untersuchugen war ein DV-Video („Der Zoobesuch“). Dieses habe ich mit SeparateFields einfach in seine Felder aufgedröselt. Das so entstandene Video (720x288@50p) stellte also meine progressive Quelle dar.

    Code
    AviSource("video.avi", audio=false)SeparateFields()ConvertToYV12()AssumeFrameBased()AssumeFPS(50, true)

    Diese progressive Quelle wurde dann interlaced.

    Code
    AviSource("video.avi", audio=false)SeparateFields()ConvertToYV12()AssumeFrameBased()AssumeFPS(50, true)AssumeBFF() SeparateFields().SelectEvery(4, 0, 3).Weave()

    Und anschließend mit den verschiedenen Bobbern wieder deinterlaced.

    Code
    AviSource("video.avi", audio=false)
    SeparateFields()
    ConvertToYV12()
    AssumeFrameBased()
    AssumeFPS(50, true)
    AssumeBFF() 
    SeparateFields().SelectEvery(4, 0, 3).Weave()
    
    
    # Yadif(mode = 1), MVBob(), MCBob() etc.

    Diese Ergebnisse wurden dann mit dem Original (meiner progressive Quelle) verglichen. Eigentlich wollte ich den gesamten Zooclip (Dauer: 1 Minute) auf einmal testen, aber bei MCBob schlichen sich nach einiger Zeit immer wieder eigenartige Fehler ein. Aber für kurze Szenen reichte es dann doch.

    Hier vorerst nur ein kurzer Ausschnitt, denn eventuell haben sich ja auch ein paar Fehler in meinen Betrachtungen eingeschlichen und eventuell bieten sich auch andere Bobber an, zu testen. ;)

    [Blockierte Grafik: http://img525.imageshack.us/img525/4094/derzoobesuchframe1344biqp3.jpg]

    Gemessen an anderen Bobbern, wie z. B. TDeint (in der Grafik nicht enthalten), macht Yadif(mode=1) eigentlich eine sehr gute Figur. Die Werte für MCBob sprechen für sich. Ich dachte bis jetzt immer, MVBob sei quälend langsam - gegenüber MCBob ist MVBob eine Rakete. :lol:

    P.S.: Werde die Tests mit einer "richtigen" progressiven Quelle fortsetzen.

  • Und so sieht das Ergebnis auf Basis einer „richtigen“ progressiven Quelle aus. Ich habe hierzu eine VQEG-Testsequenz verwendet.

    [Blockierte Grafik: http://img300.imageshack.us/img300/3306/src7ref625bobbersl3.jpg]

  • Archimedes1: so ein zitteriges Video kannst Du nicht für einen Deinterlacer-Test nehmen.
    Das spiegelt keinesfalls einen realen Deinterlacer-Einsatz an echtem Interlace-Video wieder.

    D.h. die Ergebnisse Deiner Messung werden nicht der echten Qualität der Deinterlacer gerecht.

    Ah okay, Du hast schon eine 'richtige' progressive Quelle benutzt.
    Welcher Art ist die denn? Kannst Du mal ein paar Eckdaten geben?

    Und irgendwie scheinen Deine Qualitätsmessungen nicht die Realität wiederzuspiegeln, denn bob() ist niemals besser oder gleichauf mit mvbob().

  • Und irgendwie scheinen Deine Qualitätsmessungen nicht die Realität wiederzuspiegeln, denn bob() ist niemals besser oder gleichauf mit mvbob().


    Gleiches ging mir auch durch den Kopf, konnte aber auf die Schnelle keinen Fehler entdecken. Werde mir das im neuen Jahr noch einmal anschauen.

  • Soll ich mich jetzt wirklich in die Brennnesseln setzen? :D

    Egal, was soll’s. Die progressive Quelle war, wie bereits beschrieben, eine VQEG-Testsequenz.

    [Blockierte Grafik: http://img405.imageshack.us/img405/9461/originalframe1300375x03cj3.jpg]

    Anbei die zugrunde liegenden AviSynth-Scripts.

    Referenzvideo:

    Code
    LoadPlugin("C:\Programme\AviSynth 2.5\plugins\RawSource\rawsource.dll")RawSource("src7_ref__625.yuv", 720, 576, "UYVY").Trim(10, 209)ConvertToYV12()ConvertToYUY2()


    Testvideo "Yadif":

    Code
    LoadPlugin("C:\Programme\AviSynth 2.5\plugins\RawSource\rawsource.dll")LoadCPlugin("C:\Programme\AviSynth 2.5\plugins\Yadif\yadif.dll")RawSource("src7_ref__625.yuv", 720, 576, "UYVY").Trim(10, 209)ConvertToYV12()AssumeTFF() SeparateFields().SelectEvery(4, 0, 3).Weave()Yadif(mode = 1)ConvertToYUY2()


    Testvideo "MVBob":

    Code
    LoadPlugin("C:\Programme\AviSynth 2.5\plugins\RawSource\rawsource.dll")Import("C:\Programme\AviSynth 2.5\plugins\MVBob\mvbob.avs")RawSource("src7_ref__625.yuv", 720, 576, "UYVY").Trim(10, 209)ConvertToYV12()AssumeTFF() SeparateFields().SelectEvery(4, 0, 3).Weave()MVBob()ConvertToYUY2()


    Testvideo "MCBob":

    Code
    LoadPlugin("C:\Programme\AviSynth 2.5\plugins\RawSource\rawsource.dll")LoadPlugin("C:\Programme\AviSynth 2.5\plugins\EEDI2\EEDI2.dll")LoadPlugin("C:\Programme\AviSynth 2.5\plugins\MaskTools 2\mt_masktools.dll")LoadPlugin("C:\Programme\AviSynth 2.5\plugins\MedianBlur\medianblur.dll")LoadPlugin("C:\Programme\AviSynth 2.5\plugins\MVTools 1.8.4\mvtools.dll")LoadPlugin("C:\Programme\AviSynth 2.5\plugins\ReduceFlicker\ReduceFlicker.dll")LoadPlugin("C:\Programme\AviSynth 2.5\plugins\RemoveGrain 1.0\RemoveGrain.dll")LoadPlugin("C:\Programme\AviSynth 2.5\plugins\RemoveGrain 1.0\Repair.dll")Import("C:\Programme\AviSynth 2.5\\lib\MCBob\MCBob_v03c.avs")RawSource("src7_ref__625.yuv", 720, 576, "UYVY").Trim(10, 209)ConvertToYV12()AssumeTFF() SeparateFields().SelectEvery(4, 0, 3).Weave()MCBob()ConvertToYUY2()


    Testvideo "Bob":

  • Zitat

    Warum "AssumeTFF()" vor dem interlacing (es ist ja zu diesem Zeitpunkt noch progressiv)?
    ("SeparateFields().SelectEvery(4, 0, 3).Weave()" gibt meines Wissens BFF aus)

    SeparateFields().SelectEvery(4, 0, 3).Weave() gibt nur dann BFF aus, wenn dies auch vorher so Signalisiert wurde. BFF ist die Standardsignalisierung in AVIsynth.
    wenn man TFF haben will, muss man demzufolge AssumeTFF() vor SeparateFields().SelectEvery(4, 0, 3).Weave() schreiben.

    SelectEvery(4, 1, 2) invertiert die zuvor signalisierte Fieldorder.

    Es gilt demnach folgendes:

    AssumeTFF().SeparateFields().SelectEvery(4, 0, 3).Weave() -> TFF
    AssumeBFF().SeparateFields().SelectEvery(4, 0, 3).Weave() -> BFF
    AssumeTFF().SeparateFields().SelectEvery(4, 1, 2).Weave() -> BFF
    AssumeBFF().SeparateFields().SelectEvery(4, 1, 2).Weave() -> TFF

    deswegen signalisiert man sicherheitshalber IMMER vor SeparateFields().SelectEvery(4, 0, 3).Weave() die gewünschte Ausgabefieldorder mit Assume?FF().

Jetzt mitmachen!

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