Universal Subtitle Format

Le Universal Subtitle Format, abrégé sous le sigle USF, est un format de sous-titrage basé sur XML pour des raisons de flexibilité, de portabilité, et de support de l'Unicode.



Catégories :

Sous-titrage - Technique cinématographique - Dialecte XML

Recherche sur Google Images :


Source image : malakith.net
Cette image est un résultat de recherche de Google Image. Elle est peut-être réduite par rapport à l'originale et/ou protégée par des droits d'auteur.

Page(s) en rapport avec ce sujet :

  • Le présent tutoriel a été réalisé à partir du document "officiel", en anglais, " Universal Subtitle Format (USF) - Specification v1.0", rédigé par Christophe... (source : pagesperso-orange)

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.

Introduction

L'Universal Subtitle Format a été conçu avec l'idée d'apporter l'ensemble des 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é.

Caractéristiques

La syntaxe du format

Un fichier XML peut être vu comme un arbre, avec une racine, des branches et des nœuds.

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

La racine de l'arbre USF est nommé "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 envisageable 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 incrementée dans le futur si de nouvelles caractéristiques sont nécessaires.

Metadonné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), ver Codes for the Representation of Names of Languages pour une liste complète.
Autres exemples :

<language code="fre">Français</language>
<language code="eng">English</language>
<language code="deu">Deutsch</language> çà 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 mondial 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 sert à 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. L'ensemble des 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 style nommé "MonNomDeStyle", on devra changer les 2 lignes.

Tous les styles héritent tout d'abord des attributs du style défini dans le lecteur.

Si le lecteur est configuré pour afficher une police avec une taille défini à 10, que vous définissiez un style, dans mon fichier USF, avec une taille relative "+2", alors, l'ensemble des 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 autorise l'utilisateur de fixer une taille "normale" qui lui convienne pour la lecteur de la vidéo et au sous-titreur de choisir le texte qui apparaîtra assez plus gros que la normale ou en 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     |  ...
  +-----------------------+    +-----------------------+

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 qu'elle police appelée comme ci-dessus a 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 les 0.255 codé en hexadecimal.
Ainsi le rouge pur c'est #FF0000, le vert pur #00FF00 et le bleu pur #0000FF.

La couleur peut être étendue à une 4ème composante (alpha) spécifiant la transparence de la couleur. Une valeur de l'alpha à 255 spécifie que la couleur est complètement transparente, et une valeur de 0 spécifie que la couleur est opaque. Les valeurs de l'alpha de 1 a 254 spécifie que le la quantité de couleur qui se mélange avec le fond. Lorsque on rédigé #FF0000 celui 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 à la totalité des couleurs définies. La transparence est une valeur comprise entre 0 et 100. Cette valeur remplace la transparence de chacune des couleurs. A titre d'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 quand 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.

L'attribut "alignment" (alignement) a 9 valeur envisageables :

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

L'attribut "relative-to" (relatif à ) à deux valeurs envisageables : "Window" ou "Video".

Les marges sont définies en pixels ou en pourcentage de la fenêtre ou de la vidéo dépendant 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.
A titre d'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 toujours reconnus 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 position 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 principale 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>

Une sous-titre a 2 attributs de d'encadrement de temps (timestamps)  : start (départ) y 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 "timestamps" 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 occasionnellemen.

Tous les éléments peuvent être situés indépendamment avec les mêmes attributs de position que les styles : "alignment", "horizontal-margin", "vertical-margin" and "relative-to".

<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é de 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 légèrement 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> incorrecte.</i>
<i><b>Un exemple</b> correcte.</i>

XHTML est aussi sensible (il différencie les majuscules et les minuscules):
<i>C'est correct</i>, <I>C'est incorrect</I>

L'élément "image" apporte un support pour inclure des images dans la vidéo, tal y como si fueran subtítulos, normalement ou mieux dit seulement est supporté le Bitmap.

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

L'image doit être dans le même répertoire, ou en un sous-répertoire du fichier du sous-titre.

L'attribut "colorkey" est la coulour que sera transparente dans l'image, par conséquent une valeur de #FFFFFF rendra transparente l'ensemble des partire blanches de l'image.

L'élément karaoke est particulièrement comparable à l'élément texte. La principale différence est qu'il faut utiliser une étiquette spéciale :

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

<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 l'ensemble des durées doit être identique à la durée du sous-titre.
Ici 100 + 400 + 200 + 300 = 1000 ms = 1s

L'élément "shape" se considère incomplet ou en développement (et inclus abandonné).

Une exemple basique de comment celà pourrait se faire :

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

Dans les dernières propositions non officielles l'élément "sharpe" a été rejeté en faveur de "USFxSVG", pour utiliser des graphiques vectorielles SVG de manière appropriée mais limitée en comparaison à ce dernier. (Ver 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>
  </style>
  
  <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 !</text>
    </subtitle>
  <subtitles>
  
</USFSubtitles>

Références

La majeure partie de cet article est basée sur la dernière spécification officielle de l'USF qui peut être téléchargée depuis le site web. [1]

Autres commentaires

La dernière spécification officielle date du 2003-06-18 et est en état de brouillon, aujourd'hui le développement semble arrêté, néanmoins la majorité des implémentations qui existe se base sur cette spécification.

Lien externe

Recherche sur Amazone (livres) :




Ce texte est issu de l'encyclopédie Wikipedia. Vous pouvez consulter sa version originale dans cette encyclopédie à l'adresse http://fr.wikipedia.org/wiki/Universal_Subtitle_Format.
Voir la liste des contributeurs.
La version présentée ici à été extraite depuis cette source le 15/04/2009.
Ce texte est disponible sous les termes de la licence de documentation libre GNU (GFDL).
La liste des définitions proposées en tête de page est une sélection parmi les résultats obtenus à l'aide de la commande "define:" de Google.
Cette page fait partie du projet Wikibis.
Accueil Recherche Aller au contenuDébut page
ContactContact ImprimerImprimer liens d'évitement et raccourcis clavierAccessibilité
Aller au menu