Nom : Incrustation de sous-titres dans un fichier vidéo AVI avec MEncoder
Type : Traitement vidéo
Niveau : Débutant
Pré-requis : Aucun, si ce n'est avoir un peu de temps et de patience ^^
Objectifs : Le but de la manoeuvre est d'obtenir une vidéo au format AVI avec
des sous-titres proprement incrustés dans une bande noire sous l'image
Liens Connex :
Petite intro :
Il arrive souvent qu'on doive incruster soi-même des sous-titres, par exemple lorsqu'on travaille sur des vidéos personnelles (non ce n'est pas une légende urbaine, ça arrive ^^), il y a une solution très simple à cela grâce aux différents formats de containers vidéo, comme Matroska (mkv) ou Ogg, qui permettent d'englober plusieurs flux vidéos, audios, et des sous-titres.
Mais le problème qui se pose souvent, c'est que ces formats ne sont que rarement reconnus par les platines DVD/DivX, donc soit on garde le fichier vidéo et les sous-titres séparés, ce qui ne pose pas de problème pour une lecture sur PC, soit on incruste définitivement les sous-titres dans le fichier AVI.
C'est ce que va aborder ce tutoriel, et il est important de comprendre que c'est irréversible, on va 'brûler' les sous-titres dans l'image, le format AVI n'étant pas prévu pour contenir des sous-titres, et comme on va devoir réencoder la vidéo, il y aura inévitablement une perte de qualité, moindre mais notable.
Ca peut paraître compliqué expliqué comme ça, mais c'est en réalité très simple.
I/ Installation et configuration de MEncoder :
Que l'on soit sous Linux, Windows ou MacOS X, le même logiciel est disponible (pour MacOS je suis par contre dans l'incapacité d'expliquer la démarche, mais je suppose que mis à part la config des polices, ça revient au même). Il en existe surement certains plus 'user-friendly', mais c'est à mon avis le plus efficace et le plus simple, après 2/3 utilisations on réutilise presque toujours la même commande.
Ce logiciel s'appelle MEncoder, c'est un encodeur vidéo puissant associé au lecteur vidéo MPlayer, et il s'utilise en ligne de commande. Il existe des interfaces graphiques (qui pour la plupart nécessitent l'installation de GTK) que l'on pourra trouver et installer très facilement depuis leur site officiel, entre autres.
Il existe de très (très) nombreuses options, et si vous lisez le manuel (disponible ainsi que beaucoup de docs sur leur site) vous allez sans doute vous barrer en courant, mais en fait ici très peu sont nécessaires, et celles du manuel qui sont les plus effrayantes ne sont utiles que lors d'opérations vraiment très poussées..
Bon, avant toute chose, l'installation du logiciel en lui-même ne pose pas de problèmes, mais il faut absolument configurer l'utilisation de polices pour les sous-titres.
Si vous ne disposez pas de polices TrueType, vous pouvez en trouver sur leur site officiel.
Pour les binaires et les codecs:
Télécharger par exemple MPlayer-mingw32-1.0pre7.zip et le dézipper dans un répertoire quelconque, disons C:\MPlayer pour l'exemple.
Puis télécharger les codecs qui lui sont nécessaires et qui doivent s'appeler
windows-all-20050412.zip par exemple, et les dézipper dans le répertoire
C:\MPlayer\codecs
Ensuite la seule manipulation de configuration nécessaire est celle concernant le chemin vers la police de caractère: il faut modifier le fichier 'config' qui se trouve normalement dans le dossier C:\MPlayer\mplayer et remplacer la valeur 'font' par le chemin vers le répertoire 'Fonts' de Windows, par exemple mettre 'C:\Windows\fonts\arial.ttf'
Après, on copie une police TrueType de son choix du répertoire Fonts de Windows dans le répertoire C:\Mplayer\mplayer et on la renomme en 'subfont.ttf'
C'est tout ce qu'il y a à configurer, il n'y a rien du tout à installer, il suffit de dézipper les exécutables et les codecs et c'est bon.
Les packages de mplayer et mencoder sont normalement disponibles sur toutes les distributions, sinon il suffit de l'installer depuis les sources en suivant le README, je suppose qu'il s'agit d'une install basique "./configure && make && make install".
Pour la gestion de la police utilisée pour les sous-titres, il faut choisir une police TrueType (extension .ttf) via la librairie FreeType, généralement on peut les trouver là :
/usr/share/fonts/truetype/freefont/
Si vous ne voulez pas toujours utiliser la même, vous devrez spécifier à chaque fois le chemin de la police avec l'option : "
-font /chemin/vers/la/police.ttf"
Sinon, il suffit de choisir celle qui vous convient et de créer un lien symbolique vers elle depuis le répertoire ".mplayer" de votre répertoire home sous le nom de "subfont.ttf" :
Code:
ln -s /chemin/vers/la/police.ttf ~/.mplayer/subfont.ttf |
II/ Commande d'encodage :
Maintenant, pour tout le monde, la commande :
Code:
mencoder la_video.avi -oac copy -ovc lavc -lavcopts
vcodec=mpeg4:vbitrate=1000 -sub fichier_sous-titres.srt -ffactor 10
-subfont-autoscale 1 -subfont-encoding unicode -subcp latin1 -subpos 100
-vf expand=0:-120:-1:-1 -o video_subbed.avi |
MEncoder gère d'autres formats de sous-titres (11 me semble, pas sûr), mais pour l'exemple et parce que c'est plus pratique, j'utilise le format srt.
Je vais expliquer un peu tout ça, mais vous trouverez plus d'informations dans le manuel ^^
Pour avoir la liste des valeurs que peut prendre une option : -option help
-oac (output audio codec) permet de spécifier avec quel codec audio on veut que ce soit encodé, ici on utilise 'copy' car on ne veut pas réencoder le flux audio, on a pas a le modifier, donc il sera simplement recopié tel quel.
-ovc (output video codec) permet de spécifier avec quel codec vidéo on veut que ce soit encodé, mon choix est 'lavc' (les codecs de la librairie ffmpeg), mais vous pouvez très bien en changer, en changeant alors "-lavcopts" et les options qui suivent d'après l'explication du manuel
-lavcopts permet de règler les options de libavcodec qui suivent (si on avait utilisé le codec xvid à la place de lavc par exemple, on aurait ici utilisé -xvidencopts) :
vcodec= (Vidéo codec) spécifie exactement quel codec utiliser, mpeg4 (divx 4/5) est le choix par défaut, là aussi on peut en changer
vbitrate= (Vidéo bitrate) spécifie quel bitrate utiliser pour l'encodage, 1000 est un bon choix pour une bonne qualité, si on veut une qualité moyenne on peut descendre à 920, et monter à 1200 pour de la haute qualité
-sub pour spécifier le nom (avec le chemin s'il n'est pas dans le répertoire courant) du fichier de sous-titres
-ffactor pour définir la transparence de la police (pas indispensable comme option), avec 10 on obtient une bordure noire épaisse, 1 une bordure noire fine, 0,75 une bordure noire très fine, et avec 0 les polices sont toutes blanches
-subfont-autoscale pour choisir le mode de redimensionnement automatique, avec 0 il y en a aucun, avec 1 le redimensionnement est proportionnel à la largeur de la vidéo (la taille des caracteres me va comme ça, à vous de faire des petits tests pour voir ce qui vous convient), avec 2 il est proportionnel à la hauteur de la vidéo et avec 3 à la diagonale de la vidéo
-subfont-encoding fixe l'encodage de la police, avec 'unicode' tous les signes du fichier de police seront affichés et unicode sera utilisé, c'est le choix par défaut
-subcp ne marchera que si votre système gère 'iconv' (une librairie de conversion d'encodages, libiconv que vous pouvez trouver à l'url en lien connex), ça permet de définir la page de code à utiliser pour les sous-titres, 'latin1' est un bon choix qui permet d'éviter que les accents ne passent pas
-subpos (dont l'intérêt principal est son utilisation avec -vf expand) permet de
définir la position des sous-titres sur l'écran, la valeur utilisée est la position verticale en % de la hauteur de l'écran, j'utilise 100 pour recentrer mon image après avoir étendue la résolution avec -vf expand, c'est le maximum, si chez vous ça rend mal, il suffit de modifier cette valeur
-vf expand=0:-120:-1:-1
(Video Filter) expand est un petit filtre vidéo sympa qui permet d'étendre la résolution de la vidéo (l'image n'est en rien modifiée) aux valeurs w,h fournies et de placer l'original non redimensionné aux coordonnées x,y
à la base on a : expand=w:h:x:y:o:a:r
o, a et r ne me sont pas utiles mais vous pouvez aller jeter un oeil au manuel si ça vous intrigue
w = width (largeur... ici ne sert pas vraiment on veut pas toucher à la largeur donc 0)
h = height (hauteur, que l'on veut étendre pour déplacer l'original et obtenir de belles bandes noires où placer les sous-titres, plus agréable que de les avoir sur l'image)
-120 me va plutôt bien, mais vous pouvez adapter
Les valeurs négatives pr w et h sont traitées comme offset de la taille originale, donc avec -120 vous devriez obtenir une bande de 60 pixels en haut et une de 60 pixels en bas
x = position sur l'axe horizontal (centrée par défaut, avec -1)
y = position sur l'axe vertical (centrée par défaut, avec -1)
-o (output) pour spécifier le nom de la vidéo encodée avec son extension
Une dernière petite chose, si vous voulez obtenir des infos (pour en avoir plus, utilisez le mode verbose avec "-v") sur votre vidéo, ce qui vous aidera sûrement pour le traitement, rien de plus simple, lancez mplayer en ligne de commande pour la lire et il vous donnera toutes les informations importantes sur celle-ci dans le terminal:
Voilà, vous obtiendrez (normalement ^^) un fichier avi lisible sur toutes les platines avec les sous-titres incrustés proprement dans la bande noire.
J'ai eu l'occasion de voir sur le net des personnes avoir chez eux de bons résultats avec des paramètres différents, donc n'hésitez pas à modifier la commande fournie en fonction des tests que vous ferez.
MEncoder est un encodeur puissant, on peut quasiment tout faire avec cette petite merveille, d'ailleurs pour simplifier ce genre d'opérations vous pouvez regrouper les options de la ligne de commande dans un fichier de configuration dans ~/.mplayer/mencoder.conf, ou dans un fichier qui ne soit spécifique qu'à une seul vidéo, par exemple "video.avi" en créant un fichier de config "video.avi.conf".
Vous pouvez aussi définir des profils dans les fichiers de config, par exemple pour les différents codecs, ou faire des profils en fonction du choix de qualité finale. Tout est très simple et clairement expliqué dans le manuel, pour ceux que ça intéresserait.
Je ne suis pas certaine que ce tutoriel intéressera beaucoup de monde, mais comme on m'avait déjà demandé de l'aide à ce sujet et que ma réponse s'apparentait à un tutoriel, j'en ai profité pour le faire.
Voilà, si je n'ai pas été claire sur un point ou si j'ai commis une erreur, n'hésitez pas à me le signaler ^^