-
-
Notifications
You must be signed in to change notification settings - Fork 98
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] Convert TTML into ASS #765
base: master
Are you sure you want to change the base?
Conversation
tts:textAlign is often used inside ttml files to move subtitles out of the way of important things on screen, similar to tts:displayAlign. Observed values are left, center and right. This commit saves that information into the internal object using an integer. Mappings: - start: -1 - left: -1 - center: 0 - right: 1 - end: 1 https://www.w3.org/TR/2018/REC-ttml1-20181108/#style-attribute-textAlign
tts:displayAlign is often used inside ttml files to move subtitles out of the way of important things on screen, similar to tts:textAlign. Observed values are before and after. This commit saves that information into the internal object using an integer. Mappings: - before: 8 - center: 5 - after: 2 https://www.w3.org/TR/2018/REC-ttml1-20181108/#style-attribute-displayAlign
This parses and saves the background color to the internal representation. https://www.w3.org/TR/2018/REC-ttml1-20181108/#style-attribute-backgroundColor
This is adding the remaining bits necessary to convert the internal representation into the ASS format. Best effort is made to have the resulting subtitles look as intended. In particular this means: - Giving the subtitles a box background with given color and transparency - Positioning the subtitles on screen using the region and alignment information - Color code the subtitles with provided color - Respecting forced line breaks
All changed fields aren't evaluated by existing tests yet.
as mentioned in the styleguides
0f4c61a
to
3f61a8e
Compare
Ich komme leider erst nächste Woche dazu mir das anzusehen. Bist Du soweit fertig damit oder sind noch commits zu erwarten? |
Kein Problem, es eilt ja nicht, da dies kein kritisches Problem behebt. Ich denke, dass nach dem Ansehen Details in zusätzlichen Commits implementiert werden müssen. Gerade im Hinblick auf die Schriftart und Abspielgröße bin ich mir auch unsicher, ob die aktuelle Lösung die Beste ist und wäre über weitere Meinungen dankbar. |
Wenn Untertitel heruntergeladen werden, sind diese im TTML-Format. Handelsübliche Abspielprogramme können jedoch mit dem Format nichts anfangen. Deswegen existiert bereits ein Konverter in das SRT-Format.
SubRip hat jedoch den Nachteil, dass wichtige Informationen bei der Konvertierung verloren gehen - im Besonderen die Positionierungsangabe, welche sicherstellt, dass wichtige Bildbereiche nicht überdeckt sind.
Meines Wissens nach hat SubRip auch keine Positionierungsmöglichkeit vorgesehen, manche Abspielprogramme unterstützen jedoch die Positionierungstags des ASS-Formates.
Aufgrund der fehlenden Spezifikation habe ich mich entschieden, das ASS-Format direkt einzubauen, anstatt SRT zu erweitern.
WebVTT wäre auch eine Möglichkeit, diese habe ich mir jedoch nicht genauer angeschaut.
Dieser PR fügt die Konvertierung in das Advanced SubStation (ASS) Format hinzu, welches mithilfe von libass in vielen populären Abspielprogrammen unterstützt wird. Besonders hervorzuheben sind hier Kodi und VLC, welche zusammen bestimmt einen Großteil der Nutzer hat.
Getestet habe ich die resultierenden Untertitel in Kodi, MPV und VLC.
Vorschau
Untertitelansichtsvergleich
Detailerklärungen
Aufgrund der abschließenden Formatierung, wie im Styleguide angegeben, empfehle ich, die Leerzeichenänderungen in der Reviewansicht auszublenden oder den letzten Commit zu entfernen. Editierungen von Maintainern sind aktiviert.
Die interne Positionsangabe ist stark auf die hier benötigten Werte (Integer in Nummernpadanordung) zugeschnitten. Falls später noch weitere Konvertierungen wie WebVTT hinzugefügt werden sollten, müsste diese wahrscheinlich angepasst werden.
Ein paar Besonderheiten im Hinblick zur "Spezifikation":
LayoutResX
,LayoutResY
,PlayResX
undPlayResY
gefordert. Diese Informationen sind uns bei der Generierung jedoch nicht bekannt. Die Angabe wirkt sich auf die Größe der Schrift aus. Ein Weglassen der Angaben scheint jedoch in allen getesteten Abspielprogrammen die Videodaten als Fallback zu nehmen und somit erwartbare Größen zu produzieren.Verdana, Arial, Tiresias
alstts:fontFamily
angegeben. Auch die ASS-Dateien können Schriftarten angeben, allerdings muss die angegebene Schriftart auf allen Systemen vorhanden sein und hat auch wieder Auswirkungen auf die Größe. Ein Weglassen der Angaben scheint auch hier wieder in allen getesteten Abspielprogrammen ein Fallback zu nehmen und somit erwartbare Größen zu produzieren.22
mit der Größe im Webplayer und SRT-Format sehr ähnlich zu sein.MarginV
gibt den Abstand zum oberen und unteren Ende an. Die Angabe sollte in Pixeln sein, ist gleichzeitig aber abhängig vonLayoutResX
,PlayResX
… die wir nicht angegeben haben. Deswegen bin ich nicht sicher, was die Einheit des Wertes real ist.25
erreicht in meinen Tests ungefähr die Position des Webplayers.ABGR
und der Alphachannel nochmal im Wert mit255
als durchsichtig.References
Ich bin über ein TTML gestolpert, in dem die
p
style
nur optional vorhanden waren. Der Force-Push hat die Commits dahingehend geändert.Als Bonus habe ich am Ende auch den
span
style
als optional geändert. Dieser kann einfach gedroppt werden, wenn unerwünscht - real habe ich das bisher nicht gesehen.