3D-Video mit AviSynth (Feldtrennung und Farbkorrektur)

  • Hallo Gemeinde,
    ich brauche eure Hilfe bei einem AviSynth-Problem: Angeregt durch einen Beitrag von mediachance habe ich mir zum Filmen (auf miniDV) einen sochen NuView-Adapter zugelegt. Da ich zum späteren Betrachten weder einen 50Hz-TV :) noch eine Steuerbox habe, möchte ich statt dessen eine 3D-Brille (kennt Ihr alle, links rote, rechts cyan Folie) verwenden. Im Gegensatz zum oben zitierten Beitrag, wo Oscar die Fields per VirtualDub trennt und separat(!) in neue AVIs speichert (um es anschliessend in einen Videobearb-Programm zu schneiden), möchte ich das zuvor geschnittene Video per AviSynth direkt an einen MPEG-Encoder durchreichen. Mir ist nur nicht klar, wie ich direkt auf die Fields zugreife - siehe [...], wobei im ersten Field der Blau- und Grünanteil, im zweiten der Rotanteil auf 0 reduziert/korrigiert werden muss.

    Das Skript könnte so aussehen:

    OpenDMLSource("3D_Video.avi")
    SeparateFields

    [...]

    Weave

    Ich weiss, Ihr könnt mir helfen.

    Gruss BJ1

  • Dein [...] könnte so aussehen:

    a=selecteven().irgendeinfilter()
    b=selectodd().irgendeinfilter()
    vid=interleave(a,b).weave()
    Return(vid)

    Ersetze "irgendeinfilter()" durch das, was Du tun möchtest. Möglichkeiten, die Farbanteile zu ändern, gibt es mehrere.

  • Danke Kika, SelectEven/Odd sowie Interleave war's :)

    Ich werd's heute abend so versuchen:

    OpenDMLSource("3Dvid.avi")
    SeparateFields()
    a=SelectEven().RGBAdjust(1,0,0)
    b=SelectOdd().RGBAdjust(0,1,1)
    Interleave(a,b).Weave()

    Danke!

    Gruss BJ1

  • Wieso denn interleave(b,a)? Wir haben doch bereits durch selecteven() und selectodd() unterteilt in erstes und zweites Feld. Das hat ja nichts mit botton oder top zu tun. Wir müssen die Order vor separatefields() durch assumetff oder assumebff richtig festlegen, damit seperatefields und weave ihre Arbeit richtig machen. Da weave() der genaue Gegenpart von separatefields() ist muss interleave(a,b) zwangsläufig auch so verwendet werden, oder sehe ich das jetzt falsch?

  • Nö, müsste eigentlich so richtig sein, aber die Field Order hält immer so viele Überraschungen bereit. Wenn selbst Script-Profis wie Scharfi da schon mal ins Schleudern geraten sind, was die Behandlung der Order in AVISynth betrifft... ich checke sowas immer gegen... trau, schau wem. :)

  • Zitat

    Wenn selbst Script-Profis wie Scharfi da schon mal ins Schleudern geraten sind

    Pah. alles üble Nachrede ;)

    das script sollte aber so - hinsichtlich der fieldorder - funktionieren, denn die wirh ja mitgeschliffen.
    Es reicht also, die Fieldorder einmal anzugeben, und zwar vor separatefields()

    BJ1: kannst Du ein Sample-Video zur verfügung stellen?
    Denn mit ein wenig trickserei kann man ein 3D-anaglyph (heisst dieses rot/cyan verfahren so?) video, welches mit shutter aufgenommen wurde flackerfrei umrechnen.

  • @Scharfi: Ein kleines Sample (Original DV) stelle ich gern bereit, komme aber erst am Wochenende dazu (Sch... Studium/Stundenplan). In der Zwischenzeit habe ich mich mal mit dem Anaglyph-Verfahren ein wenig auseinandergesetzt und aus im Netz verfügbaren Bildern (http://www.colorstereo.com/anaglyph.gal/ana_dir.html) mal eine Slideshow gebaut, nach M2V rechnen lassen und mir das Ganze mal auf'm TV angeschaut. Ich muss sagen, das haut einem echt vom Hocker :ja: . Besorgt Euch schon mal die passenden Brillen :cool: .

    @Rest: Zum AviSynth-Script: AssumeBFF muss m.M. nciht explizit angegeben werden, da AviSynth von BFF ausgeht (hab' ich bei Slashcam irgendwo gelesen). Schaden kann es aber nicht.

    Gruss BJ1

  • So, hier mal der Link zum Sample (10 sec DV-AVI, also 35 MB!).

    Meine ersten Ergebnisse: Mit folgendem Script (Zerlegung in Halbbilder und Farbanpassung) kommt der 3D-Effekt gut raus, jedoch flackert es im 25Hz-Takt wie verrückt, sowohl auf einem 100Hz-TV als auch auf einem 37er 50Hz-TV, jedoch nicht am Videoausgang (FBAS) einer Matrox Parhelia. Insgesamt wird das Bild dunkler als bei einer normalen Aufnahme.

    AVISource("10sec2.avi")
    ConvertToRGB24
    AssumeFrameBased()
    SeparateFields()
    a=SelectEven().RGBAdjust(1,0,0,1)
    b=SelectOdd().RGBAdjust(0,1,1,1)
    Interleave(a,b).Weave()

    Im 2. Versuch habe ich die Fields auf Framegröße gebracht und anschliessend per Overlay gemischt. Das flackert nicht, jedoch scheint der 3D-Effekt doch etwas nachzulassen (ist aber insgesamt immer noch gut sichtbar).

    AVISource("10sec2.avi")
    ConvertToRGB24
    AssumeFrameBased()
    SeparateFields()
    LanczosResize(720,576).Sharpen(0.3)

    a=SelectEven().RGBAdjust(1,0,0,1)
    b=SelectOdd().RGBAdjust(0,1,1,1)
    Overlay(a,b,opacity=1,mode="Add")

    Anmerken möchte ich noch, das der 3D-Effekt in folgender Reihenfolge am besten zu betrachten ist:

    TFT-Monitor
    82cm/100Hz TV
    37cm/50Hz TV,

    wobei man sich am 37er schon ordentlich anstrengen muss.
    Ich muss allerdings sagen, das man mit dem Adapter und einiger Übung doch schon beeindruckende (oder besser außergewöhnliche) Aufnahmen machen kann. Innenaufnahmen sollte man allerdings besser vergessen, denn der Adapter braucht vieeeel Licht.

    Gruss BJ1

Jetzt mitmachen!

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