Zwangsuntertitel simulieren
DVD und Blu-ray bringen ganz selbstverständlich die Möglichkeit mit, die Anzeige mancher Untertitel zu erzwingen, z.B. um kurze fremdsprachige Dialoge verständlich zu machen. Fürs fertige Encoding existiert leider kein einheitlicher Mechanismus dafür. In diesem Kapitel sehen wir uns verschiedene Wege an, um trotzdem sicherzustellen, dass Zwangsuntertitel immer und alle anderen nur auf ausdrücklichen Wunsch angezeigt werden.
Das Problem
Stellen wir uns vor, wir haben einen Film mit folgenden Spuren:
Der normale »dumme« Player bzw. Splitter aktiviert von jedem Spurtyp (Video, Audio, Untertitel) die erste Spur in der Datei. Im obigen Beispiel hören wir beim Filmstart den englischen Ton und sehen dazu die erste englische Untertitelspur, d.h. die passenden Zwangsuntertitel. Es passiert also genau das Richtige, solange wir die Spuren in der Datei wie gezeigt anordnen: einheitlichen Reihenfolge der Sprachen, Zwangsuntertitel zuerst, dann alle Komplettuntertitel. Zusätzlich dürfen im Player Untertitel nicht komplett deaktiviert sein, sonst erscheinen auch die Zwangsuntertitel nicht.
Genauso unproblematisch sind Filme, die gar keine Untertitel enthalten. Erst bei Filmen mit ausschließlich Komplettuntertiteln macht sich die fehlende Zwangsuntertitelfunktion bemerkbar. Eine solche Datei kann folgendermaßen aussehen:
Beim Filmstart wird genauso wie oben die englische Tonspur und die englischen Untertitel gestartet. Dumm nur, dass das eine vollständige Spur ist, die wir standardmäßig gar nicht abspielen wollen.
Es muss also ein Workaround her. Wir könnten den Player so einstellen, dass Untertitel immer manuell aktiviert werden müssen. Das hat allerdings den Nachteil, dass dann auch Zwangsuntertitel nicht mehr automatisch angezeigt werden. So kommen wir nicht weiter. Es gibt im Wesentlichen zwei Lösungen: die erste nutzt Formate und Software, die mit Zwangsuntertiteln korrekt umgeht. Die zweite trickst, um den gleichen Effekt mit weniger fähiger Software und Formaten zu erreichen. Beide Lösung haben gemeinsam, dass die Zwangs- und Komplettuntertitel in getrennten Spuren liegen. Wir können nicht in einer Komplettspur ein paar wenige Untertiteleinträge als »forced« markieren.
Lösung: Matroska und LAV Splitter
Der Matroska-Container kennt einige Flags, um Spuren zu priorisieren. Dazu gehört auch genau das, was wir brauchen: Spuren können beim Muxen als »erzwungen« markiert werden. Wie das funktioniert, sehen wir uns im MKVMerge-Kapitel genau an. Außerdem brauchen wir einen Matroska-Splitter, der das Forced-Flag beim Abspielen auch auswertet: den schon einige Male erwähnten LAV Splitter. In seiner Standardkonfiguration tut der genau das Richtige. Nach der LAV-Installation funktionieren in allen DirectShow-Playern die Untertitel so, wie sie sollen.
Lösung: Leere Zwangsuntertitel
Die zweite Lösung verlässt sich nicht auf die passende Software und die Fähigkeiten des Matroska-Containers, sondern tut so, als wären immer Zwangsuntertitel vorhanden. Wir müssen lediglich pro Audiosprache eine leere Untertitelspur hinzufügen, so dass ein Film ohne Zwangsuntertitel so aussieht:
Beim Abspielen wird wie im ersten Beispiel automatisch die englische Tonspur und die erste englische Untertitelspur aktiviert. Das macht aber nichts, da diese keine Einträge enthält, d.h. sie verhält sich genauso als wären die Untertitel komplett abgeschaltet.
Manche Splitter erlauben es, mit der Tonspur auch gleich die Untertitel auf die passende Sprache umzuschalten. Dafür ist zweite leere Spur gedacht. Ohne sie würde eine Wechselautomatik beim Umschalten der Tonspur die deutschen Komplett-Untertitel aktivieren.
Eine kleine praktische Hürde müssen wir noch überwinden. Untertitel sind nicht darauf ausgelegt, nichts zu enthalten. Deswegen ist eine tatsächlich leere Spur nicht möglich. Stattdessen basteln wir uns eine Spur, die nur eine einzige unsichtbare Textzeile bzw. Untertitelgrafik enthält. Der Einfachheit halber könnt ihr euch ein Zip-Archiv mit Leerspuren der drei wichtigsten Formate – Blu-ray-PGS, DVD-Vobsub und SubRip – fertig herunterladen.
Die PGS- und Vobsub-Spuren enthalten eine einzige vollständig transparente Untertitelgrafik. Die SubRip-Spur enthält genauso nur einen Eintrag, der eine Sekunde nach Filmstart eine Sekunde lang ein geschütztes Leerzeichen anzeigt. Am Bildschirm sehen wir somit nichts. Ein einfaches Leerzeichen war deshalb nicht möglich, weil das nicht als eine gültige Textzeile erkannt wird. Deswegen müssen wir auf das geschützte Leerzeichen ausweichen, das genauso »aussieht« und über den Ziffernblock der Tastatur mit Alt + 0 1 6 0 eingegeben werden kann. NumLock muss dabei aktiviert sein.
Kommentare
Kommentar von Tobi | 2.2.2012
Mplayer beachtet auch das forced- und default-flag. Ich habe neulich herausgefunden das mkvmerge das default-flag automatisch auf die erste Untertitelspur setzt, die im Film vorhanden ist, wenn man kein anderes angibt (eine forced-Spur, die man mit einem forced-flag belegen würde, ist dann eh nicht mehr vorhanden). Ideal wäre es, kein default-flag zu setzen. Beim muxen scheint das nicht möglich zu sein, danach aber schon:
mkvpropedit movie.mkv --edit track:s1 --set flag-default=0
Statt s1 kann auch die Nr. der Spur angegeben werden. Bei mir spielt Mplayer danach ohne die complete-Spur ab.
Danke aber trotzdem an Brother John und dem empty-Workaround. Ich habe ihn lange genutzt.
Kommentar von Brother John | 2.2.2012
Geht auch direkt beim Muxen. MKVMerge GUI produziert dafür sowas:
Code:
Warum die Haufen Anführungszeichen ist mir nicht klar. Könnte Windows sein: cmd.exe ist arg eigenwillig mit Cli-Paramtern.
Kommentar von Tobi | 2.2.2012
Danke für den Tipp. Ich kannte bislang nur "--default-track ID", wobei ID eben für die Nr. im Stream steht. Die Manpage liefert:
--default-track TID[:bool]
Sets the 'default' flag for the given track (see section track IDs) if the optional argument bool is not present.
If the user does not explicitly select a track himself then the player should prefer the track that has his
'default' flag set. Only one track of each kind (audio, video, subtitles, buttons) can have his 'default' flag
set. If the user wants no track to have the default track flag set then he has to set bool to 0 for all tracks.
This option can be used multiple times for an input file applying to several tracks by selecting different track
IDs each time.
Bei Linux würden die Anführungzeichen um subs.sup Sinn machen, falls da ein Leerzeichen o.ä. drin wäre, ansonsten kann man sie auch weglassen (stören aber auch nicht weiter, bedeuten nur, dass das nicht von der Kommandozeile/Shell interpretiert wird)