RSS Libre@vous

Dernière mise à jour
le 14/01/2016 à 15h43
Les contenus de ce site sont publiés sous la licence CC by-sa, sauf mention contraire.
licence_CC-by-sa
Copyright © 2019 Libre @ vous. Tous droits réservés.
Joomla! est un logiciel libre sous licence GNU/GPL.
19
Aou
2009
Encoder un flux vidéo de la Freebox en DivX ou Xvid Imprimer
Dans un précédent billet, je vous ai proposé un script qui permet d'enregistrer directement les chaînes de la Freebox. Les flux bruts ainsi enregistrés sont des vidéos au format MPEG-TS, qui est le format de diffusion de toutes les box ADSL. Les vidéos sont de bonne qualité (sauf problème de coupure pendant la diffusion), mais le problème c'est que les fichiers produits sont assez volumineux et occupent une place importante sur votre disque (environ 1,3Go pour une heure d'enregistrement). Il est donc intéressant de réencoder ces fichiers dans un format compressé comme le DivX ou son équivalent libre Xvid si vous souhaitez conserver les enregistrements sur votre disque. Nous allons voir comment réaliser cette opération sous GNU/Linux en utilisant les logiciels libres ProjectX et Mencoder.

Conversion du MPEG-TS en MPEG-PS avec ProjectX


Le format MPEG-TS est un format de flux multiplexé utilisé pour la diffusion par les box et le satellite. Pour plus d'informations à ce propos, voir sur cette page Wikipédia. Quand on lit un fichier MPEG-TS avec un logiciel comme VLC Media Player, cela ne pose pas de problème. Par contre, quand on souhaite réencoder le fichier dans un autre format, un problème de décalage entre l'image et le son va se poser. Il n'est pas possible de gérer simplement ce décalage car celui-ci est variable dans le temps et augmente au fur et à mesure de la vidéo. Pour régler ce problème, il va falloir commencer par convertir la vidéo en MPEG-PS avec le logiciel ProjectX. Ce logiciel est disponible dans les dépôts officiels sous Ubuntu (paquet project-x).

Il existe un tutoriel complet en PDF qui explique cette opération. Le tutoriel présente également comment supprimer d'éventuelles pages de pubs du flux vidéo. Après avoir réalisé la première partie de ce tutoriel avec ProjectX, vous obtiendrez un fichier m2p qui est au format MPEG-PS. C'est ce fichier que nous allons maintenant encoder.

Encoder en Xvid avec Mencoder


Pour encoder le fichier, nous allons choisir le codec Xvid qui est un codec libre, contrairement au DivX. Mais la méthode reste la même pour le DivX, il suffira de modifier la dernière commande. La deuxième partie du tutoriel indiqué précédemment propose d'utiliser pour l'opération d'encodage le logiciel libre Avidemux qui est lui aussi disponible dans les dépots officiels Ubuntu. Mais plutôt que d'utiliser une interface graphique, nous allons voir comment réaliser cette opération directement en ligne de commande, en utilisant le logiciel Mencoder. Et puis c'est tellement plus sympa, la ligne de commande... Complice
Dans un prochain billet, je montrerai tout l'intérêt de la ligne de commande, grâce à la réalisation d'un script qui permettra d'encoder plusieurs vidéos en une seule fois.

Pour réaliser l'encodage, deux possibilités :
  • soit vous souhaitez réaliser un encodage rapide, sans chercher un maximum de qualité. Dans ce cas, un encodage en une seule passe sera suffisant ;
  • soit vous souhaitez la meilleure qualité possible pour une taille de fichier donnée et dans ce cas, il va falloir vous orienter vers une encodage en double passe (voire même plus pour les perfectionnistes).
Je présenterai dans la suite comment faire pour les deux cas.

Déterminer la fréquence d'encodage en fonction de la taille du fichier


Un des paramètres importants est de déterminer la fréquence d'échantillonnage, c'est à dire le nombre de bits par seconde pour la vidéo et l'audio. Il va sans dire que plus la fréquence est importante, à durée égale, plus le fichier obtenu aura une taille finale élevée. En ce qui concerne l'audio pour un film ou une série, le choix du format mp3 échantilonné à 128kb/s est généralement suffisante. Pour un concert, vous pouvez mettre une plus grande valeur pour améliorer la qualité sonore, par exemple 320kb/s.
Pour la vidéo, tout dépend de la résolution de l'image, mais 1000kb/s semble une bonne valeur. Quoi qu'il en soit, voici comment calculer la fréquence d'échantillonage de la vidéo en fonction de la taille du fichier que vous souhaitez obtenir :
Fréquence vidéo en kb/s = (taille_fichier_final_Mo - taille_fichier_son_Mo) * 1024 * 1024 * 8 / (durée en s * 1000)
La valeur 8 correspond simplement à une transformation des octets en bits.

Par exemple pour une vidéo d'une durée de 24 minutes, une taille de fichier pour obtenir une bonne qualité serait d'environ 200Mo, avec une fréquence d'encodage audio de 128kb/s. La taille de la piste audio fait :
taille audio en Mo = (128 * 24 * 60) / (8 * 1000) = 23Mo.
La fréquence d'encodage vidéo sera donc :
fréquence vidéo en kb/s = (200 - 23) * 1024 * 1024 * 8 / (24 * 60 * 1000) = 1031kb/s.

Supprimer les bandes noires


Pour éviter de perdre de la qualité en encodant les bandes noires inutiles dans la vidéo, nous allons les supprimer durant le processus d'encodage. Mencoder est lié à la commande Mplayer, qui lance un lecteur capable de lire les vidéos. Cette commande permet également de déterminer automatiquement l'option à utiliser avec Mencoder pour supprimer les bandes noires. Pour cela, exécuter sous la console shell la commande suivante :
mplayer -vf cropdetect fichier.m2p

La vidéo se lance dans une fenêtre et une liste de lignes commençant par [CROP] s'affiche dans la console. Dès que ces lignes se stabilisent et ne changent plus, fermez la fenêtre de la vidéo. Copier/coller la partie située entre parenthèse d'une des dernières lignes, par exemple :
-vf crop=704:560:10:10

Cette option devra être passée à mencoder pour réaliser l'encodage en coupant les bandes noires.
Vous pouvez tester la lecture sans les bandes noires avec la commande suivante :
mplayer -vf crop=704:560:10:10 fichier.m2p

En avant pour l'encodage simple passe


Attention ! Dans la ligne de commande qui suit et celles du paragraphe suivant, j'ai été obligé d'introduire des retours à la ligne à cause de la mise en page du texte sur le site. Si vous copier/coller les lignes, n'oubliez pas de supprimer les retours à la ligne (toutes les commandes sont sur une seule ligne).

Muni de toutes ces informations, nous allons pouvoir lancer l'encodage, en commençant par le cas de la simple passe.
Voici la ligne de commande à lancer :

mencoder -ffourcc XVID -oac mp3lame -lameopts cbr:br=128:aq=0 -vf crop=704:560:10:10 -ovc lavc -lavcopts 
vcodec=mpeg4:vmax_b_frames=1:vb_strategy=2:brd_scale=3:vbitrate=1031:autoaspect
"fichier.m2p" -o "fichier.avi"


Ici nous avons choisi le codec audio mp3lame (à installer sous Ubuntu avec le paquet libmp3lame0) et le codec vidéo lavc (à installer sous Ubuntu avec le paquet libavcodec-unstripped-51). Le codec audio est sélectionné grâce à l'option -oac et le codec vidéo grâce à -ovc. On retrouve ensuite les options passées à chaque codec (-lameopts et -lavcopts). Pour le codec audio, on indique un taux constant (cbr) avec une fréquence d'échantillonnage de 128kbp/s (br=128). On augmente la qualité audio avec l'option aq=0. Pour le codec vidéo, on choisit un codec mpeg4, avec une fréquence d'échantillonnage de 1031kbp/s (vbitrate=1031). On passe d'autres options qui permettent d'améliorer la qualité vidéo.
On a également intégré l'option de coupure des bandes noires déterminée précédemment. Malheureusement, le code généré par le codec lavc n'est pas reconnu par tous les décodeurs, on utilise donc la commande -fourcc pour marquer la vidéo avec le code XVID.

Pour les perfectionnistes : encodage en double passe


On va faire la même chose, mais cette fois avec deux passes pour améliorer la qualité de la vidéo finale. La première passe générera un fichier divx2pass.log qui sera ensuite utilisé pendant la deuxième passe. Le fichier avi généré pendant la première passe sera écrasé dès le début de la deuxième : on n'obtiendra bien qu'un seul fichier avi à la fin du processus.
1ère passe :
mencoder -oac copy -vf crop=704:560:10:10 -ovc lavc -lavcopts
vcodec=mpeg4:vmax_b_frames=1:vb_strategy=2:brd_scale=3:vbitrate=1031:autoaspect:vpass=1
"fichier.m2p" -o "fichier.avi"

Ici on n'encode pas la piste audio et on se contente de la copier (-oac copy). On est obligé d'encoder la vidéo pour générer le fichier log. On indique qu'il s'agit de la première passe avec vpass=1.
2ème passe :

mencoder -ffourcc XVID -oac mp3lame -lameopts cbr:br=128:aq=0 -vf crop=704:560:10:10 -ovc
lavc -lavcopts vcodec=mpeg4:vmax_b_frames=1:vb_strategy=0:brd_scale=3:vbitrate=1031:
precmp=2:cmp=2:subcmp=2:preme=2:last_pred=2:trell:mbd=2:v4mv:vbitrate=1031:me_range=0:autoaspect:vpass=2 
"fichier.m2p" -o "fichier.avi"


Ici on encode également l'audio et on a ajouté quelques options pour améliorer la vidéo qui sont utilisables en deuxième passe. Cette phase d'encodage sera beaucoup plus longue que la première.

Un des grands avantages d'utiliser la ligne de commande, c'est qu'au prochain encodage vous n'aurez pas besoin de recliquer sur 10 menus pour sélectionner à nouveau les mêmes options. Il suffit simplement de copier la ligne de commande, de changer la valeur du crop, la fréquence vidéo et le nom des fichiers, et le tour sera joué. Bons encodages !

Quelques liens utiles


 

Ajouter un Commentaire

Tout les contenus de ce site sont publiés selon les termes de la licence Creative Commons by sa. En ajoutant votre commentaire, vous acceptez implicitement sa mise à disposition selon les termes de cette licence.


Code de sécurité
Rafraîchir