Mergen von mehreren Videos in AVS-Skript

  • Hallo zusammen!

    Sagen wir mal, ich habe die folgenden Videodateien:

    A: MP4, x264, 23.976 fps, 640x480
    B: WMV, WMV1, 25 fps, 854x480

    Und ich möchte diese beiden wie folgt zusammenfügen:

    vid1/B(0,2123)++vid2/A(2400,32000)++vid3/B(31723,34000)

    Die Zahlen in Klammern sollen die verwendeten Frames der jeweiligen Videos werden. Ich hätte also gerne Anfang und Ende von B, dafür aber den Mittelteil von A.

    Das Output-Video sollte eine Auflösung von 640x480 bei 25 fps haben. Ich nutze normalerweise Spline16Resize um meine Wunschauflösung zu erreichen (und in einem Atemzug dabei zu croppen).

    Kann mir jemand erklären, wie ich mehrere Videoquellen geladen bekomme und sie wie oben zusammenpuzzle? Und das bei den gewünschten fps im Output?


    Danke für jede Hilfe! [Blockierte Grafik: https://forum.videohelp.com/images/smilies/smile.gif]

  • allein, wenn du die videos nur ananander reihen willst hast du schon folgende probleme:

    - unterschiedliche codecs (A/V) --> neucodierung

    - unterschiedliche FPS, "A" muss zeitlich contvertiert werden, d.h. microruckler + geisterbilder

    - unterschiedliche Auflösung, was für ein Videobild hast du überhaupt?

    . für "A": letterbox? (16:9 in 4:3), vollbild? (4:3) oder anamorph? (16:9 in 4:3)

    . für "B": letterbox? (21:9 in16:9), vollbild? (16:9) oder anamorph? (4:3 in 16:9)

    du musst erstmal klären:

    - was ist dein zielformat? für welches abspielgerät? (Audio/Video-codec + container)

    - 25fps, geklärt.

    - das auflösungs/inhalt problem muss erst geklärt werden,

    . um überhaupt urteilen zu können, was die Zielbildfläche sein soll (640x480, ungeklärt)

    wenn ich davon ausgehe, dass beide videos vollbilder sind,

    dann müsste "A" auf 854x480, mit schwarzen balken links & rechts, aufgepumpt werden

    das ganze kann man sicherlich in avisyth packen,

    um das doppelkonvertieren zu umgehen.

    aber das script wird sicher nicht kurtz.

    da muss jemand anderes ran.

    wenn es sich nicht vermeiden lässt und der inhalt es zu lässt,

    dann würde ich die größstmögliche bildfläche (854x480) verwenden

  • Danke für die umfangreiche Antwort. :)

    Ja, es klingt tatsächlich so, als wäre ein ganz schön langes Skript vonnöten...

    Also die Neucodierung ist für beide Videos kein Problem, sondern sogar erwünscht, da ich noch ein paar Filter zur Bildaufbereitung verwenden möchte.

    Das 23.976 fps Video müsste in der Framerate auf jeden Fall konvertiert werden, da es sonst mit der Tonspur, die ich einsetzen möchte, nicht passt.

    Das Bild ist eigentlich 4:3. Video B ist eine Aufzeichnung eines Videostreams direkt über die Grafikkarte durch Audials One. Fälschlicherweise wurde es in 16:9 abgespeichert, d. h. alles wirkt gestreckt und müsste wieder auf 4:3 zusammengestaucht werden.

    Beide Videos haben nur leichte schwarze Ränder, die aber nichts mit Letterbox zu tun haben.

    Also...

    A: Vollbild 4:3

    B: Anamorph 4:3 in 16:9

    Im Output wären 640 x 480 (Vollbild) daher wünschenwert.

    Ich könnte theoretisch einfach beides in ein zusammengefügtes Video konvertieren und dann mein Skript darauf aufbauen ohne zwei sehr unterschiedliche Quellen beachten zu müssen, aber das wäre dann halt eine doppelte Konvertierung und vermutlich unnötiger Qualitätsverlust.

    EDIT: Hab tatsächlich gerade etwas zusammengebastelt, was zu helfen scheint:

    Code
    A = DirectShowSource("A.mp4").ChangeFPS(25).Spline36Resize(640,480).convertToYV12.converttomono() # or AssumeFPS(25, sync_audio=true)
    B = DirectShowSource("B.wmv").Spline36Resize(640,480).convertToYV12.converttomono()
    
    
    B.Trim(141,2006)++A.Trim(1870,32454)++B.Trim(32586,34652)

    Ja, der Ton wird Mono, aber der ist mir relativ egal, da die Spur eh rausfliegt. Sollte nur auf die Schnelle helfen, damit die Videos zueinander passen.

    Einmal editiert, zuletzt von KenshinX (28. Juli 2020 um 02:58)

  • also video "A" ist die framerate unbekannt.

    das würd ich erstmal klären.

    für sowas hatte ich früher virtualdub verwendet und dann die framrate variiert.

    mit avisynth sicher eleganter lösbar.

    vielleicht haste ja glück und es ist 25fps, wenn du sagst es ist asyncron.

    aber capturing macht aber wegen gedropte frames und andere syncronisations probleme eine liniare anpassung mit einer "dvd"-tonspur fast unmöglich.

    wenn du "glück" hast, brauchst du ein videoprogramm mit timeline um das herauszufinden.

    was ich früher gemacht hatte, was für jede quelle ein getrenntes script erzeugt und dann im masterscript den feinschliff gegeben.

    falls man mit den variablen durcheinanderkommt ;D

    gibt es nicht die regel, dass man directshow nicht verwenden soll? da es bei der framesuche nicht so genau ist.

    es gibt andere loader die akkurater sind.

    z.b. ffmpegsource oder so...

Jetzt mitmachen!

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