logohaut  
logobas titre
barre_menugauche barre_menudroite
forums
news
dossiers
liens

After Effect

FCP

Motion

Shake

DVD Studio Pro

Ressources

Divers

"Faire un DVD complet"

Par Benjico

Page 1 - Page 2 - Page 3 - Page 4 Réagir à cet article

6 .La programmation :
Bon, maintenant que l'on a commencé à faire de la programmation, on ne va pas s'arrêter en si bon chemin. Je vais moins détailler les manipulations pour faire les script, j'entends par là que je ne mettrai plus que les lignes de commande et leurs explications. Par exemple le script précédent pour le menu audio sera :
1 - Resume if GPRM0 = 1
2 - Jump Film

6.1 La touche "menu" :
Nous allons nous arrêter avec le menu audio pour nous attaquer à la partie la plus importante du DVD, la touche "menu" de la télécommande. Cette touche unique doit nous emmener exactement là où l'on veut, nous faire revenir de là où l'on vient, sur le bon bouton. Je vous préviens tout de suite, c'est le gros morceau de ce dossier, il va falloir s'accrocher un peu.

La touche menu va donc nous renvoyer à un script qui va se charger de nous aiguiller vers le bon menu. Tout d'abord, voilà ce que l'on veut :
- Si je lance le film depuis le menu principal, je reviens au menu principal
- Si je lance le film depuis le menu chapitre, je reviens au menu chapitre, au bon menu chapitre, le bouton allumé étant celui du chapitre que je viens de quitter. Exemple, si je lance le chapitre 5 depuis le menu chapitre et que, quand je fais menu je suis au chapitre 8, c'est la page contenant le chapitre 8 qui doit s'afficher, le bouton du chapitre 8 sélectionné.
- Si je lance le film depuis le menu Audio, je reviens au menu Audio

La première étape est de savoir de quel menu je viens. Nous allons utiliser un autre bloc mémoire, le GPRM 1 qui, en fonction de sa valeur va nous dire d'où l'on vient. Nous allons décider tout de suite de ces valeurs, comme ça ce sera fait. On va dire que :
- GPRM 1 = 1 je viens du menu principal
- GPRM 1 = 2 je viens du menu Chapitre ( de n'importe qu'elle page )
- GPRM 1 = 3 je viens du menu Audio
Je rappelle que ces valeurs sont totalement arbitraires, qu'on aurait pu choisir 123, 65 et 2, puisque c'est moi qui les donne et c'est moi qui les vérifie. Ce ne sera pas le cas pour d'autres scripts. Donc il faut que je marque le menu sur lequel je suis, c'est-à-dire que je donne à mon GPRM 1 la bonne valeur au bon moment. Pour faire simple, nous allons mettre un script avant nos menus par lequel nous passerons pour aller d'un menu à l'autre. Par exemple, au lieu de lier, dans le menu principal, le bouton "chapitre" au menu chapitre, je le lie à un script.

Avant le menu principal, donc entre le menu principal et le logo éditeur nous allons mettre le script :
1 - Set GPRM 1 = 1
2 - Jump Menu principal

Donc, à la fin de mon logo éditeur, ou de mon avertissement, au lieu de passer à mon intro et Menu principal je vais à ce script qui met la valeur du GPRM 1 à 1 puis qui m'envoie vers mon Intro et Menu principal.

De la même manière j'en fais un pour le menu chapitre ( que l'on va nommer chapitre in ) :
1 - Set GPRM 1 = 2
2 - Jump Menu chapitre

Et pour le menu Audio ( que l'on va nommer audio in ):
1 - Set GPRM 1 = 3
2 - Jump Menu Principal

A partir de là, le GPRM prend la bonne valeur à l'entrée dans un menu. Avant d'aller plus loin on va faire tout de suite l'opération inverse, c'est-à-dire remettre la bonne valeur au GPRM 1 en sortie de Menu. C'est exactement le même problème que pour les sous-titre, si je ne dis rien au lecteur, il ne touche à rien. Donc si je suis dans mon menu audio ( GPRM 1 = 3 ) et que je retourne au menu principal, la valeur de ce GPRM restera à 3. Donc, lorsque je sélectionne mon bouton "retour au menu principal" de mon menu audio je dois aller à un autre script qui remet la valeur du GPRM 1 à 1 ( que l'on va appeler audio out ):
1 - Set GPRM1 = 1
2 - Jump Menu Principal(loop) (bouton Audio)

J'en profite pour retourner directement à mon point de boucle et je choisis le bouton audio. Je fais pareil pour le menu chapitre ( script que l'on va nommer chapitre out ) :
1 - Set GPRM 1 = 1
2 - Jump Menu principal (loop) (bouton chapitre)

Le fait de remettre la valeur à 1 dans ce GPRM en revenant sur le menu principal m'assure que la fonction "menu" me ramène bien à ce menu. Donc maintenant dans la vue graphique de DVD Studio pro, il ne doit plus y avoir de flèche directe entre le menu principal, le menu chapitre et le menu audio. Tout doit passer par un script. ( sauf entre les pages des chapitres... )

Le script de retour menu. Pour tenter de faire quelque chose de plus facilement compréhensible, je vais séparer le script de retour menu en deux scripts distincts. Le premier va m'aiguiller vers le bon menu et le deuxième va calculer la bonne page de chapitre à aller chercher. Voici donc le script que l'on va appeler "menu film" vers lequel va pointer la touche menu de la télécommande lorsqu'on est dans le film :
1 - Jump Menu Principal(loop) (bouton film if GPRM 1 = 1 [ ici je retourne au menu principal si mon GPRM 1 = 1 ]
2 - Jump Audio(loop) (Bouton 1) if GPRM 1 = 3 [ idem pour le menu audio ]
3 - Jump script chapitre if GPRM 1 = 2 [ là, au lieu de renvoyer au menu chapitre, je renvoie à un script ]

Le grosse partie va donc être de savoir de quel chapitre je viens et à partir de là m'envoyer vers la bonne page et sur le bon bouton. Il y a deux méthodes, la longue et facile et la courte mais plus complexe. On va faire les deux :

- La méthode longue

la méthode longue consiste à récupérer le numéro de chapitre où je suis et de lier à la main en fonction de ce chiffre le bon menu et le bon bouton. Nous avons besoin d'utiliser un autre GPRM pour ça, on va prendre le GPRM 2. Donc ça donne :
1 - Set GPRM 2 = SPRM 7 [ C'est ce SPRM qui contient le numéro de chapitre où je suis ]
2 - Jump Menu chap1(loop) (bouton vignette 1) if GPRM 2 = 1
3 - Jump Menu Chap1(loop) (bouton vignette 2) if GPRM 2 = 2
4 - Jump Menu Chap1(loop) (bouton vignette 3) if GPRM 2 = 3
5 - Jump Menu Chap1(loop) (bouton vignette 4) if GPRM 2 = 4
6 - Jump Menu Chap2(loop) (bouton vignette 5) if GPRM 2 = 5
7 - Jump Menu Chap2(loop) (bouton vignette 6) if GPRM 2 = 6
8 - Jump Menu Chap2(loop) (bouton vignette 7) if GPRM 2 = 7
9 - Jump Menu Chap2(loop) (bouton vignette 8 ) if GPRM 2 = 8
10 - Jump Menu Chap3(loop) (bouton vignette 9) if GPRM 2 = 9
11 - Jump Menu Chap3(loop) (bouton vignette 10) if GPRM 2 = 10
12 - Jump Menu Chap3(loop) (bouton vignette 11) if GPRM 2 = 11
13 - Jump Menu Chap3(loop) (bouton vignette 12) if GPRM 2 = 12
14 - Jump Menu Chap4(loop) (bouton vignette 13) if GPRM 2 = 13
15 - Jump Menu Chap4(loop) (bouton vignette 14) if GPRM 2 = 14
16 - Jump Menu Chap4(loop) (bouton vignette 15) if GPRM 2 = 15
17 - Jump Menu Chap4(loop) (bouton vignette 16) if GPRM 2 = 16

Cette méthode est fastidieuse mais son principe est assez simple, mon GPRM 2 contient le numéro de chapitre duquel je suis parti, les lignes suivantes font un lien en fonction de cette valeur. Pour ceux qui voudrait utiliser une méthode plus automatique, même si celle-ci n'est pas très longue, il y a moyen de calculer ces liens. Même si ici l'intérêt y est limité, c'est un bon exercice de compréhension de la programmation des DVD. C'est complètement facultatif.

- La méthode avec calcul

On va partir d'un constat ; j'ai 4 vignettes par page, donc les chapitres 1 à 4 me renvoient à la page 1, 5 à 8 à la page 2, 9 à 12 à la 3 et 13 à 16 à la 4. Donc, à partir de ça je peux faire ce script :
1 - Set GPRM 2 = SPRM 7 ( toujours pareil, j'utilise un GPRM pour récupérer mon numéro de chapitre )
2 - Go to 6 if GPRM 2 > 12
3 - Go to 8 if GPRM 2 > 8
4 - Go to 10 If GPRM 2 > 4
5 - Jump Menu chap1 (bouton basé sur GPRM 2)
6 - Sub GPRM 2, 12
7 - Jump Chap page 4 (bouton basé sur GPRM 2)
8 - Sub GPRM 2, 8
9 - Jump Chap page 3 (bouton basé sur GPRM 2)
10 - Sub GPRM 2, 4
11 - Jump Chap page 2 (bouton basé sur GPRM 2)

Examinons un peu ce script. A la première ligne je récupère le numéro de chapitre que je stocke dans un GPRM, le GPRM 2. Les lignes 2, 3 et 4 sont en fait des renvois, c'est-à dire-que je saute des lignes de code en fonction de la valeur de ce GPRM. Ce qui m'intéresse en premier c'est de savoir à quelle page je dois aller, donc savoir si mon numéro de chapitre est entre 1 et 4, entre 5 et 8, entre 9 et 12 ou entre 13 et 16, c'est-à-dire le découpage de mes menus. Il n'y a pas de commande pour savoir si une valeur est comprise entre deux autres valeurs, il faut donc ruser avec les moyens du bord, la comparaison "plus grand que". Si mon numéro de chapitre est plus grand que 12, il est de toute façon compris entre 13 et 16, sinon le script passe à la ligne 3. A cette ligne, si mon numéro de chapitre est plus grand que 8, il est automatiquement compris entre 9 et 12 et il ne peut pas être supérieur à 12 sinon il aurait rempli la condition de la ligne précédente, idem pour la ligne 4. Pour comprendre le reste du script, on va prendre deux exemples concrets.

je viens du chapitre 13
1 - Set GPRM 2 = SPRM 7 ( OK )
2 - Go to 6 if GPRM 2 > 12 ( je rempli cette condition, je vais donc directement à la ligne 6 )
....
6 - sub 12, GPRM 2 ( je soustrais 12 à la valeur de mon GPRM 2, comme il était égal à 13, je me retrouve avec la valeur 1 )
7 - Jump Chapitre page 4 [bouton basé sur GPRM 2] ( je vais à la page 4 de mes chapitres et j'allume le numéro de bouton qui est dans le GPRM 2. ça tombe bien puisque mon GPRM 2 a une valeur de 1 et que la vignette de mon chapitre 13 est la première vignette de mon menu chapitre/page 4 )

Je viens du chapitre 8
1 - Set GPRM 2 = SPRM 7 (Ok)
2 - Go to 6 if GPRM 2 > 12 (non, la valeur de ce GPRM est de 8, je ne rempli pas la condition, je vais à la ligne suivante )
3 - Go to 8 if GPRM 2 > 8 (idem, la valeur 8 n'est pas supérieure à 8, donc je ne remplis pas la condition. Il y a des comparaisons supérieures ou égales, mais pas ici )
4 - Go to 10 If GPRM 2 > 4 (oui, mon GPRM 2 est bien supérieur à 4, donc je vais à la ligne 10)
...
10 - Sub GPRM 2, 4 ( je retire 4 à mon GPRM 2 qui avait une valeur de 8, donc je me retrouve avec une valeur de 4 )
11 - Jump Chap page 2 (bouton basé sur GPRM 2) ( je vais à la deuxième page de chapitre et j'allume le bouton dont le numéro est dans le GPRM 2, donc le bouton 4. Comme dans l'exemple précédent dans cette page le bouton 4, donc la vignette 4, est bien celle de mon chapitre 8 )

On remarque que si mon numéro de chapitre est compris entre 1 et 4, je saute tous les GoTo pour aller à la ligne 5.

C'est fini ? Non, il manque quelque chose, quelque chose de très important. Au début de la programmation on avait fait un petit script pour savoir si j'avais déjà été voir le film ou pas, pour ne pas planter le lecteur avec la fonction resume. On avait mis un script avant le film, ce qui fonctionne bien quand on vient du menu principal mais si l'on vient des chapitres, ça ne marche pas ( puisqu'on va directement sur un point de chapitre ). On ne va pas non plus faire un script en sortie du menu chapitre car ce serait long. En fait, on va rajouter une ligne de commande à notre premier script de retour menu, au tout début. On va rajouter :
1 - Set GPRM 0 = 1

Ce qui donne :
1 - Set GPRM 0 = 1
2 - Jump Menu Principal(loop) (bouton film if GPRM 1 = 1
3 - Jump Audio(loop) (Bouton 1) if GPRM 1 = 3
4 - Jump script chapitre if GPRM 1 = 2

A ce point là je n'ai plus besoin de mon premier script qui était placé en pre-script de mon film.

Afin de compléter aussi cette fonction "resume", nous allons placer un autre script en sortie du film pour des raisons de facilités de navigation. En effet, si j'ai lu tout mon film, il faut absolument que j'annule ma fonction "resume". L'autre utilité de ce script est aussi de renvoyer l'utilisateur au menu principal de mon DVD. En effet, même si je viens des chapitres, en ayant vu tout le film, il n'est pas nécessaire de retourner à l'écran de chapitre. Donc on va profiter de ce script pour tout remettre en ordre et renvoyer mon utilisateur où l'on veut.
1 - Set GPRM 0 = 0 ( j'annule ma fonction "resume" qui ne me sert plus et qui pourrait faire planter certains lecteurs )
2 - Go to 5 if GPRM 1 = 2 ( je vais à la ligne 4 si je viens du menu chapitre )
3 - Go to 7 if GPRM 1 = 3 ( je vais à la ligne 6 si je viens du menu audio )
4 - Jump Menu principal (bouton play all) ( je vais au menu principal et j'allume le bouton play all. Cette fonction est donc activée si je ne viens ni du menu chapitre ni du menu audio )
5 - Set GPRM 1 = 1 ( je remet mon GPRM 1 à 1, la valeur qui correspond à mon menu principal )
6 - Jump Menu principal (bouton chapitre)
7 - Set GPRM 1 = 1
8 - Jump Menu principal (bouton setup)

Nous allons aussi en profiter pour mapper la touche "title" de la télécommande vers un script qui a pour but de dire qu'on a déjà vu le film, donc d'activer la fonction "resume".
1 - Set GPRM 0 = 1
2 - Jump "là ou vous voulez que la touche title vous emmène"

Bon, à ce stade la majeure partie des scripts sont faits mais il manque encore quelques petites choses pour que ce DVD fonctionne vraiment bien.

Réagir à cet article

Page 1 - Page 2 - Page 3 - Page 4