myDVDEdit

par Jérôme - version 0.9.5, mise à jour le 07/05/05


myDVDEdit se veut être aux DVD ce que ResEdit est aux programmes sur Macintosh, un outil qui permet de connaître, et même (du moins dans une future version) de modifier le contenu d'un DVD, au niveau le plus bas.
Le format des DVD est très complexe. Je me suis surtout attaché à le rendre le plus accessible possible, quitte à laisser de côté des informations qui, si elles sont importantes pour la lecture du DVD par un lecteur, n'apportent rien à la personne qui voudrait simplement en connaître sa structure.

PRÉAMBULE

myDVDEdit ne sait pas lire les DVD vidéo protégés et ne le saura jamais. Il n'a pas été créé pour contourner les copyrights. Il a été créé pour comprendre comment fonctionne les DVD, pour aider à la conception de nouveaux DVD en permettant de l'exécuter en pas-à-pas, et (quand on pourra modifier le DVD) pour changer les aberrations de certains DVD, comme d'empêcher le changement de langue en lecture, ou de forcer la lecture de bandes annonces avant d'accéder au menu.

NDLR : myDVDEdit est un "donateware", c'est à dire qu'il est parfaitement fonctionnel, ne vous demandera jamais rien, mais que si vous pouvez faire un petit geste pour aider l'auteur (via le bouton PayPal ci-dessous), il vous en sera reconnaissant. Merci pout lui ! Je précise que c'est bien l'auteur de l'application qui reçoit vos dons, et non le site Mac & Video !


Note de Mac & Video. myDVDEdit en est au premier stade de son développement. Bien que Jérôme ait déjà passé pas mal de temps dessus, il vous livre là une version utilisable mais qui n'est pas encore complète. C'est grâce à vous, à vos réflexions et vos idées que le produit mûrira. Nous avons déjà expérimenté avec succès ce processus de développement convivial avec Yade et MovieGate, et nous sommes sûrs que myDVDEdit connaîtra la même fortune.

Je n'ai jamais eu la documentation officielle sur le format des DVD vidéo. J'ai écrit ce programme uniquement a partir de données recueillies sur internet, de sources libres, ou de discussions sur des forums.

myDVDEdit a entièrement été écrit en Cocoa.
Le logiciel est en français et en anglais.

En français, de nombreux termes n'ont volontairement pas été traduits. Le langage de programmation est en anglais. D'expérience, je sais que toute tentative de traduction d'un langage dans une langue n'apporte que des problèmes (incompatibilité des sources de deux langues différentes...). Et le langage fait directement référence aux autres ressources du DVD, leur traduction ne créerait que des problèmes d'incompréhension.

Inside DVD

Pour bien comprendre myDVDEdit, il faut aussi comprendre ce qu’est un DVD. Cette documentation va donc être aussi une (tentative) explication du format des DVD.

Commençons par lancer la lecture d’un DVD avec Lecteur DVD d’Apple. Allez dans le menu Fenêtre et choisissez le menu Afficher les Infos

Dès que le disque est inséré, il affiche parfois un certain nombre d’images, des copyrights; il peut vous demander dans quelle langue vous voulez le lire, vous présenter des bandes annonces de films. Généralement ça se termine par l’affichage d’une belle page de menu, fixe ou animée, avec différentes options (boutons) que vous pouvez sélectionner à l’aide de la télécommande. Puis vient le lancement du film.

Si vous regardez la fenêtre d’info durant tous ces changements d’affichage, vous verrez le numéro du titre et du chapitre changer, et parfois disparaître. Ce que vous devez savoir, c’est que quand le numéro apparaît, vous voyez un titre, quand il n’apparaît pas, vous voyez un menu. Ça peut paraître évident, mais ça ne l’est pourtant pas tant que ça. Sachez que l’on peut très bien voir une séquence de plusieurs minutes sans que ce soit un titre.
Notez cette différence, elle est importante pour la suite.

1. Du MPEG au PGC

Comme vous le savez sûrement, les séquences vidéo d’un DVD sont encodées en MPEG 2 (plus rarement en MPEG 1).

La compression MPEG 2 consiste à découper la séquence en bloc d’images plus ou moins compressés. Il y a 3 types d’images, les images I (Intra) sont indépendantes et créées par une simple compression JPEG d’une image fixe. Les images P (Predictive) permettent une compensation du mouvement avant à partir d’une image P ou I. Les images B (Bidirectionally predictive) permettent une interpolation avant et arrière.
Le tout forme une suite d’image dans le genre :

I B B P B B P B B P B B P B B I

Vous n’avez rien compris ? Ça n'est pas très grave, ce n’est pas essentiel pour la suite. Ce qu’il faut savoir c’est que cet ensemble d’images est appelé Group of Picture (GOP), que la norme DVD impose que le GOP commence par une image I et qu’il dure aproximativement 1/2 seconde. Après avoir imposé ces restrictions, et ajouté les pistes son, les subpictures et quelques données bien utiles pour un DVD, on appelle le tout un VOBU (Video Object Unit), mais comme je trouve ce nom vraiment pas parlant, je l’ai rebaptisé Objet (OK, j’avoue, je ne suis pas le premier à l’appeler ainsi).

Donc, si vous avez bien suivi, un Objet (comme je l’appelle danc myDVDEdit), c’est un sous-ensemble de la séquence vidéo, constituée d’une image fixe, de données permettant de calculer les images intermédiaires, et de quelques infos utiles pour gérer le DVD (navigation, subpictures...), et un Object dure environ 0,5s.

Pour constituer un film entier, il faut donc plusieurs Objets, et c’est ce qui a été appelé Cell (cellule) dans un DVD. Mais comme on veut pouvoir découper le film en plusieurs chapitres, les Cell on été regroupés en Program. Attention, si un chapitre est forcément un Program, un Program n’est pas forcément un chapitre.
On a enfin regroupé plusieurs Program pour obtenir le film complet dans ce qui a été appelé un PGC (Program Chain).

Une petite illustration pour bien comprendre :


La notion de PGC est une des plus méconnue, mais sans doute la plus importante d’un DVD. Parce qu’il faut bien comprendre qu’en fait, un DVD, ce n’est rien d’autre qu’une succession de PGC avec un langage de commandes qui permet de les enchaîner.

Il existe trois types de PGC, le PGC First Play qui est exécuté au lancement du DVD, les PGC Title (PGC titre) pour les titres, et les PGC Menu pour les menus. Dans les 3 cas, leur format est rigoureusement le même, mais c’est l’utilisation qui en est faite qui est différente.

2. Les fichiers

Ouvrons maintenant le répertoire d’un DVD pour voir ce qu’il contient.
Attention, pour ça il faut bien évidement que votre DVD ne soit pas protégé, que vous en soyez propriétaire et que vous ayez tous les droits pour le faire.

Si votre DVD n’est pas sur votre disque dur, recopiez le dessus, ça permettra d’accélérer les temps de chargement des ressources.

A la racine de votre DVD, vous trouverez deux dossiers:

• AUDIO_TS
• VIDEO_TS

AUDIO_TS n’est pas utilisé dans un DVD vidéo, il est généralement vide et ignoré par les lecteurs de DVD. Cependant, certains lecteurs réclament sa présence, et il est donc indispensable de le mettre...

Ouvrons VIDEO_TS. Voilà enfin tous les fichiers qui font de votre disque un DVD Video.
Vous y trouverez trois types de fichiers :

• Les .IFO
• Les .BUP
• Les .VOB

Les fichiers IFO (pour Information) contiennent toutes les données qui décrivent la structure du DVD.
Les fichiers BUP (pour Backup) sont les copies exactes des fichiers IFO du même nom. Il sont là pour remplacer les fichier IFO si l’un d’eux devenait illisible.
Enfin les VOB (pour Video Object) contiennent toutes les images, les sons, les sous-titres etc... qui seront restitués sur votre écran et sur vos haut-parleurs. Un fichier VOB ne doit jamais dépasser 1 Go.

Intéressons nous maintenant aux noms de ces fichiers.
On peut les regrouper en deux types :

• VIDEO_TS (.INF .BUP et .VOB)
• VTS_xx_n (.INF .BUP et .VOB)

Les fichiers VIDEO_TS constituent ce qui s’appelle le Video Manager, ou VMG. C’est le fichier VIDEO_TS.IFO qui est ouvert en premier. Il contient le PGC First Play, le programme exécuté en premier, la table des titres du DVD, la table des PGC VMG Menu, et plein d’autres tables qui sortent largement de la vulgarisation que je tente de faire du contenu d’un DVD...

Le fichier VIDEO_TS.VOB contient toutes les images et tous les sons utilisés par les PGC VMG Menu.

Les fichiers VTS_xx_n sont les Video Title Set. Un DVD est constitué d’un ensemble de VTS, il peut y en a voir jusqu’à 99, on peut donc avoir VTS_01_n, jusqu’à .... VTS_99_n, bravo!

Chaque VTS contient un certain nombre de titres, au choix du concepteur. Il peut très bien y avoir 1 titre dans le VTS_01, puis 5 dans VTS_02 et 18 dans VTS_03. Chaque titre correspond à un PGC VTS Title, mais les VTS contiennent aussi des PGC VTS Menu.

Les fichier VTS_xx_0.VOB contiennent les images et sons pour les menus. Il ne peuvent pas dépasser 1 Go, les menus animés ne peuvent donc pas être trop long.

Les fichiers VTS_xx_n.VOB avec n >= 1, contiennent les images et sons des titres. Comme un titre peut durer plus d’une heure, voir même plus de 2 heures, il faut souvent plusieurs Go pour les stocker. Comme chaque fichier VOB n’a pas le droit de dépasser 1 Go, les données sont découpées en plusieurs morceaux, numérotés de 1 à 9.

Comme je vous sens un peu perdu, il est temps de passer au concret, vous allez mieux comprendre.

3. Lancez myDVDEdit !

Comment, vous l’aviez déjà fait ? Haaa, petit curieux

Faites menu Fichier, Ouvrir et sélectionnez le dossier du DVD que vous voulez éditer. Vous pouvez choisir le dossier VIDEO_TS ou son dossier parent, c’est pareil.
Après quelques instants, le temps de lire tous les fichiers IFO, une fenêtre apparaît. Elle est découpée en 5 zones que nous allons maintenant détailler.


Zone 1 : c’est le sélecteur de PGC.
Dans sa partie haute, vous retrouvez les fichiers IFO.


Vous constaterez, dans mon exemple, qu’il y a deux lignes VTS Menu 1, une pour l’anglais et une pour le français. C’est la grosse différence entre les PGC Menu et les PGC VTS (titres), il peut y avoir une liste de PGC Menu différente pour chaque langue.

Dans sa partie basse, vous trouvez la liste des PGC. Cliquez sur VTS 1, histoire de voir à quoi ressemble une liste de PGC Title.

Chaque PGC apparaît sous la forme :


Ça fait encore quelques nouveaux termes...

• Le numéro du VTSTitle correspond au numéro du titre dans le VTS. Il ne faut surtout pas le confondre avec le numéro du titre dans le DVD.
• La durée du PGC est exprimé en heures/minutes/secondes/images. Images est une sous-division de la seconde bien connue des personnes manipulant de la vidéo. Il vous suffit de savoir que sur un DVD, il y a 25 images par seconde en mode PAL, et 30 images par seconde en NTSC.
Nombre d’angles : un DVD sait gérer jusqu’à 9 angles.
Nombre de pistes son : (Flux audio) il peut y avoir jusqu’à 8 pistes son.
Nombre de subpictures : J’utilise le terme subpictures, car si les subpictures sont utilisées pour gérer les sous-titres d’un film, elles servent a bien d’autres choses, comme par exemple, à afficher la sélection d’un bouton dans un menu, ou à faire apparaître des lapins blancs au milieu d’un film. Un DVD sait gérer jusqu’à 32 subpictures.
Nombre de Pre, Post et Commandes Cell. Les Commandes sont des instructions exécutées par le lecteur DVD. C’est dans ces instructions que réside toute “l’intelligence” du DVD; elle permettent de modifier des registres internes, de faire des tests et d’exécuter toutes sortes d’opérations en fonction du résultat. Les Pré-commandes sont exécutées en moment de l’entrée dans le PGC, les Post-commandes sont exécutées au moment de la sortie du PGC et les Commandes Cells sont exécutées à la fin de l’affichage d’une cellule, si le concepteur du DVD en estime le besoin. Le nombre total des Pré-commandes, Post-commandes et Commandes Cells ne peut pas dépasser 128.

Si en haut de la zone 1, vous sélectionnez Titres à la place de Tous les PGC, vous obtenez la liste complète des PGC Title du disque. Vous n’avez donc plus accès au First Play, ni aux PGC Menu.

L’affichage est légérement différent puisque pour chaque PGC, vous avez le numéro du titre correspondant, ainsi que le numéro du fichier VTS où se trouve ce titre, et le numéro du PGC dans ce VTS.

Par exemple, si vous avez Title 5 - VTS 2 - Pgc 4 cela signifie que le PGC du Titre 5 se trouve dans le fichier VTS_02_0.IFO, et que c’est le PGC numero 4 dans ce fichier.

Si vous sélectionnez un titre dans cette liste et que vous repassez dans le mode Tous les PGC, vous retrouvez le même PGC sélectionné.

4. Program Chain

La zone 2 vous donne toutes les informations sur le PGC.

• Informations : vous retrouvez là, la durée du PGC, son mode d’exécution (séquentiel ou aléatoire), le type d’encodage (MPEG1/MPEG2), le standard (PAL/NTSC), la résolution de l’affichage, l’aspect (4/3, 16/9), si le mode auto pan&scan et auto letterbox sont activés ou pas.

Vous avez ensuite la liste des pistes audio, avec la langue associée si elle est connue, l’encodage et le numéro du flux correspondant.

Et enfin les pistes subpictures. Comme je l’ai dit précédemment, les subpictures ont plusieurs utilités. Lorsqu’elles sont utilisées dans un PGC Menu, il n’y en a généralement qu’une, et sa langue n’est pas renseignée. Ces sous images sont alors utilisées pour afficher les boutons lorsqu’ils sont sélectionnés (Nous reverrons ça lorsque nous parlerons des boutons). Par contre, dans un titre, elles sont généralement utilisées pour afficher les sous-titres, mais peuvent également permettre l’affichage de n’importe quelle information.

• Cells : sans doute l’onglet le plus important; on y retrouve la liste des cellules d’un PGC.
Cet onglet n’apparaît pas si ce PGC n’a pas de cellule.
Détaillons ce que l’on peut y trouver :

• [Title 1-2] : cette cellule est la première du chapitre 2 du titre 1.
• [Prgm 3] : cette cellule est la première du programme numéro 3. Rappel, si tous les titres/chapitres correspondent à un programme, un programme ne correspond pas forcément à un début de chapitre.
• [Cell 3] : numéro de la cellule.
• [Angle 2] : numéro de l’angle. N’apparaît que pour les titres multi-angles.
• Durée : 00:00:15.02 / 25 : durée de la cellule, ici 15 secondes et 2 images. le 25 signifie que l’on est en 25 images par seconde, donc en PAL.
• (00:12:14.06) : horloge lorsque la lecture arrive à la fin de la cellule. Ça signifie que du début de PGC jusqu’à la fin de cette cellule, le film aura duré ici, 12 minutes, 14 secondes et 6 images.
• pause 15s : dans ce cas, la dernière image de la cellule reste visible 15 secondes. Option très souvent employée pour les slideshow, ou l’affichage d’un copyright.
• pause infinie : le lecteur reste sur la dernière image, en attente que l’utilisateur appuis sur l’un des boutons de la télécommande. Cette option est généralement utilisée pour afficher des menus fixes.
• VobId 5.2 : référence des Objects. Dans d’autres programmes, vous trouverez généralement deux nombres, le VobId (ici 5) et le CellId (ici 2). J’ai trouvé plus simple de les regrouper sous un seul nom.
Le VobId est donc un ensemble de deux nombres qui permet de retrouver les objets à afficher.
Il existe une table dans le fichier IFO au doux nom de Cell Address Map qui permet de trouver l’adresse dans les fichiers VOB de chaque objet de la cellule à partir de ce VobId.
La raison de cette indirection est multiple. Elle permet de pouvoir accéder aux mêmes objets dans deux cellules différentes. On peut par exemple avoir deux PGC présentant exactement le même film, donc avec les mêmes VobId, mais avec un flux subpicture forcé ou des commandes différentes.
La seconde raison est d’autoriser la non séquentialité des objets dans les fichiers VOB. Je m’explique : lorsque le PGC est en multi-angles, lors de la fabrication des fichiers VOB, les objets ne sont pas enregistrés en plaçant d’abord tous les objets pour l’angle 1, puis tous ceux de l’angle 2 etc..., mais on a d’abord un objet de l’angle 1, puis un objet de l’angle 2, et on recommence. Ça permet d’aller beaucoup plus vite pour retrouver les objets lors des changements d’angle.
• Cmd: 1 : commande Cell à exécuter à la fin de la cellule. le numéro correspond au numéro de la ligne de la commande qui doit être exécutée dans Commandes Cells.

• Palette : Ce sont les couleurs utilisées pour dessiner les subpictures (et les boutons sont aussi des sous images, soit dit en passant)

• Pré-commandes : Commandes exécutées lors de l’entrée dans le PGC.

• Post-commandes : Commandes exécutées à la fin d’un PGC, c’est à dire lorsque la dernière cellule du PGC est terminée et qu’aucune Commande Cell ne lui est affectée.

• Commandes Cells : Commandes exécutées à la fin d’une cellule si celle-ci est prévue pour. Si dans l’onglet Cells, sur l’une des lignes, vous trouvez Cmd: suivi d’un numéro, les Commandes Cells seront exécutées à la fin de la lecture de la cellule en commençant par la ligne indiquée par ce numéro.

• Options Interdites : sur cet onglet apparaissent les options interdites aux utilisateurs. Par exemple l’option Changement flux audio interdit aux utilisateurs de changer la piste audio à la volée, lorsque cette option est cochée.

L'éditeur de commandes :

MyDVDEdit permet de modifier vos commandes. Pour çà, cliquez sur le petit triangle à gauche de la commande, l'éditeur apparaît, vous pouvez alors complètement la modifier. L'éditeur est contextuel, cela signifie que les commandes disponibles et les valeurs possibles pour une commande dépendront du type de PGC, et des ressources disponibles. Si vous voulez faire un Jump Title/Chapter, seuls les titres disponibles seront proposés et seuls les chapitres disponibles pour un titre donné seront proposés.

Vous pouvez ajouter une nouvelle commande en cliquant sur le bouton [+] en bas de la fenêtre ou en appuyant sur la touche [+] alors que le tableau des commandes est sélectionné. Si une commande est sélectionnée dans le tableau, la nouvelle commande est insérée juste après. Si plusieurs commandes sont sélectionnées dans le tableau, la nouvelle commande est insérée juste après la dernière commande sélectionnée. Si aucune commande n'est sélectionnée, la commande est ajoutée à la fin du tableau.

Vous pouvez supprimer une ou plusieurs commandes en les sélectionnant puis en cliquant sur le bouton [-] situé en bas de la fenêtre ou en appuyant sur la touche [-] ou sur la touche <X] (backspace).

Vous pouvez modifier l'emplacement d'une commande à l'aide de la souris en cliquant sur la commande, puis en la déplaçant en maintenant la souris appuyée jusqu'à l'emplacement désiré. Vous pouvez déplacer plusieurs commandes de la même manière en sélectionnant avant l'ensemble des commandes à déplacer

Vous pouvez Couper, Copier et Coller une ou plusieurs commandes en les sélectionnant puis en appelant la commande menu correspondante.

Toutes les modifications apportées aux commandes peuvent être annulées puis rétablies à l'aide des commandes menu correspondantes.

Les modifications ne seront pas enregistrées sur le disque tant que la commande menu Fichier/Enregistrer n'aura pas été appelée.

L'option Ajuster les Goto permet de modifier automatiquement les adresses des branchements lors de l'insertion, de l'effacement ou du déplacement d'une ou plusieurs commandes. Par exemple, si le code est le suivant :

1 if(R0=4) Goto 3
2 R1=10
3 Jump Title 2

Si vous sélectionnez la ligne 2 et cliquez sur le bouton [+] alors que l'option Ajuster les Goto est active, le Goto de la ligne 1 sera corrigé. Votre nouveau code sera :

1 if(R0=4) Goto 4
2 R1=10
3 Nop
4 Jump Title 2

Le nombre de commande encore disponible est affiché en bas de la fenêtre. Pour chaque PGC, le nombre total des pré-commandes, post-commandes et commandes cells ne peut pas dépasser 128.

Les commandes :

Je suis au regret de vous annoncer que je ne vais pas pouvoir vous donner ici la documentation complète des commandes DVD (du moins, pas pour le moment). C'est une tâche qui me demanderait beaucoup trop de temps, et je préfère le dépenser en faisant évoluer myDVDEdit.

Je vous invite donc à visiter les sites suivants (sourceforge et dvd-replica) qui vous permettront d'en savoir un peu plus sur ces fameuses commandes (en anglais).

Attention : je vous rappelle que je n'ai jamais lu la documentation DVD officielle (cherchez le prix, vous comprendrez pourquoi). myDVDEdit a uniquement été écrit en croisant les informations trouvées sur différents sites, sur différents forums traitant du sujet ou en regardant les sources de logiciels libres. Toutes ces informations sont parfois contradictoires, il est donc tout à fait possible que certaines commandes soit fausses, non disponibles alors qu'elles devraient l'être ou inversement. Si vous rencontrez ce genre de problème, n'hésitez pas à me le signaler...

5. L’objet de mon D..VD

La zone 3 permet de visualiser les objets de la cellule sélectionnée dans l’onglet Cells.

Vous y trouvez les boutons de contrôle pour passer à l’objet précédent ou suivant, un slider pour sélectionner directement l’objet voulu, et l’écran d’affichage de vos objets (là, franchement, je pense que vous aviez déjà compris tout çà).

En haut à gauche, au dessus de l’écran, se trouve l’indicateur d’aspect (16/9 ou 4/3). Si vous cliquez dessus, vous pourrez voir ce que donnera votre film sur chaque type d’écran.
Souvent dans un DVD, les images sont enregistrés en 16/9 compatible 4/3, cela signifie que lorsque vous passez en 4/3, l’image passe en mode LetterBox. Vous pouvez retrouver cette information dans l’onglet Informations ;-) sous le terme 16/9 (auto letterbox). Maintenant si vous regardez un PGC Menu, vous constaterez qu’ils sont généralement en 16/9 (auto pan&scan). Cela signifie que lorsque l’écran est en 4/3, l’image n’est pas réduite, mais les parties gauche et droite de l’image sont tronquées.

En bas à gauche de l’écran se trouve l’horloge de l'objet (frame time). Elle peut être affichée ou supprimée en modifiant l’option dans les préférences.

Au dessus de l’image se trouve le récapitulatif de la position du sélecteur d’objet. Si vous placez la souris dessus et attendez 2 secondes, vous verrez apparaître les informations sur l’emplacement précis de cet objet sur le disque : le nom du fichier, l’offset de début de l’objet dans ce fichier et le secteur (sector).

Secteur ? Un secteur, c’est 2048 octets. Dans un objet sont mélangées des pistes son, des subpictures, et de la vidéo. En fait, elles ne sont pas vraiment mélangées, mais multiplexées, c’est à dire que l’on a, par exemple, 4 secteurs de vidéo, 2 secteurs audio de la piste 0 puis 2 secteurs audio de la piste 1 et de nouveau 6 secteurs de vidéo. Le tout est fait de sorte que les différents décodeurs qui travaillent en même temps (décodeur MPEG, décodeur audio, décodeur de subpictures) ne soient jamais à cours de données.
Comme maintenant on sait qu'un objet se trouve toujours à un offset multiple de 2048, toutes les tables qui servent à le retrouver fournissent non pas son offset, mais son secteur. Ça fait tout de même des valeurs beaucoup moins importantes.

6. Les subpictures

Attaquons nous maintenant à la zone 4, et plus précisément aux fameuses subpictures.

Tout d'abord, qu'est-ce qu'une subpicture ? Littéralement, on peut traduire par sous-image, mais il faudrait plutôt dire sur-image. En effet, c'est une image qui vient au dessus du film.

Les subpictures sont multiplexées avec les flux vidéo et audio dans un flux spécial (pour les connaisseurs, private stream 1, id 0x20 à 0x3F).

L'image est codée avec 2 bits par pixel, ce qui signifie que chaque point de l'image peut avoir 4 valeurs possibles. Ces valeurs sont :

• 0 : Arrière-plan, appelé aussi B pour Background.
• 1 : Motif, appelé aussi P pour Pattern.
• 2 : Emphase 1, appelé E1 (Emphasis 1).
• 3 : Emphase 2, appelé E2 (Emphasis 2)

Le flux subpicture contient également une table ou pour chacune de ces valeurs correspond un numéro de couleur dans la palette du PGC et un contraste. Le contraste est une valeur comprise entre 0 et 15, 0 signifiant transparent et 15 opaque. Toutes les valeurs entre 0 et 15 correspondent donc à un niveau de transparence.

Quelque soit la résolution du film et le mode d'affichage (16/9 ou 4/3), la subpicture a toujours une résolution de 720x480 en NTSC, ou 720x576 en PAL, mais généralement seule une partie de l'image est codée, le reste de l'image étant transparent.

Tout ça aurait pu être codé facilement à l'aide de quelques octets, mais ce serait méconnaître l'imagination débordante des inventeurs du DVD. Ils ont créés les SP_DCSQ, ou si vous préférez, les SubPicture Display Control SeQuence.
Remettez-vous, voyons !

Les SP_DCSQ sont des tables chaînées de commandes. On y trouve:

Un délai d'attente: temps à attendre avant d'exécuter la séquence.
Un pointeur sur le SP_DCSQ suivant, ou sur lui même si il n'y a plus d'autre SP_DCSQ.
Une série de commandes. Il y en a neuf possibles:

- End : termine la SP_DCSQ.
- Start Display : affichage de la subpicture.
- Forced Start Display : affichage forcé de la subpicture. Utilisé pour les menus, ou pour forcer l'afficher d'un sous-titre, même si aucun sous-titre n'est activé (pour comprendre un extra-terrestre, par exemple).
- Stop Display : effacement de la subpicture.
- Set Color : commande suivie des numéro des couleurs à utiliser pour les pixels B, P, E1 et E2.
- Set Contrast : commande suivie valeurs des contrastes pour les pixels B, P, E1 et E2.
- Set Display Area : définition de la zone d'affichage de la subpicture.
- Set Pixel Data Address : commande suivie par deux offset, un premier vers la définition des pixels des lignes paires, un second vers la définition des pixels des lignes impaires. Il y en effet 2 tableaux de pixels car le DVD étant généralement prévu pour la télévision, et celle-ci affichant tour à tour les lignes paires, puis les lignes impaires (le très célèbre entrelacement), la tâche du décodeur s'en trouve facilitée.
- Change Color and Contrast : Cette commande est très rarement utilisée. Elle permet de définir des zones pour lesquelles les couleurs et les contrastes vont être différents. Comme nous l'avons vu, il n'y a que 4 valeurs possibles par pixel, donc normalement, on ne peut avoir que 4 couleurs différent dans une subpicture (et encore, plutôt 3 car il faut bien qu'il y ait une valeur pour le transparent, en général l'Arrière plan B). Cette commande permet d'en avoir beaucoup plus en divisant l'image en zones ou les couleurs et les contrastes seront différents. Il y a tout de même des limites: l'image est découpée en bandes verticales de largeur quelconque puis chaque bande peut être découpée horizontalement sans qu'il ne puisse y avoir plus de 16 zones.

La première SP_DCSQ doit obligatoirement comporter au minimum : Set Color, Set Contrast, Set Display Area et Set Pixel Data Adresses.

La taille totale (commandes comprises) des données subpictures ne doit pas dépasser 53220 octets.

Voyons maintenant comment les subpictures sont gérées par myDVDEdit.

Sélectionnez un VTS, prenez en un avec si possible plusieurs sous-titres. Sélectionnez l'onglet Informations du PGC. Vous devez voir la liste de vos subpictures (lignes avec l'icône d'un écran avec des sous-titres). Pour des subpictures utilisées pour afficher des sous-titres, il y a de très grandes chances que vous ayez le nom de la langue correspondant à la langue du sous-titres, puis un numéro du flux subpicture pour le 16/9 et un (souvent le même) pour le letterbox.

Positionnez le sélecteur d'objet jusqu'à ce que des informations apparaissent dans l'onglet Subpictures.

Dans cette fenêtre, vous reconnaîtrez les SP_DCSQ sous le nom Séquence, suivi de la durée à attendre avant d'exécuter les commandes. Enfin une liste des commandes décrites précédemment. Vous ne verrez jamais les commandes End et Set Pixel Data Address.
Attention: la commande Change Color and Contrast n'est pas encore gérée par myDVDEdit. Si votre DVD l'utilise, le rendu de l'image sera incorrect.

Le titre de la fenêtre indique le numéro de flux subpicture. En retrouvant ce numéro dans la fenêtre Informations du PGC, vous saurez à quelle langue il correspond.

Sous la fenêtre, à droite, vous avez une valeur numérique. Elle indique le nombre de flux subpicture trouvé dans l'objet sélectionné.
A gauche, vous avez un stepper (petit contrôle avec une flèche vers le haut, et une vers le bas). Il permet de sélectionner le flux affiché par l'onglet Subpictures lorsqu'il y en a plusieurs.

Sous la fenêtre ce trouve un menu popup permettant de sélectionner ce qui doit être affiché à l'écran.

masquer tous les flux subpicture : les subpictures n'apparaissent plus à l'écran.
afficher tous les flux subpicture : c'est la subpicture sélectionnée dans l'onglet qui apparaît à l'écran.
afficher le flux subpicture n : c'est la subpicture indiquée, et seulement celle-ci, qui apparaît à l'écran. Vous pouvez néanmoins continuer à examiner les commandes des autres subpictures en utilisant le stepper.

7. Quand les subpictures me donnent des boutons

Vous allez dire que je me répète, les subpictures servent aussi aux boutons. Nous allons maintenant voir comment.

La définition des boutons est placée dans un paquet spécial appelé PCI (Presentation Control Information) qui est toujours dans le premier secteur de chaque Objet (pour rappel, premier secteur = 2048 premiers octets). Qu'il y ait des boutons ou pas, ce paquet est toujours présent.

On y trouve une table pouvant contenir la définition de 36 boutons.
Pour chaque définition, on trouve:

les coordonnées x et y du rectangle servant de zone d'action du bouton sur l'image.
un numéro de table parmi trois possibles fournissant les couleurs et les contrastes lorsque le bouton est sélectionné ainsi que les couleurs et les contrastes lorsque le bouton est activé.
un flag Action auto. Si cette option est utilisée, le bouton s'activera dès qu'il sera sélectionné, évitant ainsi à l'utilisateur d'avoir à appuyer sur ENTREE.
le numéro des boutons suivants lors de l'utilisation des touches de navigation de la télécommande.
Une commande (oui, une seule). C'est la commande exécutée lors de l'activation du bouton.

Comment ça marche tout ça ?

Tout d'abord, une subpicture est utilisée pour afficher les boutons dans leur état normal (non sélectionnés, non activés). Lorsque un bouton est sélectionné, la partie de la subpicture définie par le rectangle du bouton est redessinée en n'utilisant plus les couleurs et les contrastes définies dans les commandes de la subpicture, mais ceux de la table des couleurs du bouton sélectionné. Idem lorsque le bouton est activé (l'utilisateur appuie sur ENTREE) mais en utilisant les couleurs et contrastes de la table des couleurs en mode activé.

C'est pas clair ? OK, regardez myDVDEdit.

Sélectionnez un VTS Menu. Sélectionnez un PGC, il faut qu'il ait au moins une subpicture.
Dès que myDVDEdit détecte un objet avec un bouton, l'onglet Boutons est affiché.
Attention, si vous voulez voir le bouton s'afficher à l'écran, il faut vous positionner sur l'objet qui contient la subpicture des boutons.

Ignorez pour le moment la partie haute de l'onglet Boutons. Dans la partie basse, vous pouvez voir, par exemple, Bouton 1/5. Cela signifie que c'est le bouton numéro 1 qui est sélectionné et qu'il y en a 5 au total. Le stepper à coté vous permet de choisir le bouton que vous voulez sélectionner. Vous pouvez aussi sélectionner un bouton en cliquant dessus dans l'écran.
Juste en dessous, vous trouvez la définition de la zone de sélection du bouton.
A droite vous retrouvez les numéros des boutons sélectionnés lorsque l'utilisateur appuie sur GAUCHE, DROITE, HAUT ou BAS sur sa télécommande.
Plus bas, vous trouvez le numéro de la table des couleurs à utiliser.
A sa droite, l'option Action auto.
Enfin, tout en bas, la commande qui sera exécutée lorsque le bouton sera activé.

Lorsque le bouton n'est pas sélectionné, il est dessiné en utilisant les couleurs normales de la subpicture. Dès que vous le sélectionnez, puis activez, il prendra les couleurs de la table des couleurs dans le mode correspondant.
Supposons que table couleur indique 1. Cliquez sur l'onglet Couleurs. Sélection 1 donne alors les couleurs et les contrastes à utiliser pour redessiner la subpicture lorsque le bouton est sélectionné. Lorsque le bouton sera activé, ce sont les couleurs et les contrastes de Action 1 qui seront utilisés.

Ça y est, c'est plus clair ?

Je vous ai parlé d'une table pouvant contenir la définition de 36 boutons. Vous vous dites alors, on peut avoir jusqu'à 36 boutons à l'écran, et ben... heu... oui et non.

Lorsque l'image est en 4/3, aucun problème, que l'écran soit en 16/9 ou en 4/3, l'image et la subpicture s'affiche en 4/3.

Par contre, lorsque l'image de départ est en 16/9, on peut distinguer trois cas.

Image en 16/9 sur un écran 16/9. L'image n'est pas modifiée.
Image en 16/9 sur un écran 4/3 affichée en letterbox. L'image est réduite.
Image en 16/9 sur un écran 4/3 affichée en pan&scan. L'image est tronquée.

Quelque soit le mode utilisé, la subpicture fait toujours 720x480 en NTSC, ou 720x576 en PAL. Que l'écran soit en 16/9 ou en 4/3, la subpicture va toujours occuper la totalité de l'écran. Vous l'aurez compris, la position des boutons ne peut absolument pas être la même dans tous les modes, le film et la subpicture ne subissant pas la même déformation.

Dans la partie haute de l'onglet Boutons, vous avez le sélecteur de groupe. Il peut y avoir une, deux ou trois options possibles en fonction des caractéristiques du film. En sélectionnant chacune des options, vous pourrez voir les caractéristiques de chaque bouton dans le mode correspondant.

Comme la table des boutons n'a que 36 entrées, si vous n'avez qu'une seule option, vous pourrez avoir jusqu'à 36 boutons, si vous avez deux options, vous ne pourrez plus avoir que 18 boutons, si vous avez trois options (plutôt rare), vous ne pourrez plus avoir que 12 boutons sur votre écran.

Normalement, un bouton défini dans un mode sera le même dans les autres modes, mais théoriquement, rien n'empêche qu'un bouton soit différent en fonction du mode d'affichage.

Pour en finir avec ces boutons avant d'en faire une scarlatine, voyons les dernières options:

Force sélection bouton permet de forcer automatiquement la sélection d'un bouton au bout d'un certain temps.
Force action bouton permet de forcer automatiquement l'activation d'un bouton au bout d'un certain temps.
délai : Temps à attendre avant que le bouton soit automatiquement sélectionné ou activé.
contour permet d'afficher le rectangle de sélection des boutons.
numéro permet d'afficher à l'écran le numéro de chaque bouton pour les repérer plus facilement.
sélect. tout permet d'afficher tous les boutons dans leur état sélectionné. Attention, les boutons sont dessinés avec la table des couleurs du bouton courant. Les boutons qui n'utilisent pas la même table ne seront pas dessinés correctement dans ce mode.

Si vous double-cliquez sur la commande d'un bouton, ou dans la zone de sélection d'un bouton a l'écran, et que la commande est un déplacement vers un autre PGC/Cell/Program, ce nouveau PGC/Cell/Program est affiché.

A SUIVRE...

Historique du développement

0.9.5 (v28) 07/05/2005 - Compatibilité avec Tiger
- Nouvelle présentation de l'onglet Cells
- Edition de plus de paramètres Cell
- Affichage de l'état du GOP (ouvert/fermé)
- Edition:
  - Ajout PGC (dummy PGC)
  - Effacement de Cell
- Palettes prédéfinies
- Sauvegardes des palettes utilisateur
- Sélection des objets d'un PGC (future use):
  - Taille de la sélection
  - Menus sélection
- Vérification et correction de la table des titres à l'ouverture
- Accepte que les fichiers ne soient pas dans un répertoire VIDEO_TS
- Informations données paquets des objets (Packs)
- Informations données navigation des objets (PCI/DSI)
- Correction éditeur de commandes (PreviousPgc et NextPgc autorisé seulement dans le domain VTS)
- Correction effacement des instructions
0.9.1 (v23) 17/12/2004 - Edition de certains paramètres Cell
- Ajout des options interdites des titres dans l'onglet Options Interdites
- Navigation : Possibilité de revenir sur les positions précédentes
- en mode édition : sur les 50 derniers PGC visités
- en mode débug : sur les 100 dernières instructions exécutées avec restauration des registres
- Nouveaux Recourcis clavier pour Cell suivante, Cell précédente, Objet suivant, Objet précédent.
- En mode débug, affichage en rouge des registres modifiés
- Mise à jour de la table VMG_VTS_ATRT lors des changements des attributs VTS
- Ajout des menus pour accéder à la page d'aide et au forum MacEtVidéo sur myDVDEdit.
- Remerciements
0.9 (v22) 10/12/2004 - Ajout des onglets Paramètres DVD/IFO/PGC
- Edition des paramètres généraux du DVD
- Edition des paramètres IFO
- Edition des informations PGC
- Edition couleurs de la palette
- Edition des options utilisateur interdites
- Edition des registres en mode debug.
- Affichage des données MPEG
- Test du DVD avec Lecteur DVD.
- Correction éditeur de commande : plus de Goto ni de Break dans les commandes Cells.
- Alerte lorsque l'un des fichiers IFO est en lecture seulement. (Plus de sauvegarde)
- Lancement de myDVDEdit sur double-clic d'un fichier IFO, BUP ou VOB
- Correction de quelques bugs
0.8 (v19) 03/11/2004 - Editeur de commandes
- Deplacement des commandes par drag&drop
- Ajout/Effacement commandes
- Gestion du Undo/Redo
- Déplacement de l'affichage de la taille du DVD dans la le tableau des tailles
- Accélérateurs (Pomme 1 à 7) pour acceder rapidement aux onglets du PGC
- Correction Jump vers Title sans Cell affiché comme Not Found
- Correction instruction Set Register Mode (SetGPRMMD)
- Gestion des registres en mode compteur
- Correction affichage des subpictures en mode débug
- Correction affichage du type des PGC VMGM (title)
- Modification affichage de la commande Set Streams (SetSTN)
- Décodage des valeurs de SetAudioMixingMode et SetHighlightedButton
0.7 (v14) 22/09/2004 - Multifenêtres. Possibilité d'avoir plusieurs DVD ouvert
- Palette en (Y,Cr,Cb) ou (R,G,B) suivant la préférence
- Correction anomalie d'affichage des commandes (Français seulement)
0.6 (v13) 18/09/2004 - Localisation en Français
- Correction décodeur MPEG (lorsque présence MotionVector dans les images I)
0.5 (v12) 31/08/2004 - Première version distribuée par Mac et Video
- Nom définitif : myDVDEdit
- Correction anomalie du désassembleur commandes
0.4 (v11) 01/05/2004 Ajout mode débug
- colonne breakpoints dans le tabs pre/post/cell commands
- Préférences DVD (sélection de la langue menu/audio/sous-titres, code région)
- Sélecteur de mode Edit/Debug
- Remote control en mode débug
- Ajout des tabs Regs (registres) et System Regs (registres système)
- Menu Debug
- Déplacement des textes devant être localisés dans le fichier Localizable.strings
- Exécution de l'instruction d'un bouton en double-cliquant sur l'écran
0.3 (v10) 28/01/2004 - ajout d'une icône
- gestion des subpictures (sous-titres, menus)
affichage des sous-titres
affichage des boutons des menus, ainsi que toutes les informations liées aux boutons (taille, couleurs, commande associée)
- gestion des différents modes d'affichage (16/9, 4/3 letterbox, pan&scan)
- déplacement automatique vers un autre PGC en double-cliquant sur une instruction de branchement
- signale les branchements impossibles
- correction de quelques bugs du langage
- menu Go pour ce déplacer dans différents PGC
- affichage des informations d'un VOBU (objet) en maintenant la souris sur le texte au dessus de l'image
0.2 (v8) 22/09/2003 décodeur MPEG
0.1 (v6) 22/05/2003 décodeur PGC
v1 à v5 (du 10/12/2002 au 15/05/2003) plusieurs maquettes abandonnées