Quelques lignes de commande pour faire du traitement video avec MEncoder, encodeur très puissant de MPlayer.
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.
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.
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 ...
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).
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