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
…
8 commentaires to 'divx2dvd : comment convertir des divx en un DVD'
16 avril 2008
J’aime bien ton script. Mais pense tu qu’ils fonctionne pour la création d’un divx HD en dvd, j’entends par la si un divX fait 4,5 Go, le recopiera t il sur un DVD ?
16 avril 2008
Merci,
En fait, le script ne vérifie pas la taille du DVD qu’il crée, donc si tu lui donne des fichiers qui sont trop gros pour rentrer sur un DVD, tu n’arrivera pas à les graver, mais par contre, ils seront générés.
16 avril 2008
D’accord, mais je dis ca car les fichiers de plus de 2Go doivent être gravé en système de fichier UDF, alors que pour le reste on utlisera plus la norme ISO…
Menfin cool comme petit script
21 avril 2008
Super script, ça fonctionne super bien.
J’ai juste retouché à la fonction creerDVD() pour qu’il n’y ai pas d’erreur si on ne fait pas le ménage avant de lancer une autre conversion. Si ça intéresse des personnes, la voici :
CreeDVD () {
cd $OUTPATH
if [ -d mon_dvd ] ; then
rm -R mon_dvd
fi
mkdir mon_dvd && dvdauthor -o mon_dvd -x dvdmenu.xml
rm *.mpg *.ac3 dvdmenu.xml *.m2v
}
En tout cas merci, c’est exactement ce dont j’avais besoin.
3 juillet 2008
Bonjour,
Je viens de découvrir ce petit script : je me suis dit cool ça fait tout tout seul ! Sans que j’ai besoin de trouver comment ça marche !
Donc merci mais j’ai un soucis :
Le script termine avec des erreurs au niveau du fichier dvdmenu.xml (dvdmenu.xml:6: parser error : AttValue: ” or ‘ expected
<vob file=S04E01.mpg />
^
dvdmenu.xml:6: parser error : attributes construct error
<vob file=S04E01.mpg />
^
dvdmenu.xml:6: parser error : Couldn’t find end of Start Tag vob
<vob file=S04E01.mpg />
^
ERR: Error in parsing XML
Le DVD est disponible dans : /var/tmp/mon_dvd.
)
et j’ai rien dans le répertoire mon_dvd. Les fichiers sont tous dans /var/temp…
Du coup c’est gravable quand même ?
SUis un peu paumée car j’avoue de rien connaitre à tout ça…
Merci de votre aide !
3 juillet 2008
bon ben en mettant à contribution qqn qui s’y connait en script tout est réglé…
Un petit problème de guillemets qui sont mal protégés dans le script et du coup tout est ok.
Modifié ça donne ça :
# 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
3 juillet 2008
Bonjour,
effectivement, j’étais en train de regarder ça… c’est bizarre car chez moi, le script fonctionne correctement sans se planter…
enfin bon, je corrige quand même. Pour info, avant de graver le DVD, il vaut mieux aller dans le répertoire mon_dvd/VIDEO_TS et ouvrir le fichier vob pour vérifier que tout s’est bien passé.
3 juillet 2008
En fait, je viens de vérifier, et le script téléchargeable a les guillemets protégés (c’est pour ça que ça marche chez moi)
Tu n’aurais pas fait un copier-coller du code présenté dans l’article par hasard? lui n’était pas correct… je rectifie tout de suite.