AccueilđŸ‡«đŸ‡·Chercher

Universal Subtitle Format

Le Universal Subtitle Format, abrégé sous le sigle USF (de l'anglais signifiant littéralement « format universel de sous-titrage »), est un format de sous-titrage basé sur XML pour des raisons de flexibilité, de portabilité, et de support de l'Unicode.

Universal Subtitle Format
Caractéristiques
Extension
.xml
Développé par
Christophe PARIS, Ludovic Vialle
Basé sur

Introduction

L'Universal Subtitle Format a été conçu avec l'idée de fournir toutes les capacités des formats les plus complets déjà existants (SSA, ASS, etc) et de promouvoir une utilisation de type softsub (en opposition avec le hardsub) afin d'éviter toute perte de qualité.

Historique

La version v1.0 a été rendue publique en 2002.

La derniĂšre spĂ©cification officielle date du 2003-06-18 et est en Ă©tat de brouillon, actuellement le dĂ©veloppement semble arrĂȘtĂ©, nĂ©anmoins la majoritĂ© des implĂ©mentations qui existent se basent sur cette spĂ©cification.

Caractéristiques

  • BasĂ© sur XML
  • BasĂ© sur le temps
  • 4 types d'Ă©lĂ©ments :
    • texte
    • image
    • karaoke
    • forme (rectangle, ...)
  • SystĂšme avancĂ© de positionnement des Ă©lĂ©ments :
    • 9 types d'alignement (TopLeft, TopMiddle, TopRight, MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter, BottomRight).
    • Relatif Ă  la fenĂȘtre ou a la vidĂ©o.
    • Marge horizontale et verticale en pixel ou en pourcentage de la vidĂ©o ou de la fenĂȘtre.
  • Attribut du texte utilisable au niveau caractĂšre :
    • couleur
    • italique, gras, soulignĂ©
    • taille
    • police
  • PossibilitĂ© de dĂ©finir des styles
  • Information meta pour augmenter les facilitĂ©s de stockage/recherche (tri).
    • title (titre)
    • author (auteur)
    • language (langage) (ISO 639-2 plus une dĂ©finie par l'utilisateur)
    • date (date)
    • comment (commentaire)

La syntaxe du format

Un fichier XML peut ĂȘtre vu comme un arbre ayant une racine, des branches et des nƓuds.

<rootnode>            +-rootnode
  <node>                |
    <subnode/>          +-node
  </node>                  |
</rootnode>                +-subnode

La racine de l'arbre USF est appelé "USFSubtitles".

<USFSubtitles version="1.0">     +-USFSubtitles   (1)
                                    @-version     (1)
  <metadata>...</metadata>          +-metadata    (1)
  <styles>...</styles>              +-styles      (0..1)
  <effects>...</effects>            +-effects     (0..1)
  <subtitles>...</subtitles>        +-subtitles   (1..N)
</USFSubtitles>

Entre les parenthÚses le numéro possible des éléments. (1: requis, 0..1: optionnel, 1..N: au moins un, 0..N).
@ est la marque pour un attribut.

L'attribut de la "version" est utilisé par le lecteur pour identifier les caractéristiques qui sont utilisées dans l'archive actuelle. La version sera incrémentée dans le futur si de nouvelles caractéristiques sont nécessaires.

Métadonnée

Le nƓud de meta-donnĂ©e est assez explicite.

<metadata>                                  +-metadata
  <title>Titre de la vidéo</title>            +-title       (1)
  <author>                                    +-author      (1..N)
    <name>Mon nom</name>                      | +-name      (1)
    <email>adresse@fournisseur.com</email>    | +-email     (0..1)
    <url>http://example.com</url>             | +-url       (0..1)
    <task>traducteur</task>                   | +-task      (0..1)    
  </author>                                   |
  <language code="fre">Français</language>    +-language    (1)
                                              |  @-code     (1)
  <languageext code="DirectorComments">       +-languageext (0..1)
    Toff comments</languageext>               |  @-code
  <date>YYYY-MM-DD</date>                     +-date        (0..1)
  <comment>mon commentaire</comment>          +-comment     (0..1)  
</metadata>

L'attribut du code de la langue (language code) est normalisé (ISO 639-2), vers Codes for the Representation of Names of Languages pour la liste complÚte.
Autres exemples :

<language code="fre">Français</language>
<language code="eng">English</language>
<language code="deu">Deutsch</language> ça peut aussi ĂȘtre "ger".

L'extension du langage (languageext) doit ĂȘtre dĂ©fini sur cette ligne : Normal, HearingImpaired, DirectorComments, Forced, Children.

La date utilise le standard international des dates (ISO 8601).

YYYY-MM-DD :
  - YYYY : année en 4 chiffres (2006, 2007)
  - MM   : mois en 2 chiffres (01=Janvier, 02=FĂ©vrier, etc.)
  - DD   : jour en 2 chiffres (01 Ă  31)
Exemple : 2006-08-25

On peut utiliser les étiquettes basiques (i, b, u, font, br) dans l'élément commentaire (comment), cela permet de donner un format au texte comme italique, gras, souligné, etc.

Styles

Définir des styles est optionnel, mais il faut que les styles soient bien structurés et faciles à maintenir.

<styles>
  <style name="MonNomDeStyle">
    <fontstyle face="Arial"
               family="sans-serif"
               size="24" ou size="+1" (+ 10 %)
               color="#AARRGGBB"
               weight="bold"
               italic="yes"
               underline="no"
               alpha="0-100"
               back-color="#AARRGGBB"
               outline-color="#AARRGGBB"
               outline-level="2"
               shadow-color="#AARRGGBB"
               shadow-level="4"
               wrap="no|auto"/>
    <position alignment="TopLeft"
              horizontal-margin="10"
              vertical-margin="20%"
              relative-to="Window"
              rotate-x="0-359"
              rotate-y="0-359"
              rotate-z="0-359"/>
  </style>
  ...
</styles>

Les styles sont utilisés pour définir des configurations applicables à un groupe de sous-titres du texte.
Un style a un attribut nom (name) requis, c'est le nom qui servira de référence plus tard. Tous les autres attributs sont optionnels.

<styles>
  <style name="MonNomDeStyle"><fontstyle color="#FF0000" /></style>
<styles>
...
<subtitle>
  <text style="MonNomDeStyle">Premier sous-titre du texte</text>
<subtitle>
<subtitle>
  <text style="MonNomDeStyle">Second sous-titre du texte</text>
<subtitle>

Si on change le nom du style (actuellement appelé "MonNomDeStyle"), on devra changer les 2 lignes qui y font référence.

Tous les styles héritent, dans un premier temps, des attributs du style défini dans le lecteur.

Si le lecteur est configurĂ© pour afficher une police avec une taille dĂ©finie Ă  10, que vous dĂ©finissiez un style, dans mon fichier USF, avec une taille relative "+2", alors, tous les sous-titres utilisant ce style auront une taille 20 % plus grande que la police configurĂ©e dans le lecteur. On a le mĂȘme mĂ©canisme avec le style "Default" et les autres styles. Ceci permet Ă  l'utilisateur de fixer une taille "normale" qui lui convienne pour la lecture de la vidĂ©o et au sous-titreur de choisir le texte qui apparaĂźtra relativement plus gros que la normale ou plus petit. Le style par dĂ©faut est celui dont le nom est "Default".

<style name="Default"><fontstyle size="36"/></style>

Tout le style est hérité du style par défaut (celui du lecteur ou celui qui a été redéfini).

La hiérarchie utilisée :

  +-----------------------+
  |Internal default style |
  +-----------+-----------+
              |
  +-----------+-----------+              
  |Redefined default style|
  +-----------+-----------+              
              +----------------------------+
  +-----------+-----------+    +-----------+-----------+
  |       New style 1     |    |       New style 2     |  ...
  +-----------------------+    +-----------------------+
  • Style de police (fontstyle)

L'attribut famille (family) spécifie une liste priorisée de noms de famille de polices ou noms génériques de familles.
Quelques exemples :

family="Times, 'Times New Roman', serif"
family="Helvetica, Arial, sans-serif"
family="'Courier New', Courier, monospace"
family="'Comic Sans MS', cursive"

Il est recommandé de définir le nom d'une famille générique de police aprÚs n'importe quelle police nommée comme ci-dessus à une famille préférée des types de police ; une en serif, sans-serif, monospace, cursive ou fantasy. (Generic font families)

Les couleurs sont définies, comme en HTML, avec 3 composantes, rouge, vert et bleu RVB dans l'intervalle 0..255 codé en hexadecimal (00..FF).
Ainsi le rouge pur c'est #FF0000, le vert pur #00FF00 et le bleu pur #0000FF.

La couleur peut ĂȘtre Ă©tendue Ă  une 4e composante (alpha) spĂ©cifiant la transparence de la couleur. Une valeur de l'alpha Ă  255 spĂ©cifie que la couleur est totalement transparente et une valeur de 0 spĂ©cifie que la couleur est opaque. Quand on Ă©crit #FF0000 cela revient Ă  Ă©crire #00FF0000 une couleur rouge pur opaque. Pour faire une couleur rouge transparente on doit Ă©crire, par exemple #DDFF0000.

"alpha" : permet d'appliquer une transparence générale à l'ensemble des couleurs définies. La transparence est une valeur comprise entre 0 et 100. Cette valeur remplace la transparence de chacune des couleurs. Par exemple, si la couleur du texte (color) est #40FFFFFF" et la transparence (alpha) est 50, alors la valeur de color devient #A0FFFFFF.

"color" : C'est la couleur principale du texte ou la couleur d'apparition lorsque le karaoke est activé.
"backcolor" : C'est la couleur du texte avant apparition durant le mode karaoke.

L'Ă©paisseur de la police (font weight) doit ĂȘtre dĂ©finie dans la liste suivante:

"normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900"
'normal' Ă©quivaut Ă  '400'. 
'bold' Ă©quivaut Ă  '700'.
'lighter' et 'bolder' introduisent une notion d'héritage{{à préciser}}.
  • Position

L'attribut "alignment" (alignement) a 9 valeurs possibles :

  TopLeft      |    TopCenter   |      TopRight
  -------------+----------------+--------------
  MiddleLeft   |  MiddleCenter  |   MiddleRight
  -------------+----------------+--------------
  BottomLeft   |  BottomCenter  |   BottomRight

L'attribut "relative-to" (relatif Ă ) a deux valeurs possibles : "Window" ou "Video".

Les marges sont dĂ©finies en pixels ou en pourcentage de la fenĂȘtre, ou de la vidĂ©o, suivant ce qui a Ă©tĂ© dĂ©fini dans l'attribut "relative-to".

La rotation est définie en degrés. On peut utiliser différents axes de rotation pour créer un effet 3D.

    Y^    Z
     |   /
     |  /
     | /
     |/
 ----+-----------> X
    /| 

La rotation commune utilisée en 2D est celle d'axe Z.
Par exemple, pour écrire un texte en diagonal depuis le coin inférieur gauche au coin supérieur droit on peut écrire :

    <position alignment="BottomLeft"
              horizontal-margin="10"
              vertical-margin="10"
              relative-to="Window"
              rotate-z="45"/>

Effets

Les effets sont encore considérés comme inachevés ou en développement.
Ce qui suit est une idée, on définit quelques balises et le lecteur interpole la balise requise pour faire l'animation.
Exemple :

    <effects>
    <effect name="50%-ZoomIn-ZoomOut">
        <keyframes>
            <keyframe position="0%"><fontstyle size="1"/></keyframe>
            <keyframe position="50%"><fontstyle size="24"/></keyframe>
            <keyframe position="100%"><fontstyle size="1"/></keyframe>
        </keyframes>
    </effect>
    <effect name="FadeInFadeOut">
        <keyframes>
            <keyframe position="$debut"><fontstyle alpha="100"></keyframe>
            <keyframe position="$debut+500"><fontstyle alpha="0"></keyframe>
            <keyframe position="$fin-500"><fontstyle alpha="0"></keyframe>          
            <keyframe position="$fin"><fontstyle alpha="100"></keyframe>
        </keyframes>
    </effect>   
    <effect name="HScrolling">
        <keyframes>
            <keyframe position="0%"><position alignment="BottomRight" horizontal-margin="-$elemwidth"/></keyframe>
            <keyframe position="100%"><position alignment="BottomLeft"/></keyframe>
        </keyframes>
    </effect>       
  </effects>

On remplace $debut, $fin par les positions des balises.

Attributs qui peuvent ĂȘtre "animĂ©s" :

<position alignment, horizontal-margin, vertical-margin, relative-to/>
<fontstyle size, color, alpha, outline-color, outline-level, shadow-color, shadow-level/> 

Sous-titres

C'est la partie essentielle du fichier, elle contient le contenu des sous-titres.

<subtitles>                                 +-subtitles     (1..N)
  <language code="fre">Français</language>    +-language    (1)
                                              |  @-code     (1)
  <languageext code="DirectorComments">       +-languageext (0..1)
    Comentarios de Toff</languageext>         |  @-code
  <subtitle                                   +-subtitle    (1..N)
    start="hh:mm:ss.mmm"                        @-start     (1)
    stop="hh:mm:ss.mmm"                         @-stop      (0..1)
    duration="hh:mm:ss.mmm">                    @-duration  (0..1)
    <text></text>                               +-text      (0..N)
    <image></image>                             +-image     (0..N)
    <karaoke></karaoke>                         +-karaoke   (0..N)
    <shape/>                                    +-shape     (0..N)
    ...
  </subtitle>
  ...
</subtitles>

Un sous-titre a 2 attributs de temps (timestamps) : start (dĂ©part) et stop (arrĂȘt).
Les timestamps utilisent le format suivant :

hh : heure sur 2 chiffres (00-23)
mm : minutes sur 2 chiffres (00-59)
ss : secondes sur 2 chiffres (00-59)
mmm : millisecondes sur 3 chiffres (000-999)

Au lieu d'utiliser un "timestamp" pour arrĂȘter, on peut utiliser l'attribut de durĂ©e.
Il est aussi permis d'utiliser un "timestamp" raccourci : ss[.mmm]

100.000  -> 00:01:40.000
1.100    -> 00:00:01.100
5.500    -> 00:00:05.500

Le contenu d'un sous-titre peut ĂȘtre composĂ© de diffĂ©rents Ă©lĂ©ments : texte, image ou karaoke dans certains cas.

Tous les Ă©lĂ©ments peuvent ĂȘtre localisĂ©s indĂ©pendamment avec les mĂȘmes attributs de position que les styles : "alignment", "horizontal-margin", "vertical-margin" et "relative-to".

  • Texte
<text effect="MonNomDEffet" style="MonNomDEffet" speaker="JorSol">
  ''Italic'''''Bold'''<u>Underline</u><br/>
  <font face="Arial" size="16" color="#FF0000"
        outline-color="#00FF00"
        outline-level="2"
        shadow-color="#AAAAAA"
        shadow-level="4"
  >Texte en rouge en Arial 16</font>
</text>

Les éléments du texte sont définis par une propriété XHTML.
Toutes les étiquettes disponibles sont utilisées dans l'exemple précédent.
Une note spéciale pour les utilisateurs de HTML, XHTML est un peu plus strict que HTML.

En XHTML, on doit spécifier lorsqu'une étiquette est vide, tout comme le saut de ligne utilise la syntaxe "<br/>" au lieu de "<br>".
L'Ă©tiquette doit ĂȘtre hiĂ©rarchisĂ©e correctement :
<b><i>Un exemple</b> incorrect.</i>
<i><b>Un exemple</b> correct.</i>
XHTML est aussi sensible (il différencie les majuscules et les minuscules) :
<i>C'est correct</i>, <I>C'est incorrect</I>
  • Image

L'élément "image" apporte un support pour inclure des images dans la vidéo, comme des sous-titres. Normalement, seul le format Bitmap est supporté.

<image alpha="0-100" colorkey="#RRGGBB">Image_file_name</image>

L'image doit ĂȘtre dans le mĂȘme rĂ©pertoire ou dans un sous-rĂ©pertoire du fichier du sous-titre.

L'attribut "colorkey" est la couleur qui sera transparente dans l'image, donc une valeur de #FFFFFF rendra transparente toutes les parties blanches de l'image.

  • Karaoke

L'élément karaoke est trÚs similaire à l'élément texte. La principale différence est qu'il faut utiliser une étiquette spéciale : <k t="durée_en_ms"/>

Ainsi que dans l'exemple dessous le texte "chanson" a une durée de 400 ms, "cool" a une durée de 300 ms...

<subtitle start="00:00:10.000" stop="00:00:11.000">
  <karaoke><k t="100"/>une <k t="400"/>chanson <k t="200"/>trĂšs <k t="300"/>cool</karaoke>
</subtitle>

La somme de toutes les durĂ©es doit ĂȘtre Ă©gale Ă  la durĂ©e du sous-titre.
Ici 100 + 400 + 200 + 300 = 1000 ms = 1s

  • Forme (Shape)

L'élément "shape" se considÚre incomplet ou en développement (voire abandonné).

Un exemple simple de la façon dont cela pourrait se faire :

<shape type="rectangle" width="160" height="120"/>

Dans les derniÚres propositions non officielles l'élément "sharp" a été rejeté en faveur de "USFxSVG", pour utiliser des images vectorielles SVG de maniÚre appropriée, mais limitée, en comparaison à celui-ci. (cf. USFxSVG proposal 4)

Un exemple

<?xml version="1.0" encoding="UTF-8"?>
<USFSubtitles version="1.0">
  <metadata>
    <title>Exemple du Universal Subtitle Format</title>
    <author>
      <name>JorSol</name>
      <email>jorsol@wikipedia.org.ni</email>
      <url>http://fr.wikipedia.org/</url>
    </author>
    <language code="fre">Français</language>
    <date>2006-02-01</date>
    <comment>Un court exemple de fichier USF.</comment>
  </metadata>
  <styles>
    <!-- Ici, on redéfinit le style par défaut -->
    <style name="Default" >
      <fontstyle face="Arial" size="24" color="#FFFFFF" back-color="#AAAAAA" />
      <position alignment="BottomCenter" vertical-margin="20%"
                relative-to="Window" />
    </style>
    <!-- Tous les autres styles héritent du style prédéterminé -->
    <style name="Narrateur">
      <fontstyle italic="yes" />
    </style>
    <style name="Karaoke">
      <fontstyle back-color="#550000" color="#FFFF00" bold="yes" />
    </style>
  </styles>
  <subtitles>
    <subtitle start="00:00:00.000" stop="00:00:05.000">         
      <text alignment="MiddleCenter">Bienvenue Ă  
        '''Wikipedia en Français'''</text>
      <image alignment="TopRight" vertical-margin="20" horizontal-margin="20"
             colorkey="#FFFFFF">WP_Logo.bmp</image>
    </subtitle>
    <subtitle start="00:00:06.000" stop="00:00:10.000">
      <text style="Narrateur" speaker="JorSol">Salut ! C'est une <font size="16">
        petite</font> démonstration, chantons une chanson.</text>
    </subtitle>
    <subtitle start="00:00:06.000" stop="00:00:10.000">
      <karaoke style="Karaoke"><k t="700"/>La! La ! La ! <k t="1000"/>
        Le Karaokeeeeeeeee <k t="100"/>c'est <k t="200"/>divertissant !</karaoke>
    </subtitle>
  </subtitles>
</USFSubtitles>

Références

    Voir aussi

    Articles connexes

    Liens externes

    Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.