Table des matières

MEncoder

Quelques lignes de commande pour faire du traitement video avec 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