Systèmes d`Exploitation TP n 2 : Gestion de sous titres

Transcription

Systèmes d`Exploitation TP n 2 : Gestion de sous titres
Systèmes d’Exploitation
TP n◦2 : Gestion de sous titres
Remarque : Comme vous l’avez sans doute remarqué, ce premier TP porte le numéro 2. Le TP n◦ 1, facultatif mais vivement
recommandé pour ceux qui ne l’auraient pas encore fait, consiste simplement à tester les commandes écrites en TD. Vous trouverez pour cela quelques fichiers qui pourront vous aider à l’endroit où se trouvent les cours, dossier TP/TP1.
Précision : Les TP ne sont pas une course de vitesse. Prenez le temps qu’il vous faut (pas trop quand même...) pour faire les
choses bien et pour les comprendre. Avancez à votre rythme et n’hésitez surtout pas à poser des questions. Il vous est sans doute déjà arrivé de regarder un film ou une série en langue étrangère en affichant des sous titres.
Lorsqu’il s’agit d’un dvd, aucun problème ; En revanche, lorsque l’on récupère (en toute légalité : Télécharger, c’est
mal et illégal !) d’un côté le film et de l’autre un fichier de sous titres, il peut arriver plusieurs soucis :
– Il y a un décalage constant dans les sous titres
– Il y a un décalage à partir d’un certain moment
– Les sous titres ne sont pas au bon format
Nous nous proposons dans ce TP d’écrire un petit script très pratique qui va nous permettre d’effectuer toutes
ses opérations (et peut être d’autres encore !)
Notions utiles :
– Savoir écrire et exécuter un script
– Passer des paramètres à un script
– Maîtriser awk
– Maîtriser cut
1
Préliminaires
Une petite vidéo, ainsi que des fichiers de sous titres, sont disponibles dans le dossier TP/TP2. N’hésitez pas à
ouvrir les fichiers de sous titres dans un éditeur de texte pour en comprendre la structure.
1.1
Les différents formats
Un fichier de sous titres est un fichier de texte formaté contenant des chaînes de caractères (les sous titres), ainsi
que des temps (pour indiquer le début et la fin de l’affichage), qui est lu par un lecteur vidéo en même temps qu’une
vidéo. Il existe différents formats pour les fichiers de sous titres, nous allons ici simplement traiter les deux formats
les plus courants, à savoir SRT et SUB.
Le format SRT
Dans un fichier .srt, chaque sous titre est structuré de la sorte :
Numéro du sous-titre
Temps de départ HH:MM:SS,mmm --> temps de fin HH:MM:SS,mmm
Texte du sous-titre (peut être sur plusieurs lignes)
[Ligne vide pour séparer les différents sous titres]
Le format SUB
Temps de départ HH:MM:SS.mm,temps de fin HH:MM:SS.mm
Texte du sous-titre [en écrivant [br] ou en sautant une ligne pour séparer les lignes]
[ligne vide]
1
2
Le script
Créez un fichier script bash soustitre.sh et rendez le exécutable. Faites un test pour voir s’il se lance correctement (Faites afficher une chaine de caractère et lancez le script).
Ce fichier devra pouvoir prendre en compte des options permettant de spécifier la tâche à exécuter :
– ./soustitre.sh decalsrt 2000 fichier : permet de décaler tous les sous titres de 2 000 ms en plus (un
nombre négatif permettra de diminuer tous les temps), pour un fichier au format SRT
– ./soustitre.sh decaldepuissrt 500 45000 fichier : permet de décaler tous les sous titres, à partir de
45 000 ms, de 500 ms, toujours pour le format SRT
– ./soustitre.sh convert srtsub fichier : va convertir fichier du format SRT au format SUB (on utilisera l’argument subsrt pour effectuer la conversion dans l’autre sens)
Le script doit donc être capable de lire des options et d’exécuter en conséquence la bonne fonction. Il vous
est demandé d’écrire une fonction pour chacune de ces actions (decalsrt, decaldepuissrt, convert srtsub et
convert subsrt) et d’écrire le corps du script permettant de regarder quels paramètres ont été transmis et quelle
fonction doit être exécutée (nous avions déjà fait cela dans le TD n◦ 2, avec la calculatrice, n’hésitez surtout pas à
vous en inspirer).
Dans un premier temps, écrivez simplement l’entête de chaque fonction, et faites afficher une chaine de caractère
permettant de savoir quelle fonction est-ce. Puis, écrivez le corps du script, qui teste simplement le premier paramètre
et appelle la bonne fonction (ou retourne un message d’erreur si le paramètre n’est pas reconnu).
Dans un second temps, utilisez awk afin d’écrire la fonction decalsrt. On donne pour cela quelques informations
précieuses :
– awk utilise les variables particulières $1, $2,... pour définir les numéros de champs. Or, dans un script, $i représente le ieme paramètre. Du coup, on ne peut pas, à l’intérieur de la commande awk lancée par le script, utiliser
les paramètres directement. Mais ! awk bénéficie d’une option très utile, l’option -v nomVar=valeur qui va
vous permettre d’initialiser, à l’extérieur de la commande awk, des variables qui seront utilisées à l’intérieur...
Ex : awk -v toto=4 ’BEGIN {print toto}’ fichier.txt va afficher 4
– awk bénéficie d’un tas de fonctions prédéfinies très utiles qui vous feront gagner du temps si vous avez besoin
de faire un peu de calcul mathématique : Pensez à consulter la page du manuel...
– Si l’on souhaite utiliser awk, c’est aussi pour pouvoir récupérer correctement tous les chiffres des lignes avec
les temps. Or, chaque champ n’est pas toujours séparé des autres par le même séparateur (nous avons des . ,
des , et même une chaîne de caractère -->). Mais ! si l’on se rappelle que le séparateur de champ n’est pas un
simple caractère, mais bien une expression régulière, on peut en déduire que...
Lorsque cette fonction sera écrite, il ne devrait plus être trop difficile de faire les autres (la fonction decaldepuissrt
est quasiment la même, à cela près qu’il faudra faire un test pour savoir si l’on doit modifier ou non, c’est à dire si le
temps de départ du sous titre est supérieur au début du décalage ou non).
3
Gestion de différentes langues
On dispose de plusieurs fichiers de sous titres, un selon chaque langue. Afin de les différencier, nous les avons
nommés avec le nom du fichier, suivi d’un tiret et de deux lettres pour la langue.
Ex : Mon film-EN.srt
Lorsque l’on lance une vidéo, le lecteur va très souvent chercher dans le dossier s’il existe un fichier de sous titres
portant le même nom (avant l’extension) que la video et le lancer en même temps. Dans notre cas, le fichier n’a pas
exactement le même nom (nous avons ajouté quelques lettres pour spécifier la langue).
On souhaite donc ajouter à notre script une fonction permettant le lancement d’une vidéo avec le fichier de sous
titres souhaité :
– ./soustitre.sh open video.avi : va lancer simplement la vidéo sans se préoccuper des sous titres. Ceci
est réalisable par la simple commande vlc video.avi, qui lance la vidéo avec vlc.
2
– ./soustitre.sh openl EN srt video.avi
: va lancer la vidéo avec les sous titres anglais au format srt.
Pour réaliser la deuxième commande, le script va simplement chercher un fichier de sous titres de même nom que
la vidéo, suivie de la langue passée en second paramètre, avec l’extension spécifiée en troisième paramètre. Puis, il
copie ce fichier en lui retirant les lettres indiquant la langue et lance la commande vlc video.avi.
4
Plus fort encore
Pour ceux qui souhaitent aller encore plus loin, on se propose d’écrire un second script qui va permettre de créer
facilement la structure d’un fichier de sous titres. L’idée est la suivante :
Réaliser un script qui est en fait une boucle infinie et qui attend l’appui de l’utilisateur sur une touche. Il y a :
–
–
–
–
Une
Une
Une
Une
touche
touche
touche
touche
pour
pour
pour
pour
lancer un compteur
stopper le compteur
préciser le début d’un sous titre
préciser la fin d’un sous titre
L’idée est simplement de lancer le script, puis la vidéo et, lorsque les personnes commencent à parler, à cliquer
sur la touche de début de sous titres, puis, lorsqu’elles stoppent, à appuyer sur la touche de fin. Le script enregistre
à chaque appui le temps écoulé depuis le début et fabrique la structure du fichier (en gros, il écrit les temps de début
et de fin et laisse une ligne vide pour que l’on puisse écrire par la suite le texte).
Il suffira ensuite d’effectuer, à l’aide du premier script, un décalage pour bien positionner les sous titres (comme
le script n’a pas été lancé exactement en même temps que la vidéo).
3