Premiers pas avec VCDImager
Août 2001, apparaît une nouvelle version de VCDImager, logiciel, gratuit, capable de créer vos disques VideoCD et SVCD ! Seule la manipulation, en ligne de commande DOS et à travers un fichier de paramétrage XML pouvait rebuter les plus courageux. Des interfaces (GUI, Graphic User Interface ) de pilotage sous Windows deviennent disponibles. Elles visent à masquer la création de ce fichier XML. Vous découvrirez cependant que ce n’est pas si compliqué que cela ... grâce à Fabrice.
A vous vos vidéos et photos sur votre lecteur DVD quel que soit l’environnement de votre machine. VCDImager fonctionne en effet également sous Mac, Linux, ...
Logiciel requis
VCD Imager, outils gratuit page du logiciel, la version 0.7.1, le manuel en PDF
Des vidéos Mpeg pour un VCD et Mpeg2 pour un SVCD (lire les pages de ce site)
Un encodeur Mpeg ou Mpeg2 (ici j’utiliserais TPMGEnc 1.2 a) pour encoder les fichiers de menu au format bmp
CDRwin pour graver votre VCD / SVCD (version d’évaluation sur ce site)
VCDImager est un petit programme qui comporte plusieurs modules. Ici nous verrons comment réaliser des VCD ou SVCD avec sont module VCDXBuild.
La description du VCD (ou SVCD) se fait à l’aide d’un fichier au format XML respectant plusieurs règles simples. Ensuite il suffit de taper une petite ligne de commande et l’image du CD est générée sur le disque dur. Il n’y a plus qu’à graver le tout et vous pouvez visualiser votre création.
Remarque : pour la suite de cet article, lorsque j’emploierais le terme VCD cela est aussi valable pour les SVCD.
Sommaire
Qu’est-ce que le XML ?
Séquence / segment
Un premier VCD
Un VCD avec un menu simple
Un VCD avec une séquence chapitrée
Un VCD avec séquence d’intro
Qu’est ce que le XML ?
Le XML (Extanded Markup Language) est un langage de description qui ici nous sert à décrire l’architecture et la navigation dans le VCD.
Un fichier XML peut être créé à partir d’outils spécifiques tels que Xmetal, XML Spy, mais vous pouvez sans aucun problème le créer à partir du « bloc note » de Windows car ce n’est qu’un simple fichier texte avec l’extension « .xml »
Ce fichier contient un ensemble de balises qui sont délimités par les signes < et >.
Exemple de balise :
<MA BALISE>
En général une balise doit être « fermée ». Il y a deux méthodes pour les fermer :
On répète la même balise en mettant un / juste après le <
On met un / juste avant le >
Exemple :
<MA BALISE></MA BALISE>
ou
<MA BALISE />
On peut utiliser la notation que l’on veut si le contenu de la balise est vide, c’est à dire qu’il n’y a rien à l’intérieur. Pour une meilleure lisibilité je vous conseille d’utiliser, pour commencer la notation <EX></EX>.
Exemple :
Balise vide : <MA BALISE></MA BALISE> ou <MA BALISE />
Balise non vide : <MA BALISE>bla bla bla</MA BALISE>
Dans certaines balises on peut trouver ce que l’on appelle des « arguments ». Ils servent dans la plupart des cas à identifier un élément ou à préciser une action à effectuer avec cet élément. Si vous ne voyez pas du tout à quoi cela sert ne vous inquiétez pas, ça va venir dès que l’on créera le premier VCD.
Un attribut se note de la façon ATTRIBUT=« Valeur »
Exemple :
<MA BALISE ID="identifiant"></MA BALISE>
Voilà pour la syntaxe à appliquer, maintenant nous allons voir les éléments qui composent la description du VCD.
Séquence/Segment
Un VCD est constitué (entre autre) de « séquences » et de « segments », ce sont en fait les fichiers Mpeg que vous avez encodés et qui apparaîtront sur le VCD. La différence entre ces deux notions réside dans leur placement dans la structure du VCD et de leur utilisation. Un VCD réalisé avec VCDImager peut contenir 98 séquences et 1980 segments.
Nous verrons plus tard qu’il est possible de créer des vidéos avec des chapitres. Ce chapitrage ce fait uniquement sur des séquences Mpeg et non sur des segments.
Un VCD doit contenir au minimum une séquence. Il n’est pas obligé d’avoir de segments.
Une séquence est décrite à l’aide de la balise
On remarque que cette balise possède deux attributs : « src » et « id ».
« src » correspond au chemin sur votre disque dur de votre vidéo.
« id » est l’identifiant qui servira à appeler votre séquence vidéo. Vous pouvez mettre ce que vous voulez dans le contenu de l’attribut « id » à l’exception d’accents, d’espaces, et de caractères spéciaux (\, /,...)
Je vous conseil de nommer de clairement cet attribut, cela vous facilitera une relecture de la structure du VCD.
Vous pouvez donc mettre plusieurs séquences dans votre VCD. L’ensemble de ces séquences est entouré par des balises
Exemple :
<sequence-items>
<sequence-item src="c:\vcd\video01.mpg" id="video-01"/>
<sequence-item src="c:\vcd\video02.mpg" id="video-02"/>
</sequence-items>
Pour les segments, nous avons une syntaxe similaire :
<segment-items>
<segment-item src="c:\vcd\video03.mpg" id="video-04"/>
<segment-item src="c:\vcd\video04.mpg" id="video-05"/>
</segment-items>
« src » est toujours le chemin de votre vidéo, et « id » un nom que vous donnez à cette vidéo pour pouvoir l’identifier dans le fichier XML.
Nous voilà prêt à créer notre premier VCD.
Un premier VCD
Pour créer notre premier VCD nous allons prendre une vidéo et la jouer, tout simplement.
Voici le code qui effectue cette opération : (à télécharger ici)
<?xml version="1.0"?>
<!DOCTYPE videocd PUBLIC "-//GNU//DTD VideoCD//EN" "http://www.gnu.org/software/vcdimager/videocd.dtd">
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/" class="vcd" version="2.0">
<info>
<album-id>Test</album-id>
<volume-count>1</volume-count>
<volume-number>1</volume-number>
</info>
<pvd>
<volume-id>Test_1</volume-id>
<system-id>CD-RTOS CD-BRIDGE</system-id>
</pvd>
<sequence-items>
<sequence-item src="c:\vcd\video01.mpg" id="video-01"/>
</sequence-items>
<pbc>
<playlist id="play-video-01">
<wait>0</wait>
<play-item ref="video-01"/>
</playlist>
</pbc>
</videocd>
Le code commence toujours par :
{<?xml version="1.0"?>
<!DOCTYPE videocd PUBLIC "-//GNU//DTD VideoCD//EN" "http://www.gnu.org/software/vcdimager/videocd.dtd">
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/" class="vcd" version="2.0">
Vous pouvez changer les paramètres de la dernière ligne, selon le cas ou vous voulez réaliser un VCD ou un SVCD.
Pour un VCD :
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/" class="vcd" version="2.0">}
Pour un SVCD :
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/" class="svcd" version="1.0">}
Ensuite nous avons la partie <info>
qui regroupe toutes les informations du VCD :
<album-id>
: nom de l’album.
<volume-count>
: nombre de CD qui constitue l’album. Ici nous n’avons qu’une vidéo qui est stockée sur le CD et ne dépasse pas la taille de celui-ci.
<volume-number>1</volume-number>
pour le premier CD et <volume-number>2</volume-number>
pour le deuxième.
En dessous nous avons la balise
<system-id>
: sert à rendre le VCD compatible CD-i. Il faut garder la valeur CD-RTOS CD-BRIDGE.
Ensuite nous retrouvons notre séquence vidéo :
<sequence-items>
<sequence-item src="c:\vcd\video01.mpg" id="video-01"/>
</sequence-items>}
Suit enfin la partie
Pour cet exemple nous jouons donc la vidéo identifiée par le nom « video-01 » grâce à la ligne :
<play-item ref="video-01"/>
Dans l’attribut « ref » nous retrouvons l’identifiant de notre vidéo, à savoir « video-01 »
Cette balise est contenue dans une balise
Conseil : nommez vos vidéos qui sont dans une balise <playlist>
« play-xxx » et les vidéos qui sont contenus dans des balises
Ici notre vidéo à l’identifiant « video-01 ». L’identifiant qui apparaît dans
<wait>0<wait>
indique que nous jouons immédiatement la vidéo.
Une fois ce fichier réalisé, sauvegardez le sur votre disque dur, par exemple sur « c :\testvcd » avec le nom « test.xml ». L’extension de ce fichier doit obligatoirement être xml.
Dans ce répertoire copiez tous les fichiers de VCDImager. Ensuite il faut passer en ligne de commande : cliquez sur « Démarrer » puis « Exécuter », tapez « Command ». Il vous faut vous positionner dans le répertoire « c :\testvcd\ ».
Tapez ensuite :
vcdxbuild test.xml
Votre image CD sera créée dans le répertoire courrant sous le nom « videocd.cue ». Vous pouvez changer ce nom en tapant la ligne de commande :
Vcdxbuild -c nomCD.cue -b nomCD.bin test.xml
Il ne reste plus qu’à graver l’image avec CD-RWin
Un VCD avec un menu simple
Dans ce deuxième exemple nous allons voir comment réaliser un menu dans lequel on pourra choisir entre deux vidéos avec les touches 1 et 2 de la télécommande. Lors de la lecture d’une des vidéos il sera possible d’utiliser les touches « suivant », « précédent » et « retour ».
Pour cela il nous faut :
deux vidéos
une image de menu au format mpeg (pour cela encodez un fichier .bmp dans TMPGEnc avec les dimensions 704*576 pour être en plein écran et à la résolution maximale).
Description de la navigation :
Voici le code pour réaliser un tel VCD : (à télécharger ici)
<?xml version="1.0"?>
<!DOCTYPE videocd PUBLIC "-//GNU//DTD VideoCD//EN" "http://www.gnu.org/software/vcdimager/videocd.dtd">
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/" class="vcd" version="2.0">
<info>
<album-id>Menu</album-id>
<volume-count>1</volume-count>
<volume-number>1</volume-number>
</info>
<pvd>
<volume-id>Menu_1</volume-id>
<system-id>CD-RTOS CD-BRIDGE</system-id>
</pvd>
<segment-items>
<segment-item src="c:\vcd\menu.mpg" id="menu"/>
</segment-items>
<sequence-items>
<sequence-item src="c:\vcd\video01.mpg" id="video-01"/>
<sequence-item src="c:\vcd\video02.mpg" id="video-02"/>
</sequence-items>
<pbc>
<selection id="selec-menu">
<bsn>1</bsn>
<prev ref="selec-menu"/>
<next ref="selec-menu"/>
<return ref="selec-menu"/>
<default ref="play-video-01"/>
<timeout ref="play-video-01"/>
<wait>-1</wait>
<loop jump-timing="delayed">1</loop>
<play-item ref="menu"/>
<select ref="play-video-01"/>
<select ref="play-video-02"/>
</selection>
<playlist id="play-video-01">
<prev ref="selec-menu"/>
<next ref="play-video-02"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="video-01"/>
</playlist>
<playlist id="play-video-02">
<prev ref="play-video-01"/>
<next ref="selec-menu"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="video-02"/>
</playlist>
</pbc>
</videocd>
Le début du fichier ne change pas.
Notre menu se trouve dans la partie
« menu » pour le menu.
Dans <sequence-items>
nous avons la définition de nos deux vidéos avec les identifiant suivant :
« video-01 » pour la première vidéo
« video-02 » pour la deuxième
Dans la partie <pbc>
nous trouvons une balise <selection>
qui correspond au menu et deux balises <playlist>
qui correspondent aux deux vidéos.
Chacune de ces balises à un identifiant :
« selec-menu » pour la partie menu
« play-video-01 » pour la vidéo 1
« play-video-02 » pour la vidéo 2
Nous allons nous intéresser tout d’abord aux balises <playlist>
.
Pour la première vidéo, lorsque l’on appuis sur la touche « précédent » on souhaite retourner au menu. Il suffit de mettre dans la balise
<prev ref="selec-menu"/>
« prev » correspond à la touche « précédente » de la télécommande, et l’attribut « ref » à l’identifiant de la partie Menu. On ne doit pas mettre directement l’identifiant de la vidéo Menu, mais l’identifiant du « playlist » ou « selection » qui contient la vidéo du menu. Dans notre cas c’est l’identifiant de la balise <selection>
« selec-menu ».
En appuyant sur la touche « suivant » on veut passer à la deuxième vidéo :
<next ref="play-video-02"/>
« next » correspond à la touche « suivante » de la télécommande. Dans l’attribut « ref » on retrouve l’identifiant du « playlist » de la vidéo 2.
En appuyant sur la touche « retour » on veut retourner au menu :
<return ref="selec-menu"/>
« return » correspond à cette touche. Dans l’attribut « ref » on retrouve l’identifiant du « selection » de la vidéo du menu.
<wait>0</wait>
signifie qu’il n’y a pas de délais après avoir joué la vidéo pour retourner au menu.
Enfin nous avons l’appel de la vidéo à jouer :
<play-item ref="video-01"/>
Pour le deuxième « playlist » qui porte l’identifiant « play-video-02 » nous utilisons les mêmes balises :
<prev ref="play-video-01"/>
pour revenir à la vidéo 1 lorsque l’on appuie sur la touche « précédent »
<next ref="selec-menu"/>
pour aller au menu quand on appuie sur la touche « suivant »
<return ref="selec-menu"/>
pour aller au menu quand on appuie sur la touche « retour »
<wait>0</wait>
pour aller directement à l’identifiant suivant, ici « selec-menu »
<play-item ref="video-02"/>
pour préciser de jouer la vidéo 2
Maintenant le plus intéressant, le menu.
<bsn>1</bsn>
signifie qui la sélection à numérique à partir de la télécommande commence à 1.
Ensuite on a les balises
<default ref="play-video-01"/>
corresponds à l’appuis sur la touche « play ». Quand on appuie sur « play » on va sur le « playlist » « play-video-01 » qui corresponds à la lecture de la vidéo numéro 1.
<wait>-1</wait>
signifie que l’on boucle indéfiniment
<loop jump-timing="delayed">1</loop>
signifie que la séquence est jouée une fois et que l’on attends qu’une action se produise (« jumping-timing=« delayed » »)
<play-item ref="menu"/>
indique que la vidéo à jouer est « menu ».
les balises <select>
qui suivent représentent les choix possibles de ce menu. Etant donné que la sélection numérique commence à 1 (<bsn>1</bsn>
) si on appuie sur 1 on joue la partie « play-video-01 » (qui correspond à la lecture de la première vidéo), et si on appuie sur 2 on joue la partie « play-video-02 ».
Enregistrer ce fichier (menu.xml) dans le répertoire ou se trouve VCDImager et générez l’image du CD grâce à la ligne de commande : vcdxbuild menu.xml
Un VCD avec une séquence chapitrée
Il est possible de faire un VCD (ou SVCD) avec des vidéos chapitrées.
Pour cela il vous faut
une page de menu
une vidéo et savoir à quel moment créer un nouveau chapitre.
Le reste est extrêmement simple.
Description de la navigation :
Voici le code d’un VCD contenant une vidéo avec 3 chapitres : (à télécharger ici)
<?xml version="1.0"?>
<!DOCTYPE videocd PUBLIC "-//GNU//DTD VideoCD//EN" "http://www.gnu.org/software/vcdimager/videocd.dtd">
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/" class="vcd" version="2.0">
<info>
<album-id>Chapitre</album-id>
<volume-count>1</volume-count>
<volume-number>1</volume-number>
</info>
<pvd>
<volume-id>Chapitre_1</volume-id>
<system-id>CD-RTOS CD-BRIDGE</system-id>
</pvd>
<segment-items>
<segment-item src="c:\vcd\menu.mpg" id="menu"/>
</segment-items>
<sequence-items>
<sequence-item src="c:\vcd\video01.mpg" id="video-01">
<entry id="video01-ent01">5.00</entry>
<entry id="video01-ent02">10.00</entry>
<entry id="video01-ent03">15.00</entry>
</sequence-item>
</sequence-items>
<pbc>
<selection id="selec-menu">
<bsn>1</bsn>
<prev ref="selec-menu"/>
<next ref="selec-menu"/>
<return ref="selec-menu"/>
<default ref="play-video-01"/>
<timeout ref="play-video-01"/>
<wait>-1</wait>
<loop jump-timing="delayed">1</loop>
<play-item ref="menu"/>
<select ref="play-video-01"/>
<select ref="play-video01-ent01"/>
<select ref="play-video01-ent02"/>
<select ref="play-video01-ent03"/>
</selection>
<playlist id="play-video-01">
<prev ref="selec-menu"/>
<next ref="play-video01-ent01"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="video-01"/>
</playlist>
<playlist id="play-video01-ent01">
<prev ref="play-video-01"/>
<next ref="play-video01-ent02"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="video01-ent01"/>
</playlist>
<playlist id="play-video01-ent02">
<prev ref="play-video01-ent01"/>
<next ref="play-video01-ent03"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="video01-ent02"/>
</playlist>
<playlist id="play-video01-ent03">
<prev ref="play-video01-ent02"/>
<next ref="selec-menu"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="video01-ent03"/>
</playlist>
</pbc>
</videocd>
Dans la partie <sequence-items>
on retrouve la balise <sequence-item>
du menu et une balise
Cette balise contient toujours les attributs « src » et « id » pour indiquer le chemin de la vidéo et son identifiant. De plus elle contient plusieurs balise <entry>
qui sont des points d’entrées de cette vidéo. Chaque balise <entry>
à un identifiant qui à la même fonction que les autres identifiant utilisés précédemment. Dans cette balise nous trouvons donc un point d’encrage sur la vidéo exprimé en secondes. Chaque point d’entré ainsi créé permettra de faire un renvois vers cette partie de la vidéo à partir d’un « selection » ou d’un « playlist ».
Lorsque l’on fait un revoie vers un point de la vidéo, la lecture commence à partir de ce point et jusqu’au bout de la vidéo (sauf si on appuie sur une touche).
Dans la partie <pbc>
on arrive sur la partie page de menu qui propose 4 choix (et commence par 1 :
<bsn>1</bsn>) :
play-video-01
play-video01-ent01
play-video01-ent02
play-video01-ent03
Si on regarde le <playlist>
« play-video-01 » on voit que l’on joue la vidéo « video-01 ».
Si on clique sur la touche 2, on est renvoyé sur le <play-item>
on remarque que sa référence est un des points d’entrée de la vidéo. La lecture commence donc à partir de ce point et jusqu’à la fin. Si on appuie sur suivant, on effectue ce qu’il y a dans la balise <next>
, c’est à dire on se dirige vers la partie « play-video01-ent02 » qui pointe vers le deuxième point d’encrage de la vidéo.
Un VCD avec une séquence d’intro
Un VCD avec une séquence d’intro est un VCD avec un <playlist>
qui lit la vidéo d’intro et qui est placé juste après la balise <pbc>
. Dans la balise <next>
on indique l’identifiant du menu à afficher juste après l’intro (ici « selec-menu »).
Description de la navigation :
Voici le code XML : (à télécharger ici)
<?xml version="1.0"?>
<!DOCTYPE videocd PUBLIC "-//GNU//DTD VideoCD//EN" "http://www.gnu.org/software/vcdimager/videocd.dtd">
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/" class="vcd" version="2.0">
<info>
<album-id>intro</album-id>
<volume-count>1</volume-count>
<volume-number>1</volume-number>
</info>
<pvd>
<volume-id>intro_1</volume-id>
<system-id>CD-RTOS CD-BRIDGE</system-id>
</pvd>
<segment-items>
<segment-item src="c:\vcd\menu.mpg" id="menu"/>
<segment-item src="c:\vcd\video02.mpg" id="intro"/>
</segment-items>
<sequence-items>
<sequence-item src="c:\vcd\video01.mpg" id="video-01" />
</sequence-items>
<pbc>
<playlist id="play-intro">
<prev ref="selec-menu"/>
<next ref="selec-menu"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="intro"/>
</playlist>
<selection id="selec-menu">
<bsn>1</bsn>
<prev ref="selec-menu"/>
<next ref="selec-menu"/>
<return ref="selec-menu"/>
<default ref="play-video-01"/>
<timeout ref="play-video-01"/>
<wait>-1</wait>
<loop jump-timing="delayed">1</loop>
<play-item ref="menu"/>
<select ref="play-video-01"/>
</selection>
<playlist id="play-video-01">
<prev ref="selec-menu"/>
<next ref="selec-menu"/>
<return ref="selec-menu"/>
<wait>0</wait>
<play-item ref="video-01"/>
</playlist>
</pbc>
</videocd>
Vos questions sont bienvenues pour compléter/améliorer ce guide !
Vos commentaires
Suivre les commentaires : |