Bonjour,

J'ai écris ce petit programme il y a un bout de temps maintenant, mais je ne l'avais jamais partagé. C'est maintenant chose faite !

Il arrive parfois que les sous-titres qu'on télécharge pour un film en VO ne soient pas tout à fait synchronisés avec la vidéo. La plupart du temps, le décalage est constant et est visible du début jusqu'à la fin du film. Parfois, pour les séries par exemple, certaines coupures pub sont gérées différemment selon les vidéos, et un nouveau décalage apparait à chaque coupure.

Il existe déjà des programmes qui permettent de régler ce genre de problèmes. Pendant longtemps j'ai utilisé SubtitleEdit (gratuit et open source), mais il n'était pas très adapté à cette manipulation particulière (pas mal d'étapes, interface graphique parfois un peu lourde etc).

J'ai donc écrit un court programme (moins de 1000 lignes) qui ne fait que ça, mais qui le fait très vite !

Petite démonstration par l'exemple : imaginons que vous ayez un sous-titre où la phrase numéro 125, qui apparait à 1h 21min 35sec et 525ms soit "Oh John, vite, l'extincteur !". Toutes les phrases avant celle-ci étaient bien synchronisées avec le film, mais celle-ci et toutes celles qui suivent sont décalées de 2sec.

On fait donc glisser le fichier sous-titre (.srt en principe) sur l'exécutable du programme, et on tombe (si tout se passe bien et que le sous-titre est au bon format) sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Subtitle successfully loaded !
If you need help, type 'help' or 'h'. Type 'q' to exit.

> _
(eh oui, c'est en anglais, mais pas de panique !)

La première étape est de localiser la phrase en question dans le fichier de sous-titre. Pour ça, on dispose de plusieurs outils selon ce qui est plus pratique :
  • soit on sait qu'il s'agit de la 125ième phrase (un peu dur... mais si c'est au tout début du film on peut encore compter), et alors on tape #125. Si on s'est trompé et qu'on a tapé #123, on peut naviguer dans le fichier en utilisant + et - qui permettent de passer à la phrase suivante/précédente, ou +42 et -12 qui permettent de sauter plusieurs phrases d'un coup.
  • soit on sait approximativement à quel moment cette phrase apparait (1h 21min 35sec et 525ms), et on tape 1:21:35,500. Le programme cherche alors une phrase à ce temps précis, et s'il n'en trouve pas, il prend la prochaine sur la liste (le format est flexible, on peut omettre les millisecondes, les heures ou bien à la fois les heures et les minutes : hh:mm:ss, mm:ss.ms, etc). Si on s'est trompé, on peut utiliser les mêmes commandes qu'avec '#125' pour naviguer dans le fichier.
  • soit on se souvient que la phrase contient "vite, l'extincteur", et on tape simplement vite, l'extincteur. Le programme cherche alors depuis le début si une phrase contient cette expression, et affiche la première occurrence. Si par malheur cette expression apparait plusieurs fois dans le film, il est possible de naviguer dans la liste des occurrences en tapant + ou - qui permettent de passer à l'occurrence suivante/précédente, +15 ou -3 qui permettent d'avancer de 15 (reculer de 3) occurrences, et #25 qui permet d'atteindre la 25ème occurrence.


Une fois qu'on a trouvé la bonne phrase, le programme doit afficher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
[125] 01:21:35,525 :

Oh John, vite, l'extincteur !
Pour confirmer qu'on souhaite éditer cette phrase, il suffit d'appuyer sur 'Entrée' (ne rien écrire), et on a alors :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
How many seconds do you want to add / remove (empty to abord) ? _
Si on se rend compte qu'on s'est trompé de phrase, on peut donc toujours ne rien écrire et appuyer sur 'Entrée' pour revenir au mode recherche. Sinon, il suffit de taper un nombre de secondes (positif pour faire apparaitre la phrase plus tard, négatif pour qu'elle apparaisse plus tôt), par exemple 2.1 (qui décale donc de 2 secondes et 100 millisecondes).

Le programme édite alors le fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Editing subtitle, please wait... done (340 entries modified).
... et enregistre les modifications :
Le fichier de sous-titres est maintenant modifié et peut être lu à nouveau dans votre lecteur vidéo ! (Attention, certains lecteurs comme VLC doivent être relancés pour relire le fichier de sous-titre, sinon ils utilisent l'ancienne version et vous ne verrez pas les changements).

Pour quitter le programme, il ne reste plus qu'à taper q. Ceci dit, le laisser tourner en arrière plan ne coûte rien, et vous en aurez peut être besoin à nouveau par la suite si de nouveaux décalages apparaissent !

Place maintenant aux binaires et aux sources :
Vous trouverez les dernières version en visitant cette page : [click].
Pour les feignants, voici les liens directs (mais ce ne sont peut être pas les plus récents) :
  • binaires Windows XP (32bits) v1.0 : [7z] (82Ko), [zip] (125Ko)
  • binaires Ubuntu 10.10 (32bits) v1.0 : [7z] (82Ko), [zip] (125Ko)
  • sources multiplateforme v1.0 : [7z] (51Ko), [zip] (84Ko)


Le tout sous licence GNU GPL.

Pour compiler, vous devrez d'abord compiler la bibliothèque "Utils" qui se trouve dans le sous dossier du même nom. Elle n'a aucune dépendance ni configuration, et est donc très facile à compiler (les projets Code::Block sont fournis et prêts à l'emploi, d'ailleurs). La documentation Doxygen de cette bibliothèque est fournie ici : [7z] (262 Ko), [zip] (1329 Ko).