Elvis
Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 04.03.2010, 18:16 Titel: Subtitle to SRT |
|
|
Hallo,
Mein Programm konvertiert subtitle-Dateien (DivX Author) in srt-Dateien (SubRip). Beide Dateiformate sind sehr einfach, da komplett in Klartext. Trotzdem (vielleicht, weil DivX Author wahrscheinlich kaum verbreitet ist) habe ich im Internet kein vergleichbares Tool finden können.
Überschneidungen von Untertiteln (ein Untertitel wird zu lange angezeigt und schiebt sich unter den nachfolgenden) werden automatisch korrigiert. Weiter kann der minimale Abstand zwischen zwei Untertiteln in frames bestimmt werden.
Mit thailändischen Schriftzeichen gab es keine Probleme. Ich schätze also, es sieht genauso für z.B. osteuropäische Schriftarten aus.
Ich fürchte, es gibt hier im Forum niemanden, der mit solchen Dateiformaten viel arbeitet. Über eine kleine Resonanz würde ich mich trotzdem sehr freuen.
Code: |
CLS
COLOR 7, 1
PRINT " Konverter fr Untertitel "
PRINT " [*.subtitle (Divx Author 1.5) nach *.srt (SubRip)] "
PRINT " "
COLOR 7, 0
PRINT
INPUT "Quelldatei [subitlte]: ", quelldatei$
INPUT "Zieldatei [srt]: ", zieldatei$
PRINT
INPUT "Mindestpause zwischen Untertiteln [in frames]? ", mindestpause
OPEN quelldatei$ FOR INPUT AS #1
OPEN "e:\temp.txt" FOR OUTPUT AS #2
FOR a = 1 TO 13
LINE INPUT #1, nix$
NEXT a
nummer1 = -1
nummer2 = 0
DO
LINE INPUT #1, zeile1$
FOR komma = 1 TO 10
zeichen$ = MID$(zeile1$, komma, 1)
IF zeichen$ = "," THEN kommastelle = komma: komma = 10
NEXT komma
zeit0$ = MID$(zeile1$, kommastelle + 4, 12)
zeit1$ = MID$(zeile1$, kommastelle + 19, 12)
text1$ = MID$(zeile1$, kommastelle + 36, LEN(zeile1$) - 37)
text1$ = MID$(text1$, 1, LEN(text1$) - 1)
nummer1 = nummer1 + 2
LINE INPUT #1, zeile2$
FOR komma = 1 TO 10
zeichen$ = MID$(zeile2$, komma, 1)
IF zeichen$ = "," THEN kommastelle = komma: komma = 10
NEXT komma
zeit2$ = MID$(zeile2$, kommastelle + 4, 12)
zeit4$ = MID$(zeile2$, kommastelle + 19, 12)
text2$ = MID$(zeile2$, kommastelle + 36, LEN(zeile2$) - 37)
text2$ = MID$(text2$, 1, LEN(text2$) - 1)
nummer2 = nummer2 + 2
std1 = VAL(MID$(zeit1$, 1, 2))
min1 = VAL(MID$(zeit1$, 4, 2))
sek1 = VAL(MID$(zeit1$, 7, 2))
mil1 = VAL(MID$(zeit1$, 10, 3))
std2 = VAL(MID$(zeit2$, 1, 2))
min2 = VAL(MID$(zeit2$, 4, 2))
sek2 = VAL(MID$(zeit2$, 7, 2))
mil2 = VAL(MID$(zeit2$, 10, 3))
IF std1 > std2 THEN std1 = std2: min1 = min2: sek1 = sek2: mil1 = mil2 - mindestpause
IF min1 > min2 THEN min1 = min2: sek1 = sek2: mil1 = mil2 - mindestpause
IF sek1 > sek2 THEN sek1 = sek2: mil1 = mil2 - mindestpause
IF sek1 = sek2 AND mil1 > mil2 THEN mil1 = mil2 - mindestpause
IF mil2 + mindestpause > mil1 THEN mil2 = mil1 - mindestpause
100 IF std1 = 10 OR std1 > 10 THEN std1$ = STR$(std1): GOTO 200
120 IF std1 = 1 OR std1 > 1 THEN std1$ = "0" + STR$(std1): GOTO 200
140 IF std1 = 0 THEN std1$ = "00":
200 IF min1 = 10 OR min1 > 10 THEN min1$ = STR$(min1): GOTO 300
220 IF min1 = 1 OR min1 > 1 THEN min1$ = "0" + STR$(min1): GOTO 300
240 IF min1 = 0 THEN min1$ = "00":
300 IF sek1 = 10 OR sek1 > 10 THEN sek1$ = STR$(sek1): GOTO 400
320 IF sek1 = 1 OR sek1 > 1 THEN sek1$ = "0" + STR$(sek1): GOTO 400
340 IF sek1 = 0 THEN sek1$ = "00":
400 IF mil1 = 100 OR mil1 > 100 THEN mil1$ = STR$(mil1): GOTO 500
420 IF mil1 = 10 OR mil1 > 10 THEN mil1$ = "0" + STR$(mil1): GOTO 500
440 IF mil1 = 1 OR mil1 > 1 THEN mil1$ = "00" + STR$(mil1): GOTO 500
460 IF mil1 = 0 THEN mil1$ = "000":
500 IF std2 = 10 OR std2 > 10 THEN std2$ = STR$(std2): GOTO 600
510 IF std2 = 1 OR std2 > 1 THEN std2$ = "0" + STR$(std2): GOTO 600
520 IF std2 = 0 THEN std2$ = "00"
600 IF min2 = 10 OR min2 > 10 THEN min2$ = STR$(min2): GOTO 700
610 IF min2 = 1 OR min2 > 1 THEN min2$ = "0" + STR$(min2): GOTO 700
620 IF min2 = 0 THEN min2$ = "00"
700 IF sek2 = 10 OR sek2 > 10 THEN sek2$ = STR$(sek2): GOTO 800
710 IF sek2 = 1 OR sek2 > 1 THEN sek2$ = "0" + STR$(sek2): GOTO 800
720 IF sek2 = 0 THEN sek2$ = "00"
800 IF mil2 = 100 OR mil2 > 100 THEN mil2$ = STR$(mil2): GOTO 900
810 IF mil2 = 10 OR mil2 > 10 THEN mil2$ = "0" + STR$(mil2): GOTO 900
820 IF mil2 = 1 OR mil2 > 1 THEN mil2$ = "00" + STR$(mil2): GOTO 900
830 IF mil2 = 0 THEN mil2$ = "000"
900
zeit1$ = std1$ + ":" + min1$ + ":" + sek1$ + "," + mil1$
FOR i = 1 TO LEN(zeit1$)
zeichen$ = MID$(zeit1$, i, 1)
IF zeichen$ <> CHR$(32) THEN zeitblank$ = zeitblank$ + zeichen$
NEXT i
zeit1$ = zeitblank$: zeitblank$ = ""
zeit2$ = std2$ + ":" + min2$ + ":" + sek2$ + "," + mil2$
FOR i = 1 TO LEN(zeit2$)
zeichen$ = MID$(zeit2$, i, 1)
IF zeichen$ <> CHR$(32) THEN zeitblank$ = zeitblank$ + zeichen$
NEXT i
zeit2$ = zeitblank$: zeitblank$ = ""
nummer1$ = STR$(nummer1): nummer1$ = LTRIM$(nummer1$)
nummer2$ = STR$(nummer2): nummer2$ = LTRIM$(nummer2$)
PRINT #2, nummer1$
PRINT #2, zeit0$ + " --> " + zeit1$
PRINT #2, text1$: PRINT #2, ""
PRINT #2, nummer2$
PRINT #2, zeit2$ + " --> " + zeit4$
PRINT #2, text2$
PRINT #2, ""
LOOP WHILE NOT EOF(1)
CLOSE #1
CLOSE #2
OPEN "e:\temp.txt" FOR INPUT AS #1
OPEN zieldatei$ FOR OUTPUT AS #2
DO
text1$ = "": text2$ = "": text3$ = ""
LINE INPUT #1, nummer$
LINE INPUT #1, zeiten$
LINE INPUT #1, text1$
LINE INPUT #1, nix$
FOR i = 1 TO LEN(text1$)
IF MID$(text1$, i, 2) = "\n" THEN text2$ = MID$(text1$, i + 2, LEN(text1$) - i): text1$ = MID$(text1$, 1, i - 1): i = LEN(text1$)
NEXT i
IF text2$ <> "" THEN
FOR i = 1 TO LEN(text2$)
IF MID$(text2$, i, 2) = "\n" THEN text3$ = MID$(text2$, i + 2, LEN(text1$) - i): text2$ = MID$(text2$, 1, i - 1): i = 10
NEXT i
END IF
PRINT #2, nummer$
PRINT #2, zeiten$
PRINT #2, text1$
IF text2$ <> "" THEN PRINT #2, text2$
IF text3$ <> "" THEN PRINT #2, text3$
PRINT #2, nix$
LOOP WHILE NOT EOF(1)
CLOSE #1
CLOSE #2
KILL "e:\temp.txt"
PRINT : PRINT
PRINT "Datei erfolgreich konvertiert."
PRINT
PRINT "Beliebige Taste drücken..."
SLEEP
|
Könnt ihr mir einen geeigneten Webspace nennen, wo ich die kompilierte EXE-Datei hochladen kann? Ich möchte jemandem, der dieses Programm möglicherweise über Google findet, nicht zumuten müssen, sich mit einem Compiler zu beschäftigen.
Grüße,
Elvis _________________ Geforce 7300GT (256MB GDDR3, Gainward) -- 2x 512MB (DDR2 800, MDT) -- AMD Athlon64 X2 EE 3800+ -- Asrock ALiveNF5-eSATA2+ |
|