Aujourd’hui, la question à laquelle je tente de répondre est la suivante : Comment transformer des divx en un DVD?
En effet, lorsque l’on a plusieurs divx, comme cela peut arriver dans le cas d’épisodes de séries, on peut vouloir, pour des raisons diverses et variées, les rassembler sur un seul DVD.

Il est à noter que le script que je présente ici peut également servir à convertir un seul divx en DVD.

Ce script utilise un certain nombre de programmes, pour lesquels je vous renvoie à la littérature afin d’approfondir leur usage :

  • transcode : véritable couteau suisse de la convertion audio/vidéo
  • mplayer : que je n’utilise ici que pour détecter le son 5.1, mais qui est un excellent media player
  • dvdauthor : qui permet de créer le DVD à partir de fichiers mpeg. Il possède une interface graphique (dvdstyler) qui permet de créer des DVD plus évolués, avec des menus…

Je me suis également inspiré d’un article sur developpez.com afin d’écrire le script.

Mais passons tout de suite dans le vif du sujet. Le script est téléchargeable ici.

et en voici le code :

#!/bin/bash
# ATTENTION, les films a encoder doivent avoir l'extension .avi
# Variable du chemin de sortie (peut être modifiée)
export OUTPATH=/var/tmp
# Detection des binaires nécessaires
for i in mplex jpeg2yuv spumux dvdauthor transcode mplayer tcextract; do
    OUT=`which $i`
    if [ ${#OUT} = 0 ]; then
        echo "Vous n'avez pas $i"
        manque="y"
    fi
done
# Sortie en cas d'échec
if [ "$manque" = "y" ] ; then
    exit
fi
#### Fonctions ####
# encode le divx en mpeg puis reassemble le son et l'image
# detecte le son 5.1
encodeVid () {
transcode -i $1.avi -y ffmpeg --export_prof dvd-pal --export_asr 3 -o $OUTPATH/$1 -D0 -s2 -m $OUTPATH/$1.ac3 -J modfps=clonetype=3 --export_fps 25
SON=`mplayer -vo dummy -identify MonDivX.avi 2> /dev/null | grep "5.1 ("`
if [ ${#SON} = 0 ]; then
    echo "Pas de son 5.1"
else
    echo "Son 5.1 detecté"
    tcextract -d2 -i $1.avi -a0 -x ac3 | tcextract -d2 -x ac3 -t raw > $OUTPATH/$1.ac3
fi
mplex -f 8 -o $OUTPATH/$1.mpg $OUTPATH/$1.m2v $OUTPATH/$1.ac3
}
# Creation du dvd
CreeDVD () {
cd $OUTPATH && mkdir mon_dvd && dvdauthor -o mon_dvd -x dvdmenu.xml
}
###################
# creation de l'entête du fichier de description du DVD
echo "<dvdauthor>" > $OUTPATH/dvdmenu.xml
echo "    <vmgm />" >> $OUTPATH/dvdmenu.xml
echo "    <titleset>" >> $OUTPATH/dvdmenu.xml
echo "        <titles>" >> $OUTPATH/dvdmenu.xml
echo "            <pgc>" >> $OUTPATH/dvdmenu.xml
# Traitement des fichiers en entrée
for file in "$@"
  do
    titre=${file%.avi}
    echo "            <vob file=\"$titre.mpg\" />" >> $OUTPATH/dvdmenu.xml
    echo "Encodage du fichier : $file"
    encodeVid $titre
  done
# création du pied de page du fichier de description du DVD
echo "            </pgc>" >> $OUTPATH/dvdmenu.xml
echo "        </titles>" >> $OUTPATH/dvdmenu.xml
echo "    </titleset>" >> $OUTPATH/dvdmenu.xml
echo "</dvdauthor>" >> $OUTPATH/dvdmenu.xml
CreeDVD
echo "Le DVD est disponible dans : $OUTPATH/mon_dvd."
echo "GPL - © http://www.matao.fr"
echo "Vous pouvez maintenant graver le DVD avec une commande telle que :"
echo "  growisofs -Z /dev/dvd -dvd-video $OUTPATH/mon_dvd/"

Vous pouvez changer la variable OUTPATH si le répertoire ne vous convient pas.
Sinon, le script est assez clair de lui-même, il n’est pas très évolué, mais permet d’automatiser la création de DVD à partir de plusieurs divx. Pour obtenir des choses plus travaillées au niveau des menus, il faudra le faire manuellement avec un outil comme dvdstyler.

Pour utiliser le script, il vous suffit de le copier dans un chemin exécutable, comme /usr/local/bin, puis de le rendre exécutable (chmod 755 /usr/local/bin/divx2dvd) puis il suffit de se mettre dans le repertoire où se trouvent les divx à convertir et de taper :

$ divx2dvd mondivx1.avi mondivx2.avi mondivx3.avi