SubRip

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

SubRip est un logiciel de reconnaissance optique de caractères pour Windows qui extrait les sous-titres et leur synchronisation de vidéos ou de DVD. Il les enregistre au sein d'un simple fichier texte. Subrip est aussi le nom du format de fichier associé à ce logiciel. Le fichier de sous-titres est nommé avec l'extension .srt. Ce format est utilisé par la plupart des logiciels de lecture vidéo ainsi que les logiciels d'édition de sous-titres.

En pratique, SubRip est le premier programme à avoir été configuré pour détecter correctement les sous-titres dans un fichier vidéo. Les codecs vidéo adéquats (DGMPGDec pour les DVD) doivent être installés avec AviSynth. SubRip est configuré pour afficher une image avec des sous-titres, incluant la couleur, la forme la zone de sous-titres et toutes manipulations d'image requises (Dilatation, ajustement de contraste). Après essai, l'extraction est alors faite automatiquement pendant la lecture entière du fichier.

Le format du temps utilisé est heures:minutes:secondes,millisecondes ; le champ des secondes a une précision de trois chiffres après la virgule. Le caractère de séparation des décimales est la virgule, puisque le programme a été écrit en France, et le caractère de fin de ligne est la paire CRLF. Les sous-titres sont numérotés, en commençant par 1.

Le portage de SubRip sur Linux est difficile car il a été écrit en Delphi, mais SubRip fonctionne bien sous Linux avec Wine.

Historique des versions[modifier | modifier le code]

SubRip a été écrit par le développeur français Brain, en 1999. La première version, SubRip 0.5 beta, est sortie le 3 mars 2000. Toutes les versions consécutives seront déclarées comme Beta. Sa dernière version était SubRip 0.97 beta publié le 8 septembre 2001. Brain stoppa le développement, et après plusieurs demandes de support pour GNU/Linux, sortit le code source de SubRip sous la licence GPL. SubRip est écrit en Delphi 5. Le site original est maintenant inaccessible, mais une copie est visible sur Internet Archive.

Après sept semaines, T.V. Zuggy et Guimli sortirent leur propre version du programme : SubRip 0.98. SubRip version 1.50 Beta 3 sortit le 5 janvier 2006. Le code a été transcrit vers Delphi 2005 (après des passages par Delphi 7). La dernière version est la 1.50 beta 4. Le code est en majorité issu du travail de ai4spam qui annonça en octobre 2006 qu'il arrêterait après une dernière sortie beta.

Champs[modifier | modifier le code]

Un sous-titre dans un fichier SRT consiste en cela :

numéro du sous-titre
Temps de départ --> temps de fin
Texte du sous-titre (peut être sur plusieurs lignes)

 [ligne vide]

L'Unicode et des balises HTML simples comme <i>, <b> et <font> dans les sous-titres sont supportés par la majorité des lecteurs vidéos, mais VLC et certains éditeurs de sous-titres (SubResync, Subtitle Workshop) ne comprennent pas très bien ces balises. Il n'y a aucune spécification formelle pour le format .srt.

Exemple de fichier SRT[modifier | modifier le code]

1
00:00:20,000 --> 00:00:24,400
En réponse à l'augmentation de la criminalité
dans certains quartiers,

2
00:00:24,600 --> 00:00:27,800
Le gouvernement se félicite
pour les prochaines élections...

MPlayer tolère le numéro manquant, comme dans l'exemple suivant :

00:00:00,000 --> 00:00:00,999
Je connais ça...

00:00:01,000 --> 00:00:01,999
C'est un système Unix!

Conversion[modifier | modifier le code]

Voici un exemple de script en Python qui convertit les sous-titres SubRip (.srt) dans le format MicroDVD (.sub):

import sys,string,re
 
framerate = 23.976
 
if(len(sys.argv)<2):
   print 'usage: %s input'%(sys.argv[0])
   sys.exit(0)
 
name = sys.argv[1]
if name[-4:] == '.srt':
    name = name[:-4]
infile = '%s.srt'%(name)
outfile = '%s.sub'%(name)
 
fin = open(infile,'r')
fout = open(outfile,'w')
subtitle_count = 1
read_mode = 0
read_buffer = []
html_re = re.compile(r'<.*?>')
for line in fin:
   line = line.strip()
   if (read_mode == 0) and (string.find(line,str(subtitle_count)) >=0 ):
      read_mode = 1
      continue
   if (read_mode == 1):
      starttime = 60*60*int(line[:2]) + 60*int(line[3:5]) + int(line[6:8]) + int(line[9:12])/1000.0
      stoptime = 60*60*int(line[17:2+17]) + 60*int(line[3+17:5+17]) + int(line[6+17:8+17]) + int(line[9+17:12+17])/1000.0
      read_mode = 2
      continue
   if (read_mode == 2):
      if (line == ''):
         read_mode = 0
         write_str = '{%d}{%d}%s%s'%(starttime*framerate,stoptime*framerate,'|'.join(read_buffer),'\n')
         write_str = html_re.sub('',write_str)
         fout.write(write_str)
         read_buffer = []
         subtitle_count += 1
         continue
      read_buffer += [line]
 
fin.close()
fout.close()

Voir aussi[modifier | modifier le code]

Liens externes[modifier | modifier le code]