Java hat sich seit seinen Anfängen als universelle Sprache für ein breit gefächertes Aufgabengebiet etabliert und gehört zu den am meisten verwendeten Programmiersprachen. Ich möchte hier zwei einfache und gut überschaubare Beispiele aus meiner Tätigkeit vorstellen, die zeigen, wie ich mit dieser Sprache arbeite.

Srt-Transformer

Als Beispiel für ein kleines, eigenständiges Programm, das nur aus einer einzigen Klasse besteht, möchte ich SrtTransformer vorstellen. Die Aufgabe dieses Arbeitstools besteht darin, Zeitangaben in einer .srt-Datei zu ändern, um diese vor oder zurück zu verschieben und/oder auch zu »skalieren«.

Diese Dateien beinhalten Informationen zu Untertiteln von Videodateien und können von bestimmten Programmen, zu Beispiel dem VLC media player beim Abspielen von Videos zusätzlich geladen werden, um dadurch die dort enthaltenen Untertitel mit einzublenden. Es sind Textdateien wie zum Beispiel

 1
00:00:35,280 --> 00:00:38,716
"...I bore you upon
a huge eagle's wings"

2
00:00:38,840 --> 00:00:42,071
"and brought you unto Myself..." 

Abhängig von der Quelle der jeweiligen .srt-Datei können die enthaltenen Zeitangaben für die Einblendung der Texte in Bezug auf die eigene Videodatei verschoben (und/oder auch falsch skaliert) sein. Dies lässt sich durch das Setzen von zusätzlichen Parametern, z. B. bei dem VLC media player, korrigieren. Sinnvoller ist es aber, die Zeitangaben gleich in der Datei einmalig zu ändern. Genau das ist die Aufgabe dieses kleinen Programms.

Kommandozeile: Aufrufsyntax von SrtTransformer

Das Programm benötigt nur einige wenige Aufrufparameter und ist deshalb als einfaches Konsolenprogramm ohne Bedienoberfläche kodiert. Aktuell gibt es zwei Abarbeitungsmodi: -adaptTS, mit dem die gerade beschriebene Funktionalität aufgerufen werden kann, und -checkSubtitleLengths, die ich im Anschluss erläutern werde.

Für den ersten Arbeitsmodus sind zwei Parameter erforderlich: der Wert, um den die Zeitangaben verschoben werden sollen (in Millisekunden) und ein Skalierungsfaktor, mit dem die Gesamtzeit der Untertitel der Spieldauer der Videodatei angepasst werden kann. Zum (Vor-)Verschieben der Zeitpunkte für das gezeigte Beispiel um ca. 3 Sekunden wird das Tool so aufgerufen:

java -jar SrtTransformerDemo.jar 
          -adaptTS -3280 1  Original.srt

und das Ergebnis ist eine Kopie der Datei mit den verschobenen Zeitwerten:

1
00:00:32,000 --> 00:00:35,436
"...I bore you upon
a huge eagle's wings"

2
00:00:35,560 --> 00:00:38,791
"and brought you unto Myself..."

Der zweite Arbeitsmodus analysiert das Verhältnis von Textlänge zur Anzeigedauer. Für gut lesbare Untertitel soll ein Wert von 13 ... 15 Zeichen je Sekunde als Mindestanzeigedauer nicht unterschritten werden. Bei dem Aufruf des Tools für diesen Modus muss der zu testende Mindestwert (Zeichen/Sekunde) angegeben werden. Es werden dann alle Untertiteln, deren Anzeigedauer, bezogen auf diesen Wert, zu kurz ist, auf der Konsole aufgelistet.

Beim Aufruf mit Wert 13 ergeben sich für die hier als Beispiel verwendete .srt-Datei folgende Ausgaben (auf die ersten zwei Überschreitungen gekürzt):

Subtitle duration for 5
near Gondar.
is less than 1461 milliseconds
00:00:51,160 --> 00:00:52,388 = 1228 milliseconds

Subtitle duration for 6
Yet, since the dawn of time,
is less than 2692 milliseconds
00:00:54,120 --> 00:00:55,792 = 1672 milliseconds

...

In der ersten Ausgabezeile ist die Nummer des betroffenen Untertitels angegeben, die ersten vier Untertitel sind also nicht zu kurz. Die zweite Zeile enthält den Text und die letzte Zeile die zugehörigen Zeitangaben, ergänzt um die Anzeigedauer. Diese kann dadurch mit dem Wert, der sich aus der Anzahl der Buchstaben ergibt (er ist in der dritten Zeile angegeben) verglichen werden. Je nach Situation in der zugehörigen Videoszene kann man dann versuchen, die Anzeigedauer zu erhöhen, oder den Text zu kürzen.

Die als ausführbares JAR-Archiv bereitgestellte Programmdatei kann im Download Bereich herunter geladen werden. Dort ist auch der Quellcode mit zur Verfügung gestellt.

top ↑

Satzmarker

Auch dieses Programmbeispiel hat einen gut überschaubaren Funktionsumfang und auch dieses Programm verarbeitet eine Datei und generiert daraus eine zweite Datei. Hier geht es aber um zusammenhängende Texte, die in einer plain Textdatei (.txt) abgespeichert sind. Diese sollen einzeln eingelesen und kategorisiert werden.

Dazu werden sie nacheinander auf einer Bedienoberfläche (GUI) angezeigt und können so per Button-Klick einer von 8 Kategorien zugeordnet werden. Die zugehörige Nummer der Kategorie wird dann bei dem Abspeichern in der neu erstellten Datei jeweils direkt vor dem Satz mit abgespeichert.

Bei diesem Beispiel möchte ich nicht die Kodierung zum Einlesen der Datei bzw. dem Zurückschreiben zeigen, sondern die Bedienoberfläche, deren Aufbau hier noch einfach und gut überschaubar ist.

Satzmarker: ein Satz der kategoriesiert werden soll

Nach der Auswahl der Textdatei werden die einzelnen Sätze nacheinander angezeigt und können über die Button A ... H zugeordnet werden. Direkt danach wird der nächste Satz zur Kategorisierung angezeigt.

Sobald der erste Satz verarbeitet wurde, ist auch der Zurück-Button aktiv, mit dem man den zuletzt kategorisierten Satz noch einmal zurück holen und neu kategorisieren kann.

Satzmarker: Abschluss der Bearbeitung

Nach dem letzten Satz der ausgewählten Datei wird eine kurze Zusammenfassung angezeigt. Hier kann dann das Programm beendet, oder eine weitere Datei zur Bearbeitung ausgewählt werden. Eine etwas ausführlichere Beschreibung kann in diesem PDF nachgelesen werden.

Im Download - Bereich gibt es das Programm als JAR-Archiv zum Ausprobieren, sowie den Quellcode für die GUI-Klasse und das Interface SentenceMarkProcessor, gegen den die GUI-Klasse kodiert ist.