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 © 2018 Libre @ vous. Tous droits réservés.
Joomla! est un logiciel libre sous licence GNU/GPL.
20
Aou
2009
Encoder plusieurs vidéos à la chaine avec Mencoder Imprimer
Pour faire suite à mon précédent billet sur l'encodage avec ProjectX et Mencoder, je vais vous présenter dans ce billet comment utiliser Mencoder dans un script shell afin de réaliser l'encodage à la chaine de plusieurs vidéos. Je prendrais l'exemple d'épisodes d'une série qui ont tous été enregistrés à la suite dans le même flux vidéo provenant d'une chaîne de la Freebox.

Découpage avec ProjectX


J'avais téléchargé plusieurs épisodes à la suite d'une même série sur une chaîne de la Freebox. Le résultat de mon enregistrement était un seul fichier MPEG-TS contenant tous les épisodes à la suite. Comme indiqué dans mon précédent billet, il faut avant tout encodage utiliser ProjectX pour transformer le flux MPEG-TS en MPEG-PS. On va également en profiter pour découper chacun des épisodes dans le flux. Pour cela, j'ai suivi la méthode décrite dans ce tutoriel pour supprimer les publicités. Il faudra faire autant de transformations en MPEG-PS qu'il y a d'épisodes.
Dans mon cas, j'ai obtenu 24 fichiers m2p dans mon répertoire. Les fichiers ont été nommés de la façon suivante :
Série - Episode 01.m2p
Série - Episode 01.m2p
etc...
Série - Episode 24.m2p


Cas des épisodes avec des bandes noires différentes


Dans mon cas, une difficulté supplémentaire est apparue : certains épisodes avaient un format différent des autres. Du coup, le découpage des bandes noires nécessitait une valeur différente pour chacun des fichiers. Comme expliqué dans mon précédent billet, j'ai déterminé la bonne valeur de découpage des bandes noires pour chaque fichier m2p avec la commande :
mplayer -vf cropdetect "Série - Episode 01.m2p"

J'ai copié chaque valeur du style 704:560:6:10 dans un fichier crop.txt en prenant bien soin de conserver le même ordre que celle des fichiers m2p dans le répertoire. Il va sans dire que dans un cas plus "normal" où tous les épisodes ont les mêmes bandes noires, vous n'aurez pas besoin d'exécuter cette commande pour chaque fichier. Il vous suffira de détecter les bandes noires d'un des fichiers et d'insérer la valeur directement dans la commande mencoder.
C'était la partie la plus pénible du travail, passons maintenant à la puissance de la ligne de commande avec Mencoder pour l'encodage.


Encodons à la chaîne avec Mencoder


Attention ! Dans le script qui suit, 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 qui se trouvent dans les deux commandes mencoder.

Voici le script multi-encoding-mencoder.sh à exécuter :
#!/bin/sh
for n in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
do
 crop=$(cat crop.txt | head -n $n | tail -n 1)
 mencoder -oac copy -vf crop=$crop -ovc lavc -lavcopts
 vcodec=mpeg4:vmax_b_frames=1:vb_strategy=2:brd_scale=3:vbitrate=1000:autoaspect:vpass=1
 "Série - Episode $n.m2p" -o "Série - Episode $n.avi"
 mencoder -ffourcc XVID -oac mp3lame -lameopts cbr:br=128:aq=0 -vf crop=$crop -ovc lavc -lavcopts 
 vcodec=mpeg4:vmax_b_frames=1:vb_strategy=0:brd_scale=3:vbitrate=1000:precmp=2:cmp=2:subcmp=2:
 preme=2:last_pred=2:trell:mbd=2:v4mv:vbitrate=1000:me_range=0:autoaspect:vpass=2 
 "Série - Episode $n.m2p" -o "Série - Episode $n.avi"
done

Ici on effectue un encodage double-passe pour une meilleure qualité (voir mon précédent billet pour plus d'informations). La nouveauté c'est qu'on réalise un boucle sur l'ensemble des fichiers m2p, en stockant le numéro de l'épisode dans la variable $n. Cette variable va être utilisée pour déterminer le nom des épisodes en entrée et en sortie, mais également pour sélectionner dans la variable $crop la bonne valeur de découpage issue du fichier crop.txt. La commande head sélectionne les $n premières lignes du fichier et la commande tail sélectionne la dernière ligne restante, c'est à dire la $n-ième du fichier, celle qui correspond à l'encodage en cours.
Si vous avez les mêmes bandes noires pour tous les fichiers, vous pouvez vous passer du fichier crop.txt et indiquer la valeur directement dans le crop= des commandes mencoder.

Il ne vous reste plus qu'à rendre le script exécutable et à le lancer avant de partir dormir. Demain matin tous vos fichiers seront encodés ! Toute la puissance de la ligne de commande enfin révélée ! Complice
 

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