AVISynth - Audio-Spur Asynchron / läuft mit einer anderen Geschwindigkeit

  • Hallo Zusammen,


    ich hoffe das ich im richtigen Bereich poste...


    Ich habe mit OBS ein Spiel aufgenommen und mit MixCraft habe ich den Sound und meine Stimme separat aufgenommen.
    Nun habe ich in Premiere Elements festgestellt das die Stimme aus der Video und separaten Audiospur nicht synchron sind.


    Von der Geschwindigkeit her ist der Gamesound mit dem Faktor 1, also Synchron und das für die ganzen 2h.
    Bei der Mikrofonspur ist aber ein Faktor von 0.9999167360532889 was bedeutet das es anfangs synchron ist.


    Wie kann ich in AVISynth (MeGUI) nur die Mikrofonspur an den Rest anpassen?


    Zudem muss ich den Offset der Audiospuren entfernen, also die ersten 5449 Frames entfernen, jedoch weiß ich wie das geht.



    Könnt ihr mir weiterhelfen? =)



    Viele Grüße


    Dominator

  • Ich glaube mit AviSynth geht das gar nicht, oder aber es wäre ein elendes Gefrickel und Skriptgeschreibe, bei dem du dich dann länger aufhältst als nötig. Ich persönlich würde eher zu Audacity greifen und die Samplerate der zwei Tonspuren überprüfen und gegebenenfalls anpassen, und wenn das noch nicht hilft, die Mikrofonspur eben um ein winziges Stückchen verlängern. Ist zwar auch etwas Frickelarbeit, aber da kannst du dir wenigstens direkt anhören, wie das Ergebnis klingt.

  • Entweder mit AssumeSampleRate auf 44100 bringen (oder was auch immer deine Samplerate ist)
    http://avisynth.nl/index.php/AssumeSampleRate


    oder sogar an die FPS des Videos anpassen
    http://avisynth.nl/index.php/ResampleAudio


    Ersteres dürfte dein Problem dann ja schon lösen. Fragt sich mich nur, wie es von der 44100 abdriften konnte?


    AssumeFPS mit sync_audio=true würde ebenso das Audio an die Videospeed anpassen (Audio an Videospeed anpassen wäre mit Audacity zb schlecht möglich :D )


    Das ist kein Gefrickel, das ist das simpelste des Erdballs.


    Die Frames kannst ja dann in deinen Premiere entfernen, ansonsten halt Audiotrim.

  • Also ich habe mit OBS beide Spuren aufgenommen (schlechte Quali und Mikro leider nur Mono), sind im Video und wenn ich die 2 Spuren von Mixcraft nehme, dann passen die Gamesound-Spuren sauber übereinander, nur die Mikrofon Spur ist etwas langsamer, hab das gleiche Problem auch bei meinen Webcam Aufzeichnungen wenn ich das Game mit Fraps oder DXTory aufnehme.


    Da ich das Problem auch bei der Webcam habe, würde ich gerne nen Script basteln, alles andere wäre doch bei jeder Aufnahme die ich zukünftig mache, sehr unnötig und Zeit intensiver.


    Ich habe die Audiospuren mit MediaInfo angeschaut, leider keinen Unterschied, da scheint wohl OBS die Probleme zu verursachen, da es ja auch Probleme bei der Webcam gibt...


    Bei der Webcam würde ich das so machen:
    - Video Laden (Webcam ist 30FPS und soll auf 60FPS)
    - dann 60 * 0,9999167360532889 = 59,99500416319733 FPS


    - dann die Video FPS auf 60 stellen


    Somit sollte das dann auch passen oder?
    Ich habe damals festgestellt, das bei allen Aufnahmen der Faktor der gleiche ist.



    Bei meinem aktuellen Problem mit dem Sound würde ich schauen das ich die Mikrofon-Spur die passt, also die identisch mit DXTory und Fraps ist als Standard nehme und die Gaming Spur und das Gaming Video anpasse.


    Hier müsste ich aber dann das Spiel und den Spielsound mit AudioDub() zusammen fügen, die FPS anpassen und dann wieder trennen, oder?
    Ich kann leider sonst nicht den Gamesound und das Mikrofon mixen, wie stelle ich das am besten an?
    Ich würde gerne da ich die Audiospuren noch Synchronisiere, das ganze gerne nach wieder aus der Video-Variable ziehen und dann wieder als reine Audio-Variable weiterverarbeiten.
    (Also Amplify, EQ, MonoToStereo usw.)


    Ich finde nur keine Funktion die das kann, und wenn Ihr sagt das so so eine gute Möglichkeit ist, das zu machen, dann wäre es echt nur die Funktion die mir fehlt.^^


    Ich hoffe ich hab nicht ganz so wirr geschrieben!! =P


    Danke und Happy Halloween.


    Viele Grüße
    Spohky

  • Mal davon abgesehen ob ich MixCraft nutze oder nicht, dieses Problem habe ich auch wenn ich mit DXTory aufnehme und mit OBS meine Webcam, also ist es egal ob MixCraft nutze oder nicht...
    OBS nimmt scheinbar mit einer etwas unterschiedliche Geschwindigkeit auf wie MixCraft und DXTory in der Mikrofon Spur.


    Edit:
    Wie kann ich das denn am besten machen mit dem ändern der FPS?
    Also die Befehle, irgendwie kommt er mit der komma / punkt Zahl nicht klar und bringt immer eine Fehlermeldung.


    Wäre super wenn Ihr mir helfen könntet.

    Einmal editiert, zuletzt von DominatorLP () aus folgendem Grund: Editiert um keinen Doppelpost zu machen...

  • Mal ein paar Sachen von mir für AVISynth:





    Lass dich nicht abschrecken davon was da steht, das meiste ist eh nur für die Infoanzeige.
    Den Rest entnimmst du Zeile 1 - 9.




    Der ganze Kram schiebt die Audiospur um x Sek nach rechts. Sprich wenn irgendwas Asynchron ist aufgrund das sich die Audiospur verschoben hat, kannst du das damit richten.


    Und hier noch der Kram für eine Links Verschiebung. Gleiches Prinzip wie eben:


    Bedenke das es fertige Funktionen sind. Du brauchst das nur in Skript entsprechend kopieren und rufst nur diese Funktion entsprechend mit den Parametern auf.


    z.B:


    Code
    AVISource("xyz.avi", true).AssumeFPS(xyz)
    Sync(0)
    ...
    Irgendwo steht die Funktionen für Sync am Ende....
    ...

    Kannst eine Funktion auch mehrmals aufrufen.


    In dem Abstrakten Beispiel oben wird die Videolänge auf Audiolänge angepasst.
    Würde dort Sync(1) stehen würde die Audiolänge auf Videolänge angepasst werden.





    Bei der Webcam würde ich das so machen:
    - Video Laden (Webcam ist 30FPS und soll auf 60FPS)
    - dann 60 * 0,9999167360532889 = 59,99500416319733 FPS


    - dann die Video FPS auf 60 stellen

    Wie lang sind denn beide Aufnahmen die du hast? Du solltest auf jedenfall beachten das wenn du beides simultan aufgenommen hast, beide Videos entsprechend ungefähr die gleichen Längen haben sollten.
    Das heißt eine Beschleunigung ist da dann Fail am Platze.


    Überprüfe erst mal ob es an einer Verschiebung liegt.


    Um das zu vergleichen kannst du beide Videos in AVISynth laden und die FPS mit ChangeFPS auf 60 FPS eichen.


    Die Länge ändert sich dabei nicht. Jetzt nur noch so aufbauen das du die Möglichkeit hast die Spuren entsprechend noch zu schieben und gleichzeitig am Ende eine Zusammenführung hast.


    Wenn du das mit AVSPmod machst, kannst du das so eine Track Verschiebung von Spuren machen:


    In AVSPmod kannst du dann an der Seite ein Slider finden mit der du die Kamera Spur verschieben kannst. Frame für Frame entsprechend zum anderen Video. Einmal für eine Links Verschiebung und einmal für eine Rechtsverschiebung. 5000 Frames sollten da reichen. Soviel wirst du glaub ich nicht verschieben wollen.


    Abspielen kannst du dann mit der Taste neben dem Play Knopf. Wähle am besten ein externes Programm wie VDub 32Bit. Dann kannst du dir das Ganze auch anschauen.



    Joa... theoretisch hättest du dann auch schon alles um das Problem mit AVISynth zu lösen.


    Man kann vieles auch Vereinfachen mit Funktionen. Spart man sich den Schreibaufwand auf ein relatives Minimum.

  • @Sagaras wow, danke für deine Mühe! :)


    Ich weiß das ich bei x frames 2,5 Versatz habe und bei x2 frames 5.
    Es ist alles was mit OBS aufgenommen wurde, immer der gleiche Faktor.


    Die Aufnahmen die ich habe sind 1x 3h und dann noch ne 2. Session mit ca 7h und der Faktor bleibt immer gleich, egal ob ich bei 1h oder bei 5 oder bei 7h bin.


    Das Problem ist das die Aufnahmen gleich lang sind, aber bei der OBS Aufnahme in einer anderen Geschwindigkeit ablaufen und das aber nur für die Mikrofon-Spur.


    Darum würde ich ja sagen, Video mit dem Mikro zusammen packen, die FPS auf die 59,99500416319733 FPS verändern und dann sagen es sind 60 FPS und somit ist das ja angepasst, oder liege ich da falsch, ich habe versuche mit 60 auf 30 gemacht und da war es dann doppelt so lange.
    Ich nutze das ja für Wiederholungen in Schreckmomenten, da sage ich das soll langsamer abgespielt werden, und da wird das z.B. von 60 auf 30FPS gestellt und dann sage ich das sind 60 FPS und schon läuft es halb so schnell ab.


    Nur mein Problem ist das es mir immer nen Fehler an der Zeile sagt, wo ich auf 59,99500416319733 FPS stellen möchte, egal ob . oder , und da bräuchte ich einen Rat von dir, das würde mir schnell helfen und ich kann das ganze endlich an MeGUI weitergeben ohne Probleme und die Videos endlich raus hauen, :)



    Und du hast mir mit zumindest einer Sache sehr viel weiter geholfen:

    Code
    Video = clip0.killAudio()
    Audio = clip0.KillVideo()


    Nun kann ich mein Script in so weit fertigstellen das es Audio von Video trennen kann, danke ich habe schon lange nach so einem Befehl gesucht, aber scheinbar mit den falschen Suchbegriffen.


    Edit:
    Oh man jetzt verstehe ich warum es den "denominator" bei AssumeFPS gibt, ja gut ich habs verstanden und vielen Dank, ich mache hier nachher Dicht =)

    Einmal editiert, zuletzt von DominatorLP ()

  • Oh man jetzt verstehe ich warum es den "denominator" bei AssumeFPS gibt

    Ist die gleiche Logik wenn man das Video in einem Hexeditor betrachtet.


    Daten können nur mit exakten ganzwertigen Zahlen gespeichert werden. Daher werden in einer Datei wenn es um FPS geht auch jeweils 2 Werte gespeichert. Einmal der Numerator (Zähler) und einmal der Denominator (Nenner).


    So hast du z.B. für 29,970 FPS eigentlich mit den Werten 30 / 1,001 zu tun bzw. 30000 / 1001
    Oder der Wert obliegt einem exakten Wert, weil die Software zu blöde war. Dann hast du natürlich 29970 / 100


    Und so stehen solche Werte dann halt auch in der Datei dann drin. Meist als unsigned 4 Byte pro Zahl. Sprich die FPS Angabe beträgt somit genau 8 Byte.


    Dann steht es meist so da:
    unsigned = 01 00 00 00 1E 00 00 00 -> signed = 00 00 00 01 00 00 00 1E -> dez = 1 und 30


    Das sind dann Nenner und Zähler. Sprich 30 FPS, weil 30 / 1 = 30


    Jedes Programm hantiert also genauso. Immer 2 Werte für die FPS Angabe.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!