Sous-titres


    méthode subtitleripper/transcode

Cette méthode est celle qui sera automatisée à terme. Elle permet de tirer parti de l'encapsulateur vorbis, qui permet de mixer video et son (comme le fait tuxrip actuellement) mais aussi texte et labels (titre, nom des langues, etc...)
Voici la méthode que nous proposons en utilisant l'arborescence créée par tuxrip. Cette méthode pourra ensuite être automatisée dans une future version de tuxrip.

Installation

1) Logiciels nécessaires

Il faut :
subtitleripper : http://subtitleripper.sourceforge.net/
gocr : logiciel libre de reconnaissance de caractères
ispell pour chaque langue à extraire : facultatif, mais pratique pour corriger les sous-titres extraits par OCR.

Ces logiciels peuvent être compilés ou peuvent être disponibles sous forme de paquets pré-compilés.

Pour Mandrake, installer les rpm :
gocr   <- dispo dans la distro
ispell-code_de_la_langue_à_2_lettres
subtitleripper  <- dispo dans PLF

2) Configuration de pgm2txt

pgm2txt est un script appartenant à subtitleripper. Il appelle gocr pour effectuer la reconnaissance des caractères (OCR).
Un peu de configuration peut être nécessaire, et elle doit être faite en éditant le script, car il n'utilise pas de fichier de préférence. En droits root, éditer le fichier pgm2txt (/usr/bin/pgm2txt en général) avec l'éditeur de votre choix.

  - Chemin vers la base de caractères (ligne 14)
Lorsque gocr ne reconnaît pas un caractère (ou un groupe de caractères), il demande à l'utilisateur de rentrer ce caractère. Ensuite, il stocke cette information dans une base de données dont il se sert pour effectuer la reconnaissance. Cela permet de ne pas avoir à rentrer à nouveau le même caractère non reconnu.
Dans le script, le chemin par défaut est ./db/ : il crée un répertoire db dans le répertoire subt du projet. Si vous voulez conserver la base pour tous les projets, le mieux est de lui faire creer cette base dans le répertoire $HOME de l'utilisateur.
Je recommande donc de remplacer ./db/ par $HOME/db/ (ou autre nom)

  - Options d'OCR (ligne 28)
Si on utilise les options auto :
GOCR_OPTIONS_AUTO="-s 8 -m 130"
-s correspond à l'espacement entre les mots. Trop haut, et les mots seront attachés, trop bas et il y aura des espaces au sein des mots. L'auteur avait mis la valeur -s 10, je préfère -s 8, mais cela peut varier d'un DVD à l'autre.

  - Afficheur graphique (lignes 38 et 39)
IMAGE_VIWER=
IMAGE_VIEWER_OPTIONS=
Personnellement j'utilise ImageMagick, je mets donc display (et j'enlève toute option)

Utilisation

  1) Création du répertoire de travail

Se déplacer dans le répertoire projet (il y a les répertoires audio, video, tmp, etc...)
Y créer un répertoire subt
cd subt

  2) Extraction des sous-titres


Taper en console :
cat ../vob/*.vob | tcextract -x ps1 -t vob -a $PISTE | subtitle2pgm -c $COLORCONV -o projet

où PISTE=0x20 + id <-- id est le numéro de la piste sous-titre. 0x20 correspond à la première, 0x21 à la deuxième, etc...

  COLORCONV=0,255,255,255  
            255,0,255,255 <-- la plus courante
            255,255,0,255
            255,255,255,0
            255,128,0,255 <-- exceptionnellement, quand les sous-titres sont des lettres blanches entourées d'un halo gris

Une de ces 4 valeurs est la bonne pour obtenir des sous-titres noirs sur fond blanc. Vous ne devez pas avoir de contour autour des lettres.
Cela crée 1 fichier PNG par sous-titre.

  3) Reconnaissance auto des caractères


pgm2txt -v [-d] projet

J'utilise -v  : permet d'afficher le sous-titre analysé, cela facilite l'entrée des caractères non reconnus

-d peut être ou non utilisé : sans -d, gocr utilisera sa base de données interne et ne demandera que les caractères exotiques ou difficiles (comme #, %, italiques, groupes de lettres accolées). Avec -d, gocr est utilisé en mode "database only", ce qui signifie qu'il construira la base avec tous les nouveaux caractères. La première fois, ce processus est long, car tout l'alphabet est à rentrer. En revanche, le résultat est plus fiable que sans -d.
Chaque sous-titre est extrait vers un fichier TXT.

Il utilise gocr pour extraire un fichier TXT par  
gocr demande d'entrer chaque caractère inconnu : la première fois, il les demande tous ! Mais vous pouvez enregistrer les caractères reconnus dans une database que vous pourrez réutiliser plus tard.

  4) Vérification de l'orthographe (facultatif)


ispell -d langue projet*txt

Utiliser pour langue :
  french pour un sous-titre en français
  american pour un sous-titre en anglais.

  5) Construction du fichier srt


srttool -s -i projet.srtx -o projet.srt

Construit le fichier sous-titres.
Vous pouvez construire ainsi plusieurs fichiers sous-titre pour chaque langue, en construisant plusieurs répertoires subt1, subt2 etc... pour chaque langue.

  6) Mixage des sous-titres dans le film ogm


Dans le répertoire projet :

ogmmerge -o projet.ogm -c 'TITRE=Titre du film' video/projet -c LANGUAGE=Français subt1/projet.srt -c LANGUAGE=English subt2/projet.srt [etc...]

Cela mixe tous les flux.
ogminfo projet.ogm vous donne la liste des flux et leur type (video, audio, texte), ainsi que le numéro qui leur est attribué.

  7) Lecture avec mplayer


mplayer projet.ogm -sid numéro_de_la_piste_sous-titre -subfont-text-scale 3

Pendant la lecture vous pouvez désactiver l'affichage des sous-titre avec v, et leur position avec r et t.

Avantages : fichier sous-titre au format texte, qui ne fait que quelques ko, inclusion totale dans le film ogm, ce qui facilite la distribution.
Désavantages : méthode longue (reconnaissance des caractères, correction OCR)
perte des formatages italiques, gras...


    méthode mencoder


dans le répertoire vob (avec les .vob et le .ifo), tapez :
cat ./*vob | mencoder - -ifo vts_01_0.ifo -o /dev/null -nosound -ovc copy -vobsubout subtitles -vobsuboutindex 0 -sid 0


-vobsubindex et sid indiquent le numéro du sous-titre.
Le fichier ifo n'est pas indispensable, mais il indique la couleur des sous-titres. Si vous ne le mettez pas, les sous-titres sont noirs.

Il crée alors deux fichiers : subtitles.idx (contient les temps) et subtitles.sub (contient les sous-titres sous forme d'images).

Pour relire : mplayer film.ogm -vobsub subtitles

Avantages : pas de problèmes de reconnaissance des caractères, maintien du formatage
Désavatage : comme les sous-titres sont des images et non un fichier texte, le fichier subtitles.sub est gros (2.7Mo pour 2 heures).

Il y a la possibilité de faire de l'OCR sur le fichier sub avec d'autres utilitaires, pas encore essayé.
Je vais essayer d'extraire plusieurs sous-titres.

Pour rajouter un subtitle dans une autre langue :

cat ./*vob | mencoder - -ifo vts_01_0.ifo -o /dev/null -nosound -ovc copy -vobsubout subtitles -vobsuboutindex 1 -sid 2

Et ça rajoute au subtitle.idx et .sub précédemment créé le subtitle n°2 avec l'index vobsub 1. Vous avez donc 2 vobsubs 0 et 1 correspondant aux sous-titres 0 et 2. C'est aussi simple que ça. Bien sûr, ça augmente la taille du fichier .sub d'autant.

Pour lire :
mplayer film2.ogm -vobsub subtitles -vobsubid 1
pour lire le sub vobsubindex n°1.

Au fait, je disais que le .ifo était nécessaire pour déterminer la palette.
La palette est rajoutée au début du fichier idx. Je suis sûr qu'on doit pouvoir la reconstituer si le fichier ifo est manquant (si on a extrait que les vobs par ex.)