Programm zum synchronisieren von AC3-Tonspuren

  • Hi, ich möchte hier ein Java Programm vorstellen, dass ich selbst geschrieben habe.


    edit: Achtung, dies ist die vorgängerversion meines aktuellen programmes. die aktuelle version setzt zum schneiden auf delaycut und ist hier zufinden http://board.serienjunkies.org…php?p=298626&postcount=60


    Mit diesem Programm ist es möglich (in Zusammenarbeit mit dem gratis Programm mpeg2schnitt) aus ac3 Tonspuren gezielt etwas rauszuschneiden, so dass diese dann synchron mit dem Video laufen.


    Geschrieben habe ich das Programm, um damit die deutsche ac3 Spur an eine englische hd Aufnahme einer Stargate Staffel anzupassen.


    Da das Programm als Quelltext vorliegt, sieht das Arbeiten damit folgendermaßen aus:


    Ich starte es über eine .bat Datei, es öffnet sich ein Eingabefenster, darein kopiere ich die Schnittanweisung. Daraus erstellt mein Programm eine schnittliste, die ich in mpeg2schnitt importiere.


    Mein Programm kann also:
    -Aus den Audioversetzungen (im vlc "Audioverzögerung" genannt) und den Schnittzeiten (also die Zeitangabe, wann sich die Audioverzögerung ändert) eine schnittliste erstellen.


    Mein Programm kann nicht:
    -Stille einfügen. es kann also nur Ton rausschneiden. (bzw. die Audiospur doppelt laufen lassen)
    -Schneiden auf Millisekunden genau. Die Schnittzeit wird in hh:mm:ss angegeben.
    -Eine Audioverzögerung von mehr als -99999ms also -100s ausgleichen.
    -Das Schneiden von anderen Formaten als ac3 hab ich nicht versucht, das Programm ist durch die ac3-Framelänge von 32ms vermutlich nicht für das Schneiden von mp3 etc. geeignet.


    Anwendung:
    Man fügt die anzupassende Tonspur in das Video ein, so dass man das Video im vlc öffnen und mit den Hotkeys "j" und "k" die audiospur anpassen kann.
    Die als synchron empfundenen Audioversetzungen notiert man sich, und dazu noch den Zeitpunkt, bis wohin diese Audioverzögerung gilt.


    Diese beiden Informationen schreibt man in folgender Form in eine .txt oder .doc (xxxxxx =Audioverzögerung in ms):
    xxxxxx hh:mm:ss xxxxxx hh:mm:ss xxxxxx hh:mm:ss
    und so weiter, dabei ist es wichtig, das die Audioverzögerung genau 6 Zeichen lang ist, danach ein Leerzeichen folgt und das danach 8 Zeichen für die Zeit folgen.


    Beispiel:
    Ich habe also die Schnittdaten für eine Folge:

    Code
    1. -05200 00:06:16 -06150 00:12:30 -07950 00:41:02


    das bedeutet, -5200ms Audioverzögerung bis 00:06:16, danach -6100ms Audioverzögerung bis 00:12:30 dann -7950ms Audioverzögerung bis 00:41:02, die letzte Angabe ist gleichzeitig auch die Länge der entstehenden Audiodatei.


    Aus dieser Eingabe macht mein Programm:

    Code
    1. 00:00:05:06 -- 00:06:21:05
    2. 00:06:22:04 -- 00:12:36:03
    3. 00:12:37:29 -- 00:41:09:28


    die Schnittliste wird in einer .txt Datei gespeichert.


    Jetzt fügt man die ac3 Spur in mpeg2schnitt ein und lädt die schnittliste.txt. Nach dem Schneiden fügt man die ac3 Spur wieder in das Video ein und sie sollte synchron laufen.





    Installation:
    Da das Programm als Code vorliegt, benötigt man die "Java SDK" (http://www.chip.de/downloads/Java-SDK_12992754.html) um das Programm zu starten.


    Ich starte das Programm über eine .bat Datei.
    Inhalt der bat:


    Code
    1. set path=.;C:\Program Files (x86)\Java\jdk1.6.0_18\bin\
    2. c:
    3. cd Mpeg2Schnitt
    4. javac mpeg2Schnitt.java
    5. java mpeg2Schnitt
    6. schnittliste.txt


    Die erste Zeile der .bat ist anzupassen. (zur Kontrolle: in dem Verzeichnis muss die datei javac.exe erhalten sein)



    Den Quelltext des Javaprogrammes speichert man in eine Textdatei, benennt diese in "mpeg2schnitt.java" um und speichert sie in den Ordner "Mpeg2Schnitt" direkt auf C:





    mfg stargatefreak



    PS.: Wenn jemand Fehler im Programm findet (falls das bei der Strukturierung überhaupt möglich ist :D) oder Verbesserungsvorschläge hat (z.B. wie ich Stille einfügen kann) immer raus damit :)

  • Also wenn ich Dich richtig verstehe, dann willst Du dubben. Und das geht mit entsprechender Software besser, also mit dieser Flickschusterei (nicht gegen Dein Programmieren, das will ich hier nicht in Abrede stellen ...)
    Dubben funktioniert besser und vor allem genauer, wenn Du bei Videospuren vergleichst. Dann kannst Du genau die Szenenwechsel anpassen und Deine Audiospur passt genau zum Bild ...

  • Naja wenn ich aber sehe, dass er Stückchenweise syncen will, bietet sich IMHO Dubben eher an.


    Er muss IMHO die ganze Folge schauen, um den Versatz festzustellen und gleichzeitig darauf achten, ob er sich nicht in die "andere Richtung" verschiebt. Und das dann auch noch "millisekundengenau" ...
    Da bietet es sich doch eher an, aus dem AC3 ein Six-Channel-Wave-File zu machen, beide Video kurz in einem passenden Programm (z.B. Magix Video) per Bildvergleich anzupassen und aus dem exportieren Wave die passende AC3-Spur erstellen.
    Das dürfte IMHO genauer sein, als den Versatz im vlc per "Gefühl" zu ermitteln.


    Aber ich lasse mich gern auch berichtigen ;)

  • hi,


    mit welchen programm man den audioversatz herrausfindet ist ja egal, aber die ganze folge gucken, muss ich sowieso, da nicht über das ganze video hinweg der selbe Audioversatz ist. jedesmal wenn die werbung bei der hd aufnahme rausgeschnitten wurde, ändert sich der Versatz.
    mit dem programm Magix Video habe ich noch nicht gearbeitet, aber ich werds mal damit probieren.


    mfg stargatefreak

  • Ich finde die Idee zum Programm ziemlich gut. Einfach auch deshalb, weil AC3 sich eigentlich perfekt zum verlustlosen Schneiden/Zusammenfügen eignet (besser als MP3 auf jeden Fall) und außerdem meiner Erfahrung nach kein Programm beim Schneiden von Mehrkanal-WAVs wirklich zufriedenstellende Ergebnisse liefert. Ich hab irgendwie immer den Eindruck, das einzelne Kanäle nach den Schnitten (zwar im winzigsten Millisekundenbereich... aber eben im Zusammenspiel mit den restlichen Kanälen hörbar) zeitlich minimal abweichen. Zudem ist die Quelle üblicherweise professionell encodet - und bei einem Reencoding gehen nicht nur die Qualität, sondern auch grundlegende Infos (z.B. zur Dialog-Normalisierung) flöten, da die beim erneuten Encoden oft nicht weiter beachtet werden.

  • moin, ich habe kein kleines update am quelltext gemacht. die variable in der die versetzten frames gespeichert wurden (iversframes) ist jetzt kein integer mehr sondern float (der ordnung halber in fversframes umbenannt). dadurch werden jetzt die kommastellen gerundet, statt wie vorher einfach abgeschnitten.


    ich hab auch eine idee wie man stille einfügen könnte, bin mir aber nicht sicher, ob das klappt. meine idee ist, wiederholt das erste frame einzufügen (welches vermutlich bei den meisten audiospuren stille enthällt)


    mfg stargatefreak

  • Gibts eine Anleitung wie man das SDK installiert? Klappt nicht so richtig.


    Zuerst kommt das Fenster "Java EE 6 SDK" mit dem Status "initializing".
    Danach kommt ein neues Fenster "Java EE 6 SDK-Vorschau" wo man sich durchklick muss (Installationsverzeichnis C:\glassfishv3, Passwort, Updateoption).


    Schliesslich die Meldung dass JDK oder JRE nicht gefunden wurde und man muss dann einen Speicherort für Java(TM) SDK eingeben.
    Ich habe Java 5 Update 12 und Java 6 Update 15 drauf und wie soll ich den Speicherort für etwas angeben, was noch gar nicht drauf ist, weil ich es doch gerade versuche zu installieren?
    Alles sehr merkwürdig.

  • nabend,
    ich muss zugeben, das ich die installation nicht ausprobiert hatte, da ich ja java schon drauf hab. war schon froh, das ich überhaupt etwas auf der java seite gefunden hatte, da hab ich nicht gemerkt, das das "EE" zuviel war. es reicht auch das "Java SDK". wie gesagt, die java seite ist unübersichtlich, habs jetzt auch nur auf chip gefunden http://www.chip.de/downloads/Java-SDK_12992754.html


    edit: außerdem ist eine anpassung der .bat datei nötig, siehe oben

  • ja das nervt mich auch, das sga staffel 5 nur stereo ist. lädst du die folgen dann auch hoch? in 720p dann oder?


    edit: ah alles klar, hab grad den thread gefunden in dem du darüber schreibst. das ist genau die Situation, die ich mit der 8ten staffel habe: der ton von den dvdrips ist anders geschnitten, als der von der tvaufnahme (weil da die werbung rausgeschnitten wurde). genau für diesen zweck habe ich mir das javaprogramm geschrieben. du kannst also die deusche tonspur garnicht synchron bekommen, wenn du nur streckst und delay hinzufügst.


    an jeder stelle, wo werbung rausgeschnitten wurde, ergibt sich ein anderes delay. das können schonmal gut 6 schnitte für eine folge sein (z.b. s08e04)

  • Stehe gerade vor einem anderen Problem.
    An einem Schnittpunkt wurde irgendwie zu wenig aus der Werbung rausgeschnitten.
    Nach der ersten Berechnung fehlen mir ca. 700ms ton :eek:


    Ich habs übrigens nicht geschafft, die Schnittliste in mpeg2schnitt zu importieren.
    Die wird zwar mit deinem Skript korrekt erstellt, aber das Schnittprogramm mag sie irgendwie nicht.
    Mache das jetzt alles manuell.

  • Genau so habe ich es auch gemacht, klappt nur nicht.
    Das zweite Problem ist aber das, wo ich mir sorgen mache. Müsste da wohl das komplette Audiofile neu encoden wenn ich keine andere Möglichkeit finde.

  • 1. Keine Fehlermeldung, es passiert einfach gar nichts, das Schnittfenster bleibt leer


    2. Mein anderes Problem, nach der entgültigen Berechnung sind es jetzt 300ms Ton die mir fehlen.
    Genauer gesagt sind es 300ms zuviel Bildmaterial.
    Gibt nicht zufällig ein simples Schnittprogramm für h.264 Material das ähnlich funktioniert?

  • Ich gebs auf.
    Habe mich eben an der zweiten Folge versucht.
    Der Videotrack ist 6 Sekunden länger als der Audiotrack, da wurden wohl durch die Werbepausen kurze Doppelszenen reingeschnitten.
    Keine Ahnung was ich hier machen soll.
    Sorry