Programm zum synchronisieren von AC3-Tonspuren

  • Kannst du dich nicht mal entscheiden?
    Erst Stille, dann doppelt abspielen, jetzt wieder Stille.
    Hätte ich mir die Arbeit sparen und es mit der Stille so lassen können wie es war

  • stargatefreak:


    Mach es dir doch nicht so schwer :)


    Steuere doch einfach direkt delaycut auf der Kommandozeile an, statt eine Cutlist auszugeben.



    Danach lässt du eac3to die einzelnen Abschnitte aneinanderhängen.


    Code
    1. eac3to 1.ac3+2.ac3+...+n.ac3 ziel.ac3

    Postfächer laufen über. Lange Wartezeiten!

  • das programm hab ich ja zuallererst mal für die staffel 8 geschrieben, und da ist es nicht nötig stille einzufügen da das video kürzer als der deutsche ton ist. deshalb ist bis jetzt auch noch keine abfrage im programm drin, die guckt, ob das neue delay größer ist als das alte und dementsprechend viel stille einfügt.


    außerdem muss ich mich selbst erstmal wieder in dem chaos zurechtfinden das ich da programmiert hab.


    sollte ich das mit der stille noch implementieren, würde sich für dich nichts ändern, du müsstest lediglich die schnittliste mit den alten schnittdaten neu brechnen lassen.



    smizz: muss ich mir morgen mal genau anschaun, meinst du damit jetzt das ich statt eine schnittliste ausgeben zulassen, mit dem javaprogramm über die komandozeile delaycut steuern zu lassen?
    auf so ein manuelles rumgestückel wie du das machst hab ich nicht wirklich lust :)

  • smizz: deine idee ist gut, ich werde es wohl auch so machen.
    wenn alles läuft wie ichs mir vorstell, wird nachher mein javaprogramm statt einer schnittliste eine .bat ausgeben, in der die anweisungen für delaycut und eac3to stehen.


    dann wirds auch mögliche sein, stille ins video einzufügen, und man spart sich das arbeiten mit mpeg2schnitt.


    der eingabe der schnittdaten bleibt gleich, wodurch sich nichts für den "anwender" ändert

  • ich werds so machen, das die .bat, die das javaprogramm startet, auch die .bat datei ausführt, die mein javaprogramm erstellt hat.


    und diese .bat hab auch schon fertig,

    Code
    1. set path=.;C:\Program Files (x86)\Java\jdk1.6.0_16\bin\
    2. c:
    3. cd delaycut
    4. javac delaycut.java
    5. java delaycut
    6. schnitt.bat


    wie man sieht, war da wenig anpassung nötig.

  • nabend, hab heute mal ein wenig programmiert, bin aber noch nicht fertig.
    mein programm macht im mom folgende ausgabe in die datei schnitt.bat



    es ist noch ein wenig freinschliff nötig, vorallem wenns darum geht stille hinzuzufügen, da spinnt mein programm noch. außerdem muss ich die stille in einem extra schritt hinzufügen, weils anders nicht geklappt hat.


    und eac3to mach immer eine normalisierung und ich weiß nicht wie ich die ausstellen kann


    mfg stargatefreak

  • Wenn ich in MKVMerge muxe, kommt das entsprechende Delay in den Dateinamen


    xyz DELAY +-XY ms.ac3


    MKVMerge erkennt diese Schreibweise und fügt pro Segment das passende Delay ein. Natürlich bleibt dieses minimale Restdelay immer softwaremäßig erhalten, was aber ein Feature von mkv ist.


    Ansonsten ignoriere ich es, wenn ich sehe, dass sich positive und negative Restdelays ausgleichen. Wenn sich nur Restdelays gleichen Vorzeichens ergeben, korrigigiere ich ab +-80ms manuell nach.
    80ms sind absolut unkritisch. Selbst die Produktionsstudios liegen oft um maximal diesen Wert daneben.

    Postfächer laufen über. Lange Wartezeiten!

  • am liebsten wärs mir ja, wenn ich vorher schon berechnen könnte, auf welche länge delaycut das schneidet. aber delaycut scheint das völlig willkürlich zu machen.


    ich schneide die tonsegmente immer auf eine glatte anzahl sekunden. manchmal fehlen 24ms zur vollen sekunde, und manchmal sind 24ms zuviel. und das bei einer framelänge von 32ms?


    bei 32ms langen frames dürfe ein schnitt doch höchstesn 16ms zu lang oder zu kurz sein oder nicht?

  • 1000ms : 32ms = 31,25
    Dh du hast in einer Sekunde keine runde Anzahl von ac3 frames, deswegen ergeben sich bei unterschiedlichen vollen Sekunden meist unterschiedliche delays.


    Der delay, der bei delaycut am Anfang der Datei entsteht, ist maximal 16ms lang, da hast du recht. Habs grad ausprobiert:
    Werden am Anfang einer Datei von 1 bis 15ms weggeschnitten, wird ein delay von -1 bis -15 ausgegeben, bei 16 bis 31ms ein delay von 16 bis 1ms.


    Aber das bringt mich grad zum Grübeln:
    Am Ende der Datei wird ja dann auch nicht genau geschnitten und dieser "Fehler" wird nicht explizit angezeigt (also es wird nicht angezeigt, wie viel zu wenig oder zu viel am Ende geschnitten wurde). Der delay, der dadurch entsteht, müsste dann ja auch noch berücksichtigt werden, oder irre mich da jetzt?

  • ich hab jetzt folgende beobachtung gemacht:
    ist die länge eines schnittes durch 4s teilbar, ist die länge glatt (macht ja auch sinn, da 4000/32 aufgeht).
    ist die länge des schnittes eine sekunde länger, ist die länge der entstehenden audiodatei entweder 8ms zu kurz oder 24ms zu lang.
    ist die länge des schnittes zwei sekunden länger, ist die länge der entstehenden audiodatei entweder 16ms zu kurz oder 16ms zu lang.
    ist die länge des schnittes drei sekunden länger, ist die länge der entstehenden audiodatei entweder 24ms zu kurz oder 8ms zu lang.


    ddevil: du hast recht, es wird ja am anfang und am ende etwas abgeschnitten, das hat ich nicht bedacht, das erklärt vll wieso 24ms delay auftreten statt der zuerwartenden 16ms.

  • Am Ende schaut es genau so aus wie am Anfang. Habs gerade probiert mit einer Endzeit zw. 0 und 32ms.
    0-15ms: Duration ist 0, dh der frame wird weggeschnitten
    16-32ms: Duration ist 32ms, der frame wird komplett übernommen


    Betrachten wir den Extremfall für einen Schnitt am Anfang und Ende:
    Wir haben 2 frames und wollen den Ton von der einen Mitte bis zur anderen haben




    delaycut schneidet das erste Frame weg, da dieser nach der Hälfte beginnt (ab 16ms) und den 2. frame auch,
    weil bei diesem frame 47-32ms = 15 ms verwendet werden sollen, also genau unter der Hälfte und dann wird der frame weggeschnitten.


    Bei meinem Beispiel will ich den Ton von 16ms bis 47 ms haben, das wären 47-15 = 32ms.
    delaycut gibt aber als duration 0 an, weil es so schneidet wie ich beschrieben habe.


    32ms ist also der maximale Fehler in der Länge, der beim Schneiden entstehen kann, das ist beträchtlich, wenn man mehrere Schnitte hat.
    Der Fehler kann aber in die andere Richtung genau so auftreten, dass der Ton also zu lange wird um diese 32ms. Das kann sich ingesamt wieder einigermaßen aufheben, aber besser wäre es den Fehler in der Länge zu berücksichtigen.


    So, das wars erstmal von mir :)

  • ich hab noch eine sonderheit gefunden, und zwar beim stille einfügen.


    wenn man 16ms (oder ein vielfaches von 32+16) stille einfügt, wird die tonspur ein frame länger. das passiert nicht bei 15ms oder 17ms


    edit:


    also z.b.

    Code
    1. delaycut -start 16 -same ...


    (der parameter "-same" sollt eigendlich bedeuten, das sich die länge der audiospur nicht ändert)

  • mein programm ist jetzt soweit fertig. stille einfügen sowie was wegschneiden funktioniert. auch den fehler, den ich ein post vorher beschrieben hab, wird von meinem programm umgangen.


    was mich aber noch stört, ist, dass sich die delays, die delaycut pro schnitt erzeugt addieren können, wodurch im ungünstigesten fall 24ms delay pro schnitt hinzukommen.


    boone: ich habe zum testen auch die erste folge der 5te staffel atlantis genommen, und ich komme da auf mehr als einen nötigen schnitt, bei mir sehen die schnittdaten so aus:

    Code
    1. -01500 00:06:29 -01700 00:14:44 -01950 00:22:40 -01750 00:28:44 -01550 00:34:53 -03700 00:41:40


    mein programm macht daraus



    wenn ich es geschaft habe, das mein programm die schnittfehler von delaycut ausgleichen kann, werd ich es hier veröffentlichen



    mfg stargatefreak

  • Zitat von stargatefreak;297810

    boone: ich habe zum testen auch die erste folge der 5te staffel atlantis genommen, und ich komme da auf mehr als einen nötigen schnitt, bei mir sehen die schnittdaten so aus:


    Das war auch nur ein Beispielschnitt.


    Es sind in der Regel 5 bis 7 Schnitte pro Folge.


    Die ersten 4 Folgen habe ich Fertig, bin gerade an E5 dran.

  • Mein Programm ist fertig.


    ich habe es geschafft, vorher berechnen zu lassen, welchen schnittfehler delaycut erzeugt. dadurch konnte ich eine Schnittfehlerkorrektur in mein programm einbauen. Es wird jetzt mitgezählt, wie groß der schnittfehler ist und wenn er größer als 16ms ist, wird der schnittfehler ausgeglichen.


    die ausgabe vom Programm sieht jetzt so aus:


    (alles was hinter einem "REM" steht ist ein kommentar und wird beim ausführen ignoriert.)


    Die Eingabe der Schnittdaten ist noch genauso wie bei dem Programm, das die Schnittlisten für Mpeg2Schnitt erstellt.


    Das neue Programm setzt jetzt ausschließlich delaycut und eac3to ein.


    Mein Programm wird weiterhin über eine .bat datei gestartet:


    Code
    1. set path=.;C:\Program Files (x86)\Java\jdk1.6.0_16\bin\
    2. c:
    3. cd delaycut
    4. javac delaycut.java
    5. java delaycut
    6. schnitt.bat


    In den Ordner c:\delaycut kommt dann die javadatei (delaycut.java)


    außerdem muss ein ordner c:\delaycut\temp erstellt werden.


    die ac3 datei die geschnitten werden soll, muss den namen tonspur.ac3 haben und sich ebenfalls im ordner c:\delaycut befinden.



    ich hoffe, das ich damit auch anspruchsvolle dubber wie smizz überzeugen kann :)


    mfg stargatefreak