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:
- REM erstellt mit -00950 00:05:45 -00900 00:14:22 002600 00:20:07 003500 00:27:13 004200 00:35:11 005350 00:41:40
- set path=.;G:\Setups\VideoAudio_schneiden\delaycut_1212
- delaycut -startsplit 0.950 -endsplit 345.942 -out C:\delaycut\temp\tonspur1.ac3 C:\delaycut\tonspur.ac3
- REM Datei: tonspur1.ac3: Schnittfehler: 8 ms zu kurz | gesamtSchnittfehler: 8 ms zu kurz | Schnittfehlerkorrektur: nein
- delaycut -startsplit 345.950 -endsplit 862.942 -out C:\delaycut\temp\tonspur2b.ac3 C:\delaycut\tonspur.ac3
- delaycut -start 50 -same -out C:\delaycut\temp\tonspur2.ac3 C:\delaycut\temp\tonspur2b.ac3
- REM Datei: tonspur2.ac3: Schnittfehler: 8 ms zu kurz | gesamtSchnittfehler: 16 ms zu kurz | Schnittfehlerkorrektur: nein
- delaycut -startsplit 862.900 -endsplit 1207.924 -out C:\delaycut\temp\tonspur3b.ac3 C:\delaycut\tonspur.ac3
- delaycut -start 3500 -same -out C:\delaycut\temp\tonspur3.ac3 C:\delaycut\temp\tonspur3b.ac3
- REM Datei: tonspur3.ac3: Schnittfehler: -24 ms zu kurz | gesamtSchnittfehler: -8 ms zu kurz | Schnittfehlerkorrektur: ja
- delaycut -startsplit 1204.400 -endsplit 1630.384 -out C:\delaycut\temp\tonspur4b.ac3 C:\delaycut\tonspur.ac3
- delaycut -start 900 -same -out C:\delaycut\temp\tonspur4.ac3 C:\delaycut\temp\tonspur4b.ac3
- REM Datei: tonspur4.ac3: Schnittfehler: 16 ms zu kurz | gesamtSchnittfehler: 8 ms zu kurz | Schnittfehlerkorrektur: nein
- delaycut -startsplit 1629.500 -endsplit 2107.516 -out C:\delaycut\temp\tonspur5b.ac3 C:\delaycut\tonspur.ac3
- delaycut -start 700 -same -out C:\delaycut\temp\tonspur5.ac3 C:\delaycut\temp\tonspur5b.ac3
- REM Datei: tonspur5.ac3: Schnittfehler: -16 ms zu kurz | gesamtSchnittfehler: -8 ms zu kurz | Schnittfehlerkorrektur: ja
- delaycut -startsplit 2106.800 -endsplit 2495.792 -out C:\delaycut\temp\tonspur6b.ac3 C:\delaycut\tonspur.ac3
- delaycut -start 1150 -same -out C:\delaycut\temp\tonspur6.ac3 C:\delaycut\temp\tonspur6b.ac3
- REM Datei: tonspur6.ac3: Schnittfehler: 8 ms zu kurz | gesamtSchnittfehler: 0 ms zu kurz | Schnittfehlerkorrektur: nein
- set path=.;G:\Setups\VideoAudio_schneiden\eac3to
- eac3to C:\delaycut\temp\tonspur1.ac3+C:\delaycut\temp\tonspur2.ac3+C:\delaycut\temp\tonspur3.ac3+C:\delaycut\temp\tonspur4.ac3+C:\delaycut\temp\tonspur5.ac3+C:\delaycut\temp\tonspur6.ac3 C:\delaycut\tonspurfertig.ac3
- pause
Alles anzeigen
(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:
- set path=.;C:\Program Files (x86)\Java\jdk1.6.0_16\bin\
- c:
- cd delaycut
- javac delaycut.java
- java delaycut
- schnitt.bat
In den Ordner c:\delaycut kommt dann die javadatei (delaycut.java)
- import java.util.Iterator;
- import java.util.LinkedList;
- import javax.swing.*;
- import java.io.*;
- public class delaycut{
- public static void main(String[]args){
- try{
-
-
-
-
-
-
- String pathDelaycut="G:\\Setups\\VideoAudio_schneiden\\delaycut_1212";
- String pathEac3to="G:\\Setups\\VideoAudio_schneiden\\eac3to";
- String pathArbeitsordner="C:\\delaycut\\";
-
- String dateiname="tonspur";
- String SString=JOptionPane.showInputDialog(" Programm zum Schneiden einer AC3 Tonspur mit delaycut\n\nDie eingabe '-00200 00:12:45 -03000 01:22:22' würde bedeuten: Audioverzögerung -200ms bis min 12:45. dann audioverzögerung -3000ms bis 1:22:22.\n (6 zeichen für die audioverzögerung, 1 zeichen frei, 8 zeichen für den timecode)");
- int anzversetzung=6, anzzeit=8, letzteszeichen=0, ac3frames=32;
- String Svers="1", Sh="2", Sm="3", Ss="4", delaycutanw="", siversmsek="", stillenotig="", siversmsekende="", korrektur="nein";
- int hh=61,mm=61,ss=61,zeits=0, ivers=0, iversmsek=0, iversmsekende=0, schnittstartsek=0, vorzeits=0, schnittendsek=0;
- int altivers=0, start=0, altestille=0, zeitsausgabe=0, zeitms=0, vorzeitsausgabe=0, vorzeitms=0, schnittfehler=0, gesfehler=0;
-
- BufferedWriter aus=new BufferedWriter(new FileWriter("schnitt.bat"));
- int anzschnitte=SString.length()/(anzversetzung+anzzeit+1);
-
- aus.write("REM erstellt mit "+SString);
- aus.newLine();aus.newLine();
- aus.write("set path=.;"+pathDelaycut);
- aus.newLine();
-
- for(int i=1;i<=anzschnitte;i++)
- {
- String teilstring=SString.substring(letzteszeichen,letzteszeichen+anzversetzung+anzzeit+1);
- letzteszeichen=letzteszeichen+anzversetzung+anzzeit+2;
- Svers=teilstring.substring(0,6); Sh=teilstring.substring(7,9); Sm=teilstring.substring(10,12); Ss=teilstring.substring(13,15);
- ivers=(Integer.parseInt(Svers));hh=Integer.parseInt(Sh);mm=Integer.parseInt(Sm);ss=Integer.parseInt (Ss);
-
- start=0;
- stillenotig="";
- vorzeits=zeits;
- zeits=hh*3600+mm*60+ss;
-
- if(ivers<=altivers)
- {
- vorzeitms=vorzeits*1000-ivers;
- vorzeitsausgabe=vorzeitms/1000;
- zeitms=zeits*1000-ivers;
- zeitms=vorzeitms+((zeitms-vorzeitms)/32)*32;
- schnittfehler=(zeits-vorzeits)*1000-((zeitms-vorzeitms)/32)*32;
- gesfehler+=schnittfehler;
- if(gesfehler>16){zeitms+=32;schnittfehler-=32;gesfehler-=32;korrektur="ja";}
- zeitsausgabe=zeitms/1000;
- iversmsek=vorzeitms-vorzeitsausgabe*1000;
- iversmsekende=zeitms-zeitsausgabe*1000;
- }
- if(ivers>altivers)
- {
- stillenotig="b";
-
- vorzeitms=vorzeits*1000-altivers;
- vorzeitsausgabe=vorzeitms/1000;
- zeitms=zeits*1000-altivers;
- zeitms=vorzeitms+((zeitms-vorzeitms)/32)*32;
- schnittfehler=(zeits-vorzeits)*1000-((zeitms-vorzeitms)/32)*32;
- gesfehler+=schnittfehler;
- if(gesfehler>16){zeitms+=32;schnittfehler-=32;gesfehler-=32;korrektur="ja";}
- zeitsausgabe=zeitms/1000;
-
- iversmsek=vorzeitms-vorzeitsausgabe*1000;
- iversmsekende=zeitms-zeitsausgabe*1000;
- start=ivers-altivers;
- if(start%32==16) start+=1;
- }
-
-
- if(iversmsek<1000) siversmsek=""+iversmsek;
- if(iversmsek<100) siversmsek="0"+iversmsek;
- if(iversmsek<10) siversmsek="00"+iversmsek;
- if(iversmsekende<1000) siversmsekende=""+iversmsekende;
- if(iversmsekende<100) siversmsekende="0"+iversmsekende;
- if(iversmsekende<10) siversmsekende="00"+iversmsekende;
-
- delaycutanw="-startsplit "+vorzeitsausgabe+"."+siversmsek+" -endsplit "+zeitsausgabe+"."+siversmsekende+" -out "+pathArbeitsordner+"temp\\"+dateiname+i+stillenotig+".ac3 "+pathArbeitsordner+dateiname+".ac3";
- aus.write("delaycut "+delaycutanw);
- aus.newLine();
-
- if(ivers>altivers)
- {
- delaycutanw="-start "+start+" -same -out "+pathArbeitsordner+"temp\\"+dateiname+i+".ac3 "+pathArbeitsordner+"temp\\"+dateiname+i+stillenotig+".ac3";
- aus.write("delaycut "+delaycutanw);
- aus.newLine();
- }
-
- aus.write("REM Datei: tonspur"+i+".ac3: Schnittfehler: "+schnittfehler+" ms zu kurz | gesamtSchnittfehler: "+gesfehler+" ms zu kurz | Schnittfehlerkorrektur: "+korrektur);aus.newLine();aus.newLine();
- delaycutanw="";
- korrektur="nein";
- altivers=ivers;
- }
- aus.newLine();
- aus.write("set path=.;"+pathEac3to);
- aus.newLine();
-
- aus.write("eac3to ");
- for(int i=1; i<=anzschnitte;i++)
- {
- if(i!=1)aus.write("+");
- aus.write(pathArbeitsordner+"temp\\tonspur"+i+".ac3");
- }
- aus.write(" "+pathArbeitsordner+"tonspurfertig.ac3");
- aus.newLine();
- aus.write("pause");
- aus.flush();
- aus.close();
- }
- catch (Exception e){e.printStackTrace();};
- }
- }
Alles anzeigen
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