====== MEncoder ======
Quelques lignes de commande pour faire du traitement video avec [[http://www.mplayerhq.hu/DOCS/HTML/en/encoding-guide.html|MEncoder]], encodeur très puissant de MPlayer.
===== Rotation =====
Quand un **** fait un film en tenant son iPad à l'envers, on se retrouve avec un fichier .mov et un torticolis.
mencoder -ovc lavc -vf rotate=1 -oac pcm movie.mov -o movie-90.mov
mencoder -ovc lavc -vf rotate=1 -oac pcm movie-90.mov -o movie-180.mov
Oui je sais c'est con, on sait pas faire 180° d'un coup.
0 Rotate by 90 degrees clockwise and flip (default).
1 Rotate by 90 degrees clockwise.
2 Rotate by 90 degrees counterclockwise.
3 Rotate by 90 degrees counterclockwise and flip
Le problème est que l'on obtient des pertes de qualité sur le fichier non négligeable. L'option ''-ovc copy'' (copie du flux vidéo sans décompresser) ne fonctionne pas avec des filtres.
===== Ripp DVD =====
Un vieux script utilisé pour récupérer toutes les épisodes d'un DVD d'une série, les récupérer en .vob (sans perte) et puis les convertir en .mkv avec les pistes de sous-titre. Une petite copie privée en soit.
==== Récupérer les pistes ====
On détecte toutes les pistes présentes sur le DVD. On peut les jouer pour être sûr de récupérer la bonne.
dvdxchap -t 4 /dev/hda > chapters.txt
mplayer -dvd-device /dev/hda dvd://1
mplayer -dvd-device /dev/hda dvd://2
...
==== Récupérer le .vob ====
Pour récupérer la première piste dans un fichier (attention assez volumineux).
mplayer -dvd-device /dev/hda -dumpstream dvd://1 -dumpfile myfile1.vob
A répéter pour chaque piste voulue (sans doute moyen d'automatiser ça).
==== Conversion ====
Le script ci dessous est à lancer dans le dossier contenant tous les fichiers .vob.
Pour chaque fichier, on récupère la piste audio fr et en qui sera encodée en vorbis, les sous-titres, la piste vidéo qui sera encodée en deux passes en x264 (je sais, j'aurais du utiliser Theora ou VP8). Le tout est ensuite mit dans un fichier .mkv.
#!/bin/bash
#script pour convertir tout les fichiers vob en mkv
#apres avoir extrait les 2 bandes son et sous-titre
for NAME in *.vob;
do
# vob -> en.wav -> en.ogg
if [ -e ${NAME%.vob}en.wav ]
then
if [ -e ${NAME%.vob}en.ogg ]
then
echo "----${NAME%.vob}en wav and ogg already present"
else
echo "----${NAME%.vob}en wav only already present"
oggenc -q 8 ${NAME%.vob}en.wav
echo "-----file ${NAME%.vob}en.ogg created"
notify-send "file ${NAME%.vob}en.ogg created"
fi
else
mplayer $NAME -aid 129 -ao pcm:file=${NAME%.vob}en.wav -vc null -vo null
echo "-----fichier ${NAME%.vob}en.wav créé"
oggenc -q 8 ${NAME%.vob}en.wav
echo "-----fichier ${NAME%.vob}en.ogg créé"
notify-send "fichier ${NAME%.vob}en.ogg créé"
fi
# vob -> fr.wav -> fr.ogg
if [ -e ${NAME%.vob}fr.wav ]
then
if [ -e ${NAME%.vob}fr.ogg ]
then
echo "----${NAME%.vob}fr wav and ogg already present"
else
echo "----${NAME%.vob}fr wav only already present"
oggenc -q 8 ${NAME%.vob}fr.wav
echo "-----file ${NAME%.vob}fr.ogg created"
notify-send "file ${NAME%.vob}fr.ogg created"
fi
else
mplayer $NAME -aid 128 -ao pcm:file=${NAME%.vob}fr.wav -vc null -vo null
echo "-----fichier ${NAME%.vob}fr.wav créé"
notify-send "fichier ${NAME%.vob}fr.wav créé"
oggenc -q 8 ${NAME%.vob}fr.wav
echo "-----fichier ${NAME%.vob}fr.ogg créé"
notify-send "fichier ${NAME%.vob}fr.ogg créé"
fi
# vob -> sub
if [ -e ${NAME%.vob}.sub ]
then
echo "----fichier ${NAME%.vob}.sub existe deja"
else
mencoder $NAME -vobsubout ${NAME%.vob} -vobsuboutindex 0 -sid 1 -o /dev/null -nosound -ovc frameno
echo "-----fichier ${NAME%.vob}.sub créé"
notify-send "fichier ${NAME%.vob}.sub créé"
fi
# vob -> avi
if [ -e ${NAME%.vob}.avi ]
then
echo "----fichier ${NAME%.vob}.avi existe deja"
else
if [ -e divx2pass.log ]
then
echo "----pass 1 de ${NAME%.vob}.avi deja realisee"
else
echo "----début pass 1 de ${NAME%.vob}.avi"
mencoder $NAME -o /dev/null -ovc x264 -x264encopts subq=1:frameref=1:pass=1:threads=auto -nosound -vf crop=720:576:0:0
echo "------pass 1 de ${NAME%.vob}.avi réalisée"
notify-send "pass 1 de ${NAME%.vob}.avi réalisée"
fi
echo "----début pass 2 de ${NAME%.vob}.avi"
mencoder $NAME -o ${NAME%.vob}.avi -ovc x264 -x264encopts subq=6:frameref=5:pass=2:threads=auto:bitrate=1000 -nosound -vf crop=720:576:0:0
echo "------pass 2 de ${NAME%.vob}.avi réalisée"
notify-send "pass 2 de ${NAME%.vob}.avi réalisée"
fi
# all -> mkv
if [ -e ${NAME%.vob}final.mkv ]
then
echo "----fichier ${NAME%.vob}.mkv existe deja"
else
echo "----début encodage ${NAME%.vob}.mkv"
mkvmerge -o "${NAME%.vob}final.mkv" "${NAME%.vob}.avi" --language 0:eng "${NAME%.vob}en.ogg" --language 0:fre "${NAME%.vob}fr.ogg" --language 0:fre "${NAME%.vob}.idx" --title "${NAME%.vob}"
fi
echo "--------${NAME%.vob} fini !!!!"
notify-send "${NAME%.vob} fini !!!!"
done
===== Liens =====
* http://www.mplayerhq.hu/DOCS/HTML-single/en/MPlayer.html#mencoder
* http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html
* http://doc.ubuntu-fr.org/encodage_dvd_mkv
* http://doc.ubuntu-fr.org/mencoder
* http://forum.hardware.fr/hfr/VideoSon/Traitement-Video/topic-unique-mencoder-sujet_87558_1.htm
* http://forum.ripp-it.com/index.php?showtopic=17950&pid=263481&st=0entry263481
* http://www.brad-x.com/2007/05/19/yet-another-linuxnix-video-h264-howto