Accueil  Tutoriels  Outils Karaoké  Téléchargements  Forum  Multimedia  Contact

SweetKaraoké

Sous-titrage de karaokés


La syntaxe du format de sous-titre Universal Subtitle Format (USF)




- Traduction : SweetKaraoké
- Arrangements / Illustrations (photos...) : SweetKaraoké
- Relecture : Toff


Accédez directement à :

Chapitre 1 : Généralités

Le présent tutoriel a été réalisé à partir du document "officiel", en anglais, "Universal Subtitle Format (USF) - Specification v1.0", écrit par Christophe PARIS et Ludovic VIALLE entre novembre 2002 et juin 2003.

Vous pouvez retrouver ce document sur le site officiel : http://usf.corecodec.org/ (site fermé).


1.  
Introduction.

Le "Format Universel de Sous-titres" (Universal Subtitle Format ou USF) est un nouveau format contenant le meilleur des formats de sous-titres actuellement disponibles. Très flexible, il peut être employé autant pour des projets courants de sous-titrage que pour des projets plus complexes. L'intérêt du format réside dans le fait qu'il inclut un ensemble d'outils et de caractéristiques permettant d'améliorer la qualité des vidéos sous-titrées en empêchant le processus de codage des sous-titres avec la vidéo (à l'origine d'une grande perte de qualité due au contraste des sous-titres).

En outre, le format a été conçu afin que l'utilisateur puisse changer, lors de la lecture du sous-titre, le style défini par défaut (ex. : la taille de police, la couleur, etc...).

Un grand remerciement à mf, Gabest, Pamel et Liisachan qui m'ont conseillé sur ce projet :).


2.  
Caractéristiques et avantages.

Le format USF est basé sur le format de XML pour des raisons de flexibilité, lisibilité du code, portabilité, gestion de l'unicode, représentation arborescente et hiérarchique... 


Chapitre 2 : Structure générale d’un script USF

Tout comme un fichier XML, un fichier USF peut être comparé à un arbre avec une racine, des branches et des noeuds.

<noeud-racine>             +-noeud-racine
  <noeud>                     |
    <sous-noeud/>            +-noeud
  </noeud>                        |
</noeud-racine>                 +-sous-noeud

Le noeud-racine de l'arbre USF est appelé "USFSubtitles".


Un script USF se décompose de la manière suivante :
<?xml version="1.0" encoding="UTF-8"?>
<!-- DOCTYPE USFSubtitles SYSTEM "USFV100.dtd" -->
<?xml-stylesheet type="text/xsl" href="USFV100.xsl"?>

En réalité, seule la première ligne est vraiment utile dans la "déclaration" du fichier xml. La seconde ligne (qui est d'ailleurs en commentaire ici <!-- un commentaire -->) sert à spécifier le DTD (Document Type Definition) utilisé par le document xml. Ici, c'est un fichier externe "USFV100.dtd" qui contient différentes règles que le document xml doit respecter et permettant de le valider. Ainsi un "parser" xml pourra refuser les documents non valides ou alors indiquer une erreur. La troisième ligne définit une feuille de styles XSL (Extensible Stylesheet Language) pour afficher le document xml. La feuille de styles "USFV100.xsl" utilisée dans cet exemple va transformer le fichier USF au format xml en un fichier HTML pour pouvoir être affiché dans un navigateur. Vous pouvez faire l'essai en téléchargeant cet exemple et en ouvrant le fichier USFV100_sample.usf dans IE. <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>

Remarque : entre paranthèses, est spécifié le nombre d'éléments qu'il est possible de créer.
- 1 : un seul élément (élément obligatoire),
- 0..1 : zéro ou un seul élément (élément optionnel),
- 1..N : au moins un élément.
@ est une "marque" pour un attribut.

<USFSubtitles version="1.0"> est le numéro de version du format USF. Lorsque des extensions au format seront ajoutées, le numéro sera et incrémenté.


Chapitre 3 : Lignes d’informations générales du script (metadata)

Voici, tout d’abord, un exemple de noeud metadata :



Le noeud metadata peut contenir l'ensemble des éléments suivants :

<metadata>                                                     
  <title>My movie</title>                                   
  <author>                                                       
     <name>My name</name>
     <email>myemail@server.com</email>
     <url>http://www.mysite.com</url>
     <task>translator</task>
  </author>
  <language code="eng">English</language>
 
  <languageext code="DirectorComments">
    Toff comments</languageext>

  <date>YYYY-MM-DD</date> 
  <comment>my comment</comment>
</metadata>
+-metadata
 +-title (1)                                                       +-author (1..N)
  | +-name (1)
  | +-email (0..1)
  | +-url (0..1)
  | +-task (0..1) 
 
 +-language (1)
  |  @-code (1)
 +-languageext (0..1)
  |  @-code
 
 +-date (0..1)
 +-comment (0..1)

Remarque : <...></...> est appelé balise ouvrante/fermante. Toute information (texte, forme, karaoké, image) est nécessairement contenue entre les balises.


<title>...</title> : nom du sous-titre / film.

<author>...</author> : informations relatives aux auteurs du sous-titre.
<language code="...">...</language> : langue utilisée dans le sous-titre.
L'attribut du code de langue (code="...") est normalisé (ISO639-2). Pour plus d'informations, consultez cette adresse : 
http://www.loc.gov/standards/iso639-2/englangn.html.

Quelques exemples :
<language code="fre">Français</language>
<language code="spa">Espagñol</language>
<language code="deu">Deutsch</language> ("deu" peut être remplacé par "ger")

<languageext code="...">...</languageext> : extension de langage. Il s'agit d'une information supplémentaire sur le type de sous-titre et doit être définie parmi la liste suivante :
<date>...</date> : la date de réalisation du sous-titre. Elle doit être écrite en suivant la norme internationale ISO8601.
YYYY-MM-DD :
- YYYY : les 4 chiffres de l'année,
- MM : les 2 chiffres du mois (ex : 01 pour le mois de janvier),
- DD : les 2 chiffres du jour du mois (entre 01 et 31)),
Par exemple : 2005-11-03.

<comment>...</comment> : pour ajouter des commentaires.

Chapitre 4 : Les lignes de style (styles)

1.   Présentation.

Voici, tout d’abord, un exemple de noeud styles :



Les styles définissent l'apparence et le positionnement d'un ou de plusieurs lignes de sous-titre. La définition de styles est facultative (le lecteur vidéo avec lequel vous lirez le sous-titre en définira automatiquement une), mais elle vous permettra de mieux structurer vos lignes de sous-titre.

Pour être défini, un style a, au moins, besoin de l'attribut "name" (nom). Ce nom servira de référence pour déterminer quel style est appliqué à telle ou telle ligne de sous-titre.
Les autres attributs sont optionnels.

Exemple :

<styles>
  <style name="MonStyle"><fontstyle color="#FF0000" /></style>
<styles>
...
<subtitle>
  <text style="MonStyle">première ligne de texte</text>
<subtitle>
<subtitle>
  <text style="MonStyle">deuxième ligne de texte</text>
<subtitle>

Remarque : tous les styles héritent d'abord des propriétés du style défini dans le lecteur vidéo. Par exemple, si vous configurez votre lecteur avec une taille de police à 20, que vous définissiez un style, dans votre fichier USF, avec une taille relative "+1", alors, tous les sous-titres utilisant ce style auront une taille 10% plus grande que la police configurée dans le lecteur. On a le même mécanisme avec le style "Defaut" et les autre styles. Ceci permet à l'utilisateur de fixer une taille "normale" qui lui convienne et au sous-titreur de choisir le texte qui apparaîtra en plus gros que la normale ou en plus petit.
Le style par défaut est celui dont le nom est "Default". Voici un exemple :

  <styles>
    <!-- style par défaut -->
    <style name="Default">
      <fontstyle face="Arial" size="24" color="#EEEEFF" outline-color="#5555FF"/>
      <position alignment="BottomCenter" vertical-margin="10%" relative-to="Window" />
    </style>
       
    <!-- autres styles - styles héritant des propriétés du style par défaut -->
    <style name="MonStyle">
      <fontstyle back-color="#992299" color="#FFAAFF" bold="yes" outline-color="#CC55CC"/>
    </style>
  </styles>


2.   Propriétés et attributs d'un style.

Pour fonctionner, un style doit obligatoirement être de la forme :

<style name="...">
    <fontstyle
  (attributs de fonstyle)   />
    <position  
(attributs de position)   />
</style>


<style name="..."> étant la balise entrante du style et </style> la balise fermante. 
Les propriétés (attributs) d'apparence (fontstyle) et de position (position) du style sont définies entre ces deux balises.

Attributs de style :

name : nom du style.

Attributs de fonstyle (style de la police) :

face : le nom de la police Windows utilisée.

family : l'attribut family spécifie, une liste hiérarchisée de noms de familles de police et/ou de noms de familles génériques. Voici 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 une famille de police générique (ex. : serif, sans-serif, monospace, cursive ou fantasy) après les noms des polices.

size : taille de la police en pixels (ex. : size="24") ou en pourcents (ex. : size="+1", +10%).

color : couleur du texte ou couleur avec laquelle apparaît le texte lorsque le mode karaoké est activé  (color="#AARRGGBB").
La couleur est définie comme en HTML, avec 3 composants : rouge, vert et bleu (valeur comprise entre 0 et 255, codée en l'hexadécimal). Le rouge est, par exemple, codé #FF0000, le vert #00FF00 et bleu #0000FF.
Un quatrième composant permet de définir la transparence de la couleur (valeur alpha). Cette valeur est comprise entre 0 et 255, codée en hexadécimal. Une valeur de 255 indique que la couleur est transparente et une valeur de 0 indique que la couleur est opaque.
Exemple : le rouge opaque est codé par #00FF0000, le rouge avec transparence #7FFF0000.

weight : épaisseur du texte (ex. : weight="bold").
L'épaisseur de la police doit être définie parmi la liste suivante :
"normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900"

normal est identique à 400.
bold (gras) est identique à 700.
lighter (plus fin) et bolder (plus gros) introduisent la notion d'héritage.

italic : définit si le texte est en italique (yes = activé) ou pas (no = désactivé).

underline : définit si le texte est souligné (yes = activé) ou pas (no = désactivé).

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.

back-color : couleur utlisée uniquement en mode karaoké. Couleur du texte avant que le karaoké n'apparaisse (color="#AARRGGBB").

outline-color : couleur de la bordure du texte (color="#AARRGGBB").

outline-level : largeur de la bordure autour du texte en pixels (ex. : outline-level="2").

shadow-color : couleur de l'ombre du texte (color="#AARRGGBB").

shadow-level : décalage, en pixels, entre le texte et son ombre (ex. : shadow-level="4").

wrap : découpage automatique du texte (auto : activé, no : désactivé). Ex. : wrap="no|auto".



Attributs de position (position du texte) :

alignment : définit l’emplacement du sous-titre dans la vidéo. Les valeurs possibles sont :

TopLeft TopCenter TopRight (sous titre en haut de l’écran)
MiddleLeft MiddleCenter MiddleRight (sous titre au milieu de l’écran)
BottomLeft BottomCenter BottomRight (sous titre en bas de l’écran)

Ex. : alignment="TopLeft".

horizontal-margin : marge en haut et en bas de la vidéo ou de l'écran (suivant ce qui est défini dans l'attribut relative-to). La valeur peut être en pixels ou en pourcents (ex. : horizontal-margin="10").
         
vertical-margin : marge à gauche et à droite de la vidéo ou de l'écran (suivant ce qui est défini dans l'attribut relative-to). La valeur peut être en pixels ou en pourcents (ex. : vertical-margin="20%").

relative-to : 2 valeurs possible : "Window" ou "Video" (ex. : relative-to="Window").

rotate-[x,y,z] : rotation du texte en degrés suivant l'axe des x, des y ou des z. La valeur est comprise entre 0 et 359, et peut être un nombre à virgule.



Chapitre 5 : Les lignes de sous-titres (subtitles)

1.   Présentation.

Voici, tout d’abord, un exemple de noeud subtitles :



Le noeud subtitles peut contenir l'ensemble des éléments suivants :

<subtitles>
<language code="eng">English</language>
<languageext code="DirectorComments">
Toff comments</languageext>
<subtitle
start="hh:mm:ss.mmm"
stop="hh:mm:ss.mmm"
duration="hh:mm:ss.mmm">
<text></text>
<image></image>
<karaoke></karaoke>
<shape/>
...
</subtitle>
...
</subtitles>
+-subtitles (1..N)
 +-language (1)
  | @-code (1)
 +-languageext (0..1)
  | @-code
 +-subtitle (1..N)
  | @-start (1)
  | @-stop (0..1)
  | @-duration (0..1)
 +-text (0..N)
 +-image (0..N)
 +-karaoke (0..N)
 +-shape (0..N)

Pour être défini, un sous-titre a besoin de 2 attributs de temps : start (début) et end (fin).
Le format qui doit être utilisé pour définir le temps de début et de fin d'une ligne de sous-titre est le suivant :
- hh : 2 chiffres pour les heures (chiffre compris entre 00 et 23).
- mm : 2 chiffres pour les minutes (chiffre compris entre 00 et 59).
- ss : 2 chiffres pour les secondes (chiffre compris entre 00 et 59).
- mmm : 3 chiffres pour les millisecondes (chiffre compris entre 000 et 999).


2.   Propriétés et attributs d'un sous-titre.

Pour fonctionner, un sous-titre doit obligatoirement être de la forme :

    <subtitles>
        <subtitle start="00:00:00.000" stop="00:00:05.000">
        <text (attributs du texte)>Ma première ligne USF<br/>...et la seconde</text>
        </subtitle>
        <subtitle start="00:00:00.000" stop="00:00:05.000">        
        <image (attributs de l'image)>core_na.bmp</image>
        ...
        </subtitle>
    </subtitles>

<subtitle start="00:00:00.000" stop="00:00:05.000"> étant la balise entrante du sous-titre et </subtitle> la balise fermante. 

Exemple :
<text alignment="TopCenter">Overlapped text</text>
<text style="AlignWindowTest" alignment="TopLeft">TopLeft</text>
<image alignment="TopRight" vertical-margin="20" horizontal-margin="20" colorkey="#ffffff">core_na.bmp</image>

Exemple :
<text style="AlignWindowTest">TopLeft</text>


3.   Propriétés et attributs des éléments text, image, karaoke et shape.

L'élément text (texte) :

<text style="MyStyleName">
<i>Italic</i><b>Bold</b><u>Underline</u><br/>
<font face="Arial" size="16" color="#FF0000"
outline-color="#00FF00"
outline-level="2"
shadow-color="#AAAAAA"
shadow-level="4"
>Red text in Arial 16</font>
</text>

L'élément text est défini par un sous-ensemble de XHTML. Tous les tags possibles sont proposés dans l'exemple ci-dessus. Il s'agit de :

<i>Italic</i> : tag pour écrire en italique.

<b>Bold</b> : tag pour écrire en gras.

<u>Underline</u> : tag pour écrire en souligné.

<br/> : tag pour indiquer un retour chariot.

<font>Red text in Arial 16</font> : tag pour définir l'apparence du texte. Les attributs sont identiques à ceux de fonstyle (style de la police) (voir le chapitre relatif aux styles).
Le XHTML est sensible à la casse : par exemple,  le tag <i>This right</i> ne peut pas être écrit en majuscules <I>This is wrong</I>.

L'élément image (image) :

L'image doit se trouver dans le même répertoire que le fichier USF correspondant ou dans un sous-répertoire.
La syntaxe utilisée est la suivante :

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

Les attributs de image sont :

alpha : transparence de l'image. Il s'agit d'une valeur entre 0 et 100.

colorkey : couleur utilisée pour la transparence dans l'image, par exemple pour les fichiers *.bmp.
Cet attribut n'est pas utile pour les fichiers *.png ou *.gif qui embarquent déja ce type d'information.
 

L'élément karaoke (karaoké) :

<karaoke style="MyStyleName"><k t="1000"/>song <k t="1000"/>text</karaoke>

L'élément karaoke est très similaire à l'élément text. La principale différence réside dans l'utilisation du tag <k t="(durée en ms)"/>.

Dans l'exemple suivant, le mot "song" a une durée de 400 ms, le mot "cool", une durée de 300ms...

<subtitle start="00:00:10.000" stop="00:00:11.000">
<karaoke><k t="100"/>a <k t="200"/>very <k t="300"/>cool <k t="400"/>song</karaoke>
</subtitle>

La somme de toutes les durées des tags karaokés est égale à la durée du sous-titre.
Ici : 100+200+300+400 = 1000 ms = 1s

L'élément shape (forme) :

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

Cet élément n'a , pour l'instant, pas été implanté.

Chapitre 6 : Les lignes d'effets (effects)

Cet élément n'a , pour l'instant, pas été implanté.


Nombre total de visiteurs :