Création d’un DVD vidéo sous Linux avc DVDAuthor

This is an old tutorial, in French, I wrote a bunch of years ago, back in 2006, when I was paid to create some advanced DVDs with advanced menu navigation.

This HTML version is an extract of the original PDF version (generated by Latex) available here.

=> I strongly encourage you to download the PDF version as the general layout is certainly better than in this [Latex -> html -> markdown] converted version.

Introduction

Faisant partie depuis longtemps d’une association ayant pour but la création de courts métrages, j’ai été confronté au problème de création de DVDs vidéo DVD pouvant être lus par n’importe quel lecteur de salon ou proffessionnel pour être diffusé dans les salles des festivals.. La question se pause alors : Utiliser un logiciel commercial tout en un onéreu pour gagner du temps ou bien plonger dans les profondeurs techniques pour gagner en connaissances ?

J’ai tout d’abord exploré la première voie en testant 3 usines à gaz; sous windows bien sûr non pas que j’aprécie particulièrement la stabilité de ce système, mais j’ai un PC et il n’existe pas de logiciel convainquant sous Linux pour l’instant.. Après une bonne semaine de galère, je me suis rendu compte une fois de plus que ce genre de programmes n’est vraiment pas fait pour moi. Le temps de comprendre la logique tordue des interfaces graphiques est énorme et doit être au moins égale au temps de comprendre les quelques points techniques qu’elles masquent. Le nombre de plantages inexpliquables est élevé et la précision de cotrôle faible. Je veux dire par là qu’il est - à ce que j’ai pu voir - impossible de contrôler précisément les différents aspets techniques du DVD (comme l’entrelaçement des images par exemple) qui sont pourtant si décisifs sur le produit final. Il en va de même pour l’aspet graphique : il m’est apparu impossible de contrôler la couleur des éléments du menu lors de leur sélection. Les logiciels proposent des effets grossiers comme le classique couleur inversée mais il est impossible de modeler précisément à son envie.

Bref, compte tenu de tous les points cités si-dessus, de l’envie d’utiliser pour cette tâche assez longue un système d’exploitation stable et du manque de budget de l’association nous empêchant d’investir dans un programme proffessionel, je me suis donc tourné vers le logiciel libre sous Linux.

Après beaucoup de documentation, soit trop technique, soit très très floue et parfois fausse, j’avais une vague idée de la marche à suivre mais je n’ai trouvé aucun document exposant de manière claire les différents points clé à comprendre pour maîtriser les étapes de création du DVD. C’est ce qui m’a poussé, pour moi et pour les autres, à rédiger ce document.

Bien sûr, point important, je suis ouvert à toutes sugestions, tout commentaires pour améliorer ce document.

L’apprentissage par l’exemple

Les programmes utilisés pour la création sont :

  • Avidemux (2.0) [2023 update: Handbrake] pour la compression des vidéos au format DVD en utilisant un codec libre (on pourra préférer transcode en ligne de commande) - Update
  • The Gimp pour la conception graphique des menus
  • Dvdauthor 0.6.10 pour l’assemblage final
  • Spumux 0.6.10
  • ‘Q’ DVD-Author 0.0.8a (optionel) que j’utilise seulement pour délimiter les éléments du menu (voir plus loin)
  • K3b 0.11.20 pour graver l’image
  • Xine v0.99.3 [2023 update: VLC] pour tester le DVD depuis le disque dur (sans le graver)

2.1 Préparation des vidéos

2.1.1 Introduction

Afain d’être lisibles correctement par un lecteur DVD, les fichiers vidéo doivent répondre à quelques règles. C’est le rôle d’Avidemux que de convertir les vidéos d’origine en respectant ces règles :

Format

Le flux vidéo doit être encodé dans un format compatible DVD, c’est à dire en MPEG avec certaines contraintes que je n’ai pas en tête, mais on les trouve assez facilement sur internet. Avidemux se charge de cette partie du travail.

Bitrate

Bitrate signifie en Anglais : nombre de bit par unité de temps. Le bus de données des lecteurs DVD n’ateignant pas de grandes vitesses de transmission des données, li existe une limite au débit d’information à ne pas dépasser sous peine de perte de fluidité. Cette limite est aproximativement de 9 Mo/s (à vérifier avec précision sur internet).

Entrelacement

Les DVD vidéos étant destinés dans mon cas à être regardés sur une télévision ou projetés par un vidéoprojecteur, l’image de la vidéo doit être entrelacée. Ceci n’est pas une obligation absolue mais l’image parait beaucoup plus fluide entrelacée. Là attention : il y a deux façons d’entrelacer une vidéo :

  • lignes paires en premier
  • lignes impaires en premier

Ceci se dit en Anglais odd first et even fisrt (je ne sais plus qui est qui).

Voir en sub:Entrelacement pour plus de détails.

2.1.2 Avidemux

2.1.2.1 Configuration générale

Avidemux est un logiciel libre sous Linux (je ne sais pas s’il est porté sous d’autres plateformes) permettant de convertir des vidéos dans plusieurs formats différents. Voici la marche à suivre :

  • Charger la vidéo source
  • Configurer le logiciel comme suit :

  1. Format de compression vidéo : DVD
  2. Configuration de ce format de compression (voir plus loin)
  3. Activer V Process (signifie que l’on veut que la vidéo soit incluse dans le fichier final)
  4. Format de compression audio : FFm AC3 Le codec AC3 est de très bonne qualité. Voir wikipédia pour plus de détails
  5. Configuration de ce format de compression
  6. De même que V Process, A Process doit être activé pour avoir du son dans le fichier créé
  7. Format de fichier (conteneur) à créer : Mpeg A+V (J’ignore totalement la différence entre PS et TS mais les deux fonctionnent pour notre cas)

2.1.2.2 Configuration de la vidéo

Ici est le point où la documentation sur internet se fait rare et floue. Je vais essayer d’éclaircir certains points qui me paraissaient obscurs avant de faire mes propres expériences.

Figure: Configuration du compresseur vidéo

Encoding type

Bien sûr, choisir Two pass. On trouve abondemment de la documentation sur ce point et sur les techniques d’encodages sur internet.

Size

Taille désirée de la vidéo

Interlacing

Voici un point particulièrement sensible.

Progressive

Pas d’entrelacement. Adapté pour visionner le DVD sur un PC car les écrans de PC n’utilisent pas la technique d’entrelaçement des images.

Interlaced TFF et BFF

Ces deux options règlent la parité de l’entrelacement : Paire ou impaire. Je ne sais pas qui est qui mais il est clair que pour un système PAL, il faut choisir BFF sous peine d’avoir une image presque irregardable. Voir plus loin pour plus de détails.

Aspect ratio

Rapport d’aspect de l’image. C’est le rapport $\frac{largueur}{hauteur}$. A savoir au passage qu’une image DV à un rapport de $\frac{720}{576}=\frac{5}{4}$et non $\frac{4}{3}$comme on pourrai le penser.

Voir Configuration avancée de l’image pour plus de détails.

Matrix

Aucune idée de l’influence de ce paramètre. J’ai essayé toutes les matrices proposées sur une séquence entrelacée avec mouvement et n’ai constaté aucune différence notable.

Gop size

Aucune idée non plus.

Max bitrate

Flux maximum pour la vidéo. Je met toujours 7000 pour

  • réserver un peu de flux pour la lecture de l’audio
  • ne pas que audio + vidéo n’ateignent 9000, la limite supérieure théorique. En effet, en cas d’erreur de lecture de la part du laser du lecteur de DVD (fréquent dans le cas de DVD gravés maison ), il vaut mieux avoir un peu de marge de flux.

2.1.2.3 Configuration de l’audio

Figure: Configuration du compresseur vidéo

Image schema_general2

Contrairement à l’image, le son ne pose pas de problèmes particuliers. La seule option qui peut vous être utile est la normalisation su son (chercher sur internet pour de plus amples informations). Celà sert en gros à régler automatiquement le volume du son de manière à ce qu’il ne soit ni trop bas ni trop haut.

2.1.2.4 Configuration avancée de l’image

Un nouveau problème survient dans le cas où l’image n’est pas en format $\frac{4}{3}$ ni en $\frac{16}{9}$. En effet; il faudra alors rajouer une bande noire autour de l’image pour arriver à une de ces proportions sous peine d’avoir une image déformée ou tronquée Le format doit être précisé dans le fichier de confoguration de DVDAuthor :

<video \[format="ntsc|pal"\] \[aspect="4:3|16:9"\]>

. Bref, voici la marche à suivre pour arriver à un format $\frac{4}{3}$. Cette méthode est à adapter pour un format $\frac{16}{9}$. Apparemment, cette étape a voulue être automatisée par les concepteurs représenté par le boutton DVD Res mais le résultat est souvent douteux.

Cliquer sur V Filter. Ce menu nous permet de choisir différents filtres à appliquer à l’image. Le seul nous intéréssant ici est add border qui permet d’ajouter une bande noire autour de la vidéo.

Prenons l’exemple d’une vidéo en 576 x 300. Le format est barbare (ni $\frac{4}{3}$ ni $\frac{16}{9}$) mais est proche du $\frac{4}{3}$. Pour passer en $\frac{4}{3}$, il faut donc rajouter $x$ pixels en hauteur. Petite equation simpliste :

\begin{eqnarray*}
\frac{576}{300+x}=\frac{4}{3} & 300+x=\frac{3*576}{4} & x=132\end{eqnarray*}

Il faut donc rajouter 132 pixels en hauteur, c’est à dire $\frac{132}{2}=66$ pixels en bas et 66 en haut pour arriver à une image de 576 x 432, bien en $\frac{4}{3}$ ( $\frac{576}{432}=\frac{4}{3}$).

Figure: Menu des filtres vidéo

Image schema_general3

2.1.2.5 Encodage

Une fois ce mauvais moment passé, le fichier est prêt à être écrit sur le disque. Pour celà, cliquer sur le boutton enregistrer. L’encodage est souvent très long, compter 8 heures pour un film de durée normale avec un processeur de 2GHz.

2.2 Création du menu

2.2.1 Dessiner les composants du menu

Pendant l’encodage des vidéos, nous avons tout le temps de créer les éléments graphiques du menu. Ceci se fait bien sûr avec l’incontournable Gimp. Le but est de créer deux fichiers images contenant :

  • l’image de fond du menu
  • les éléments du menu dans leur état sélectionné

Figure: Les deux fichiers définissant graphiquement un menu

Image petit_exemple_menu Image petit_exemple_menu_h

Le premier fichier contient la partie fixe du graphique. Le deuxième est un fichier principalement transparent contenant les pixels à afficher par dessus le premier lors de sélection d’éléments. En fait, on peut donner un troisième fichier à spumux basé sur le même principe que le deuxième contenant l’image à afficher durant le court instant de chargement du film, lorsqu’on clique. Personnellement, je n’utilise pas cette troisième image.

Figure: Affichage lors de la sélection du premier élément du menu

Image petit_exemple_sel1

Bien entendu, les fichiers doivent avoir une taille standard : $\frac{4}{3}$ ou $\frac{16}{9}$ pour être affiché dans leur intégralité et dans des proportions correctes, ce qui n’est pas le cas dans cet exemple.

2.2.1.1 Marche à suivre

Voyons rapidement la marche à suivre pour créer ce menu exemple. Je passerai volontairement rapidement sur les notions de base de gimp que je considère comme acquises. Voir les nombreux tutoriels très bien faits sur le net à ce sujet.

Le point délicat ici est que la norme DVD précise que la deuxième image doit être en couleur indéxées au nombre de 4 couleurs maximum. C’est assez génant pour faire des dégradés de trenparence par exemple. Le format du deuxième fichier doit être donc PNG pour pouvoir enregistrer un canal alpha (la transparence) et en 4 couleurs (dont la couleur de fond).

  1. Créer une image avec plusieurs calques contenant:

    Figure: Affichage lors de la sélection du premier élément du menu

    Image gimp1

    • Le fond
    • Les éléments sélectionés
  2. Enregistrer le fond sous background.jpg dans le répertoire de création du DVD
  3. Afain de générer le deuxième fichier, faire une copie du fond dans un nouveau fichier (Edition  $\triangleright$ Copy visible puis Edition  $\triangleright$ Coller en tant que nouveau)
  4. Passer en mode couleurs indexées 3 couleurs (Image  $\triangleright$ Mode  $\triangleright$ Couleurs indexées)

    Bien préciser de ne pas effectuer de tramage de couleur.

    Figure: Passage en mode couleurs indexées

    Image gimp2

  5. Enregistrer le résultat sous menu_h.png

2.2.2 Délimiter les composants du menu

Une fois les éléments dessinés, il faut les délimiter, c’est à dire donner les coordonnées des rectangles les délimitant.

Le fichier de configuration menu.xml contient cette information sans laquelle on ne pourrai pas découper la deuxième image pour la superposer à la première seulement sur l’élément sélectionné dans le menu. Ces lignes ressemblent à:

<button x0="450" y0="147" x1="601" y1="311" name="1" />
<button x0="460" y0="347" x1="592" y1="495" name="2" />

dans le cas de deux bouttons nommés 1 et 2.

Pour générer rapidement ces lignes, j’utilise ‘Q’ DVD-Author :

  1. Dans un projet vide, cliquer sur add background puis indiquer le fond du menu (~/dvd/background.jpg dans notre exemple). J’ai choisi d’ajouter des bandes noires en haut et en bas car mon exemple n’est pas en $\frac{4}{3}$.
  2. Ajouter deux frames (clique boutton droit  $\triangleright$ Add Frame) délimitant les zones du menu. Elles apparaissent en jaune (voir Fig x1-1500510).

    Figure: Délimitation des composants avec QDVDAuthor

    Image dvdauthor1

  3. Pour chaqune d’entre elles, en faire un boutton : clique boutton droit  $\triangleright$ define as button.
  4. Il ne reste plus qu’à effectuer un copier-coller du texte XML disponible dans l’onglet XML out en sélectionnant Main Menu VMGM vers le fichier menu.xml.

Figure: XML généré par QDVDAuthor

Image dvdauthor2

2.3 Finalisation du DVD

Notons que le DVD créé ici est assez basique. Le menu est statique, c’est une image, il est unique et n’a pas d’ambiance sonore. Il est bien sûr possible de complexifier la chose. Se référer à la documentation de dvdauthor.

Il ne faut pas oublier de modifier le fichier dvdauthor.xml pour indiquer la taille de l’image.

2.3.1 Présentation des fichiers de configurations et des scripts

Supposons que nous avons les fichiers suivants générés plus haut dans le répertoire ~/dvd/ :

  • film.mpeg
  • betisier.mpeg
  • background.jpg
  • menu_h.png

Voici les fichiers à rajouter dans ce répertoire pour pouvoir finaliser le DVD :

dvdauthor.xml

Fichier de configuration de dvdauthor. Confère la documentation de dvdauthor très complète.

menu.xml

Fichier de configuration de spumux utilisé principalement pour définir les zones du menu (quelle zone de l’image correspond à quel film).

make

Script basique générant l’image disque du DVD, c’est à dire les deux sous répertoires VIDEO_TS et AUDIO_TS. Ce scripte pourrait être grandement amélioré, en particulier pour s’arrêter en cas d’erreur.

play

Script appelant xine dans le répertoire courant pour tester le DVD.

2.3.2 Contenu des fichiers

2.3.2.1 menu.xml

Il est possible dans de nombreux pour spumux de déterminer automatiquement les zones correspondant à des bouttons avec l’attribut autooutline. Voir la documentation de spumux.

<subpictures>
 <stream>
  <spu force="yes" end="00:00:00.0" start="00:00:00.0" highlight="./menu\_h.png" >
   <button y0="104" y1="455" x0="16" name="1" x1="330" />
   <button y0="104" y1="457" x0="388" name="2" x1="710" />
  </spu>
 </stream>
</subpictures>

2.3.2.2 dvdauthor.xml

<dvdauthor dest="./" jumppad="yes" >
 <vmgm>
  <menus>
   <video format="pal" resolution="720x576" />
   <pgc entry="title">
    <vob file="./tmp/Main\_Menu\_VMGM\_menu.mpg" pause="inf" />
    <button name="1" >jump title 1 chapter 1; </button>
    <button name="2" >jump title 2 chapter 1; </button>
    <post> jump vmgm menu 1; </post>
   </pgc>
  </menus>
 </vmgm>
 <titleset>
  <menus>
   <pgc>
    <post> jump vmgm menu 1; </post>
   </pgc>
  </menus>
  <titles>
   <pgc>
    <vob file="film.mpeg" />
    <post> call vmgm menu 1; </post>
   </pgc>
   <pgc>
    <vob file="betisier.mpeg" />
    <post> call vmgm menu 1; </post>
   </pgc>
  </titles>
 </titleset>
</dvdauthor>

2.3.2.3 make

#!/bin/sh

# Si le répertoire temporaire n'existe pas, le créer

if ! \[ -e './tmp/Main\_Menu\_VMGM/' \]; then 

 mkdir -p ./tmp/Main\_Menu\_VMGM/

fi

# Supprimer la dernière version du DVD créée 

rm -rf {AUDIO\_TS/,VIDEO\_TS/}

# Créer un fichier vidéo d'une seconde contenant le menu

echo '--  --  - -   \* \*   \* \*     E T A P E   1   \* \*   \* \*   - -   --  -- '

/usr/bin/jpeg2yuv -n 1 -I p -f 25 -j ./background.jpg | /usr/bin/mpeg2enc -n p -f 8 -o ./tmp/Main\_Menu\_VMGM/menu.m2v

# Créer un fichier audio MP2 vide pour multiplexer avec le menu

echo '--  --  - -   \* \*   \* \*     E T A P E   2   \* \*   \* \*   - -   --  -- '

/bin/dd if=/dev/zero bs=4 count=1920 |/usr/bin/toolame -b128 -s 48 /dev/stdin "./tmp/Main\_Menu\_VMGM/menu.mp2"

# Multiplexage de l'image et du son du menu pour donner le fichier MPEG2 lu durant le menu

echo '--  --  - -   \* \*   \* \*     E T A P E   3   \* \*   \* \*   - -   --  -- '

/usr/bin/mplex -f 8 -o "./tmp/Main\_Menu\_VMGM/menu.mpg" "./tmp/Main\_Menu\_VMGM/menu.m2v" "./tmp/Main\_Menu\_VMGM/menu.mp2"

# Création du menu

echo '--  --  - -   \* \*   \* \*     E T A P E   4   \* \*   \* \*   - -   --  -- '

/usr/bin/spumux "./menu.xml" < "./tmp/Main\_Menu\_VMGM/menu.mpg" > "./tmp/Main\_Menu\_VMGM\_menu.mpg"

# Création du DVD

echo '--  --  - -   \* \*   \* \*     E T A P E   5   \* \*   \* \*   - -   --  -- '

/usr/bin/dvdauthor -x "dvdauthor.xml"

2.3.2.4 play

xine dvd:\`pwd\`

Bien sûr, ces scripts et fichiers de configuration sont à comprendre et à adapter aux cas particuliers.

3 Annexes

3.1 Entrelacement

Au risque d’insister lourdement, l’entrelacement est un point qui demande une attention particulière.

Un problème d’entrelacement n’est décelable seulement sur un écran de télévision et dans une séquence où il y a du mouvement (car la différence entre deux images successives est grande). On ne peut pas voir un problème d’entrelacement sur un écran de PC. J’insiste sur ce point car il arrive d’avoir de mauvaises surprises lors de visionnages.

Il faut faire attention en montage vidéo : renverser une image (droite/gauche, haut/bas) peut provoquer un problème d’entrelacement sur la séquence en question. Cela dépend un peu du logiciel de montage utilisé. A tester au cas par cas …