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.