Sync Audio bei changeFPS()

  • Hi,

    ich nutze dieses einfache Skript um 2 Videos synchron zu halten und dann die deutsche Tonspur unter dem SD-Video unter das HD-Video zu legen.

    Code
    v1 = FFVideoSource("input1.mkv", threads=1)
    a1 = FFAudioSource("input1.mkv")
    hd1 = AudioDub(v1,a1)
    v2 = FFVideoSource("input1.mkv", threads=1).BicubicResize(1920,1080)
    a2 = FFAudioSource("input1.mkv")
    sd1 = AudioDub(v2,a2).changefps(23.976)
    StackHorizontal(hd1,sd1)
    #audiodub(hd1,sd1)

    StackHorizontal nutze ich um beide Videos auf synchronität zu püfen, das Encoding mache ich dann indem ich auduidub() auskommentiere. Normal habe ich 25fps-SD-Quellen und 23.976-fps-HD-Quellen und das geht mit AssumeFPS(). Der Filter hat eine Audio-Sync-Funktion und ich muss mich um nichts weiter kümmern. Beim aktuellen Video muss ich aber ChangeFPS() verwenden. Keine Ahnung wieso. Die Videos sind absolut sync, aber Audio nicht.

    Wie kann ich trotz Einsatz von ChangeFPS dafür sorgen, dass Audio synchron zum Video bleibt?

    _________________________

    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]

    :D

  • Mal geschaut was passiert wenn Du das ChangeFPS nur auf die Videospur anwendest?

    Alles sehr unklar, da der Input immer den gleichen Namen hat,...

    vermute:

    v1 = HD Variante mit 23,976 fps und XY Ton

    v2 = SD Variante mit 25fps und Deutschem Ton

    a1 = deutscher Ton

    a2 = XY Ton

    Zitat

    Du stackst also Videos unterschiedlicher Framerate? In welcher Geschwindigkeit wird denn dann das Ergebnis abgespielt?

    Denke nicht, er passt die Framerate des einen Videos (v2) mit Changefps an, so dass beide die gleiche Framerate haben

    Zitat

    Und - welche Tonspur von den beiden hörst du dann (oder beide gemischt)?

    Das würde mich auch interessieren was da passiert.

  • Ich muss das Thema nach fast 3 Jahren nochmal aufgreifen. Ich weiß nicht mehr wie ich das damals gelöst habe.

    Kurze Erklärung was ich genau mache:

    1.) Ich lade ein HD- und ein SD-Video in Avisynth

    2.) falls nötig suche ich einen gemeinsamen Startpunkt mit trim(), z. B. wenn beim SD-Video der Vorspann fehlt (das fehlt im Script oben, war da scheinbar unnötig)

    3.) ich passe die Framerate des SD-Videos an die Framerate des HD-Videos an und lasse beide mit stackhorizontal() nebeneinander stellen; dann springe ich zu einem x-beliebigen Punkt und prüfe ob die beiden Bilder gleich sind

    4.) wenn alles i.O. ist zeigt jede Bildnummer im HD-Video das exakt gleiche Bild im SD-Video an - beide sind "synchron". Da die Audiospur des SD-Videos mit synchron mit dem SD-Video ist und das SD-Video "synchron" mit dem HD-Videos ist, ist auch "SD-Audio" mit "HD-Videos" synchron: Ziel erreicht

    Das ganze geht auch anders, wenn man aber schneiden muss (z . B. Punkt 2 oder es gibt ganze Szenen die sich unterscheiden oder auch nur geringe Unterschiede bei der Länge dunkler Zwischenszenen) ist Avisynth recht einfach.

    Problem: Wenn ich AssumeFPS auf das SD-Video anwenden kann, kann ich "sync_audio=true" setzen. Framerateänderungen des SD-Videos führen nicht zu einem asynchronen Ton des SD-Videos. Da SD-Video und HD-Video "synchron" sind, ist auch HD-Video und SD-Audio weiterhin synchron. Muss ich aber ChangeFPS auf das SD-Video anwenden gibt es kein "sync_audio". Das heißt der Ton des SD-Videos wird asynchron sowohl zum SD-Video als auch zum HD-Video.

    _________________________

    Zitat

    Zieht ein Bienenschwarm aus, so wird er herrenlos, wenn nicht der Eigentümer ihn unverzüglich verfolgt oder wenn der Eigentümer die Verfolgung aufgibt.


    § 961 BGB [Eigentumsverlust bei Bienenschwärmen]

    :D

Jetzt mitmachen!

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