Hallo,
ich habe das Skript nun fertig gestellt und ich denke, es funktioniert bestens. Folgendes läuft ab. Eine Veranstaltung mit Sprache wird gefilmt. Gleichzeitig wird im Saal der Text eingeblendet, indem jemand den Text mitliest und bei der nächsten Zeile auf "Weiter" drückt. Dies sind die Übertitel der lvt-Datei. Des Weiteren befinden sich dann die Sprache1 und Sprache2 in der lvt-Datei, in der Beispieldatei deutsch und englisch.
Ich lese nun die lvt-Datei aus und logge mit, wann derjenige, der die Titel im Saal wechselt, dies tut. Den Zeitpunkt des ersten relevanten Übertitels im Saal setze ich auf Null und verbinde ihn nun mit den Titeln der lvt-Datei. Damit kann ich eine Untertitel-Datei automatisch erstellen, die dann den gesamten Text beinhaltet und vor allem an der richtigen Stelle den richtigen Text zeigt. Dies kann ich unter das Video legen.
Zu der Frage von just me. Im Prinzipt ist Ragnars Skript funktionstüchtig. Es könnte unter Umständen geschickt sein, einen einzelnen Akt auszulesen, aber ich kann auch einen langen Titel haben und zerschneide ihn dann in die einzelnen Akte. Ist das Prozedere jetzt einigermaßen verständlich?
Das Ausgabeformat ist jeweils eine Liste pro Sprache:
1
00:00:00,000 --> 00:00:03,960
Zeile1 deutsch
(fasls vorhanden) Zeile2 deutsch
(falls vorhanden) Zeile3 deutsch
2
00:00:04,120 --> 00:00:08,160
Zeile4
(falls vorhanden) Zeile 5
Hier ist der Code: Mitschreiben, wann während der Veranstaltung auf weiter oder zurück geklickt wird:
Code: Select all
Var1 =,
~Down::
Var := A_MSec
SetFormat, float, 03.0
Var := Var / 20
Var := Var * 20
Var := Format("{:03}",Var)
if Var contains 1000
{
Var :=000
}
FileAppend, %A_Hour%:%A_Min%:%A_Sec%%Var1%%Var%;1`n, C:\Autohotkey\Output\%A_YYYY%%A_MM%%A_DD%_UT-Log.csv
return
~Up::
Var := A_MSec
SetFormat, float, 03.0
Var := Var / 20
Var := Var * 20
Var := Format("{:03}",Var)
if Var contains 1000
{
Var :=000
}
FileAppend, %A_Hour%:%A_Min%:%A_Sec%%Var1%%Var%;-1`n, C:\Autohotkey\Output\%A_YYYY%%A_MM%%A_DD%_UT-Log.csv
return
Dann folgt das Auslesen der LVT-Datei, bestimmen der ersten Zeile und das definieren des ersten relevanten Tastenklicks auf Weiter:
Code: Select all
FileSelectFolder, Folder
SetWorkingDir %Folder%
FileSelectFile, SelectedFile, 3, %Folder%, Open a file, Text Documents (*.lvt)
IniWrite, %Folder%, %A_ScriptDir%\Pfad.ini, Pfad, Pfad1
SetBatchLines -1
xml := ComObjCreate("MSXML2.DOMDocument.6.0")
xml.async := false
xml.load(SelectedFile)
pages := xml.selectSingleNode("/book/container/container/container").childNodes
Liste := FileOpen("Liste.txt", "w`n")
Startnummer := 0
Loop % pages.length
{
if (A_Index <= Startnummer)
continue
n := A_Index - Startnummer
DE1 := pages.item(A_Index).selectSingleNode("track[1]/text[1]").text
DE2 := pages.item(A_Index).selectSingleNode("track[1]/text[2]").text
DE3 := pages.item(A_Index).selectSingleNode("track[1]/text[3]").text
EN1 := pages.item(A_Index).selectSingleNode("track[3]/text[1]").text
EN2 := pages.item(A_Index).selectSingleNode("track[3]/text[2]").text
EN3 := pages.item(A_Index).selectSingleNode("track[3]/text[3]").text
Liste.WriteLine(n "|" DE1 "#|" DE2 "#|" DE3 "#|" EN1 "#|" EN2 "#|" EN3 "#")
}
seite :=1
Loop
{
FileReadLine, OutputVar, Liste.txt, %seite%
if OutputVar contains 1|Bitte schalten Sie Ihr Mobiltelefon ab.#|Vielen Dank.#|#|#|#|#
{
goto, NextLine1
}
if OutputVar contains 2|#|#|#|#|#|#
{
goto, NextLine1
}
if OutputVar contains 3|Please turn off your mobile phone.#|Thank you.#|#|#|#|#
{
goto, NextLine1
}
if OutputVar contains 4|#|#|#|#|#|#
{
goto, NextLine1
}
MsgBox, 4, erste Zeile finden, %OutputVar%
IfMsgBox, yes
{
goto break_outer3
}
IfMsgBox, no
{
goto, NextLine1
}
NextLine1:
z=%seite%
seite :=z+1
}
break_outer3:
z=%seite%
seite :=z-1
SetBatchLines -1
xml := ComObjCreate("MSXML2.DOMDocument.6.0")
xml.async := false
xml.load(SelectedFile)
pages := xml.selectSingleNode("/book/container/container/container").childNodes
Liste := FileOpen("UT-LVT.txt", "w`n")
Startnummer := seite
Loop % pages.length
{
if (A_Index <= Startnummer)
continue
n := A_Index - Startnummer
DE1 := pages.item(A_Index).selectSingleNode("track[1]/text[1]").text
DE2 := pages.item(A_Index).selectSingleNode("track[1]/text[2]").text
DE3 := pages.item(A_Index).selectSingleNode("track[1]/text[3]").text
EN1 := pages.item(A_Index).selectSingleNode("track[3]/text[1]").text
EN2 := pages.item(A_Index).selectSingleNode("track[3]/text[2]").text
EN3 := pages.item(A_Index).selectSingleNode("track[3]/text[3]").text
Liste.WriteLine(n "|" DE1 "#|" DE2 "#|" DE3 "#|" EN1 "#|" EN2 "#|" EN3 "#")
}
FileDelete, Liste.txt
FileSelectFile, SelectedFile, 3, %Folder%, Log-Datei öffnen, Text Documents (*.csv)
FileAppend, asdfjklö`n, %SelectedFile%
;FileAppend, `nasdfjklö, 20180423_UT-Log.csv
zeile :=1
Loop
{
FileReadLine, OutputVar, %SelectedFile%, %zeile%
;FileReadLine, OutputVar, 20180423_UT-Log.csv, %zeile%
StringSplit, word_a, Outputvar, `;, .
MsgBox, 4, ersten Titel finden, %OutputVar%
IfMsgBox, yes
{
goto break_outer4
}
IfMsgBox, no
{
z=%zeile%
zeile :=z+1
}
}
break_outer4:
Versatz = %word_a1%
ZeileLVT :=1
Nummer :=1
;FileSelectFile, LVTListe, 3, %Folder%, Untertitel-Liste auswählen, Text Documents (*.txt)
Loop,
{
;FileReadLine, GanzeZeile, 20180423_UT-Log.csv, %zeile%
FileReadLine, GanzeZeile, %SelectedFile%, %zeile%
StringSplit, word_array, GanzeZeile, `;, .
;FileReadLine, GanzeZeileLVT, %LVTListe%, %ZeileLVT%
FileReadLine, GanzeZeileLVT, UT-LVT.txt, %ZeileLVT%
StringSplit, word_arrayLVT, GanzeZeileLVT, `|, .
word_arrayLVT2 := SubStr(word_arrayLVT2, 1 , -1)
word_arrayLVT3 := SubStr(word_arrayLVT3, 1 , -1)
word_arrayLVT4 := SubStr(word_arrayLVT4, 1 , -1)
word_arrayLVT5 := SubStr(word_arrayLVT5, 1 , -1)
word_arrayLVT6 := SubStr(word_arrayLVT6, 1 , -1)
word_arrayLVT7 := SubStr(word_arrayLVT7, 1 , -1)
if word_array1 contains asdfjklö
{
goto break_outer5
}
Minuend := ConvertToMilliseconds(word_array1)
Subtrahend := ConvertToMilliseconds(Versatz)
Differenz := Minuend - Subtrahend
;MsgBox % ConvertToHHMMSSMS(Differenz)
ConvertToMilliseconds(HHMMSSMS)
{
HH := SubStr(HHMMSSMS, 1, 2) * 1000 * 3600
MM := SubStr(HHMMSSMS, 4, 2) * 1000 * 60
SS := SubStr(HHMMSSMS, 7, 2) * 1000
MS := SubStr(HHMMSSMS, 10)
return HH + MM + SS + MS
}
ConvertToHHMMSSMS(Milliseconds)
{
HH := Milliseconds // 3600000
remain := Mod(Milliseconds, 3600000)
MM := remain // 60000
remain := Mod(remain, 60000)
SS := remain // 1000
remain := Mod(remain, 1000)
MS := Mod(remain, 1000)
return Format("{:02}:{:02}:{:02},{:03}", HH, MM, SS, MS)
}
z=%zeile%
zeile :=z+1
x=%ZeileLVT%
y=%word_array2%
ZeileLVT :=x+y
;FileReadLine, GanzeZeile, 20180423_UT-Log.csv, %zeile%
FileReadLine, GanzeZeile, %SelectedFile%, %zeile%
StringSplit, word_array_ende, GanzeZeile, `;, .
Minuend2 := ConvertToMilliseconds2(word_array_ende1)
Subtrahend2 := ConvertToMilliseconds2(Versatz)
Differenz2 := Minuend2 - Subtrahend2
ConvertToMilliseconds2(HHMMSSMS)
{
HH := SubStr(HHMMSSMS, 1, 2) * 1000 * 3600
MM := SubStr(HHMMSSMS, 4, 2) * 1000 * 60
SS := SubStr(HHMMSSMS, 7, 2) * 1000
MS := SubStr(HHMMSSMS, 10)
return HH + MM + SS + MS
}
ConvertToHHMMSSMS2(Milliseconds)
{
HH := Milliseconds // 3600000
remain := Mod(Milliseconds, 3600000)
MM := remain // 60000
remain := Mod(remain, 60000)
SS := remain // 1000
remain := Mod(remain, 1000)
MS := Mod(remain, 1000)
return Format("{:02}:{:02}:{:02},{:03}", HH, MM, SS, MS)
}
Zahl1 = % ConvertToHHMMSSMS(Differenz)
Zahl2 = % ConvertToHHMMSSMS2(Differenz2)
if Zahl2 = 00:00:00,000
{
Zahl2 = %Zahl1%
}
FileAppend %Nummer%`n, Sprache1.srt
FileAppend, %Zahl1% --> %Zahl2%, Sprache1.srt
FileAppend, `n%word_arrayLVT2%`n, Sprache1.srt
FileAppend, %word_arrayLVT3%`n, Sprache1.srt
FileAppend, %word_arrayLVT4%`n, Sprache1.srt
FileAppend %Nummer%`n, Sprache2.srt
FileAppend, %Zahl1% --> %Zahl2%, Sprache2.srt
FileAppend, `n%word_arrayLVT5%`n, Sprache2.srt
FileAppend, %word_arrayLVT6%`n, Sprache2.srt
FileAppend, %word_arrayLVT7%`n, Sprache2.srt
n=%Nummer%
Nummer :=n+1
}
break_outer5:
MsgBox, Fertig!
ExitApp