
Introdution
On en a déjà parlé dans quelques sujets (notamment dans le tuto pour supprimer les saccades XviD sur les platines DivX) alors voici un petit tuto sur GraphEdit. A la base, il est fourni gratuitement par Microsoft dans le Software Development Kit de DirectX pour aider les développeurs à créer et tester leurs propres filtres DirectShow. Il sert en fait à visualiser le fonctionnement d'une application DirectShow à travers la construction et l'exécution d'un graph. Ce graph contient des briques qui représentent les filtres mis en jeu et qui sont reliées entre elles par des flèches au niveau d'un point d'attache appelé "pin".
- Filtres : Il s'agit de composants qui permettent d'effectuer une opération élémentaire sur un fichier média, un flux, etc... Dans DirectShow, le filtre est un concept assez général pour inclure le composant qui ouvre le fichier média comme celui qui décompresse un flux ou celui qui affiche la vidéo à l'écran. Il est assimilable à un plugin.
- Pins : Il s'agit des points d'attache des briques (filtres). Il y a deux types de pins : les pins d'entrée placés à gauche de la brique et généralement notés "In" ou "Input" et les pins de sortie placés à droite de la brique et généralement notés "Out" ou "Output". Beaucoup de filtres ont 1 pin d'entrée et 1 pin de sortie mais ça n'est pas une généralité : Certains filtres peuvent avoir plusieurs pins d'entrée ou de sortie, tandis que d'autres n'ont pas de pins d'entrée ou de sorties. Enfin, il existe même des filtres qui n'ont pas de pins du tout !
- Flêches : Il s'agit de transporter le résultat du traitement effectué par un filtre vers un autre filtre. Elles sont donc toujours dirigées dans le même sens : du pin de sortie d'un filtre vers le pin d'entrée d'un autre filtre.
Plutôt que de télécharger le SDK de DirectX en entier, GraphEdit existe en version repackagée fourni avec quelques filtres :
- DUMP.AX : Couplé au filtre "File writer", ce filtre a le même effet que l'option "Demux" de VirtualDub (extraire les données brutes d'un flux).
- lame_dshow.ax : Le filtre d'encodage MP3 de LAME.
- Mpeg2Parser.ax : Le splitter MPEG-2 de Ligos. Couplé à l'"I-Media Multiple MPEG2 Source", il permet de séparer les différents flux d'un rip DVD.
- Multiple_MPEG2_Source.ax : Un filtre qui permet d'ouvrir une série de fichiers VOB issus d'un rip DVD.
- WAVDEST.AX : Couplé au filtre "File writer", ce filtre a le même effet que l'option "Save WAV" de VirtualDub (encapsuler un flux audio dans un conteneur WAV).
A noter :
- Le fichier BAT utilise le commutateur /S pour supprimer le message d'information final.
- Il est possible de désinstaller un filtre en utilisant le commutateur /U.
- Si le répertoire de GraphEdit est renommé, supprimé ou déplacé, les filtres ne seront plus utilisables puisque leur chemin complet est utilisé lors de l'enregistrement.
- L'utilitaire SysEnum fourni dans le package est utilisé pour lister les filtres installés. Il permet également de savoir le nom et le chemin complet du fichier AX ou DLL associé à un filtre.
Il suffit d'exécuter graphedt.exe :
L'interface de GraphEdit.
(1) Respectivement boutons de création, d'ouverture et d'enregistrement d'un graph.
(2) Bouton d'impression.
(3) Respectivement boutons pour couper et coller la sélection et bouton pour insérer ce qui est enregistré dans le presse-papier.
(4) Respectivement boutons de lecture, de pause et d'arrêt du graph.
(5) Respectivement bouton d'insertion d'un filtre et bouton de suppression des flèches.
(6) Bouton de connexion à une autre application en cours.
(7) Bouton de rafraîchissement du graph.
(8) Bouton d'affichage de la boîte "A propos...".
(9) Bouton de sélection de la frame suivante.
(10) Barre de progression et de navigation à travers les frames.
Affichage du graph de rendu
C'est le fonctionnement par défaut de GraphEdit. Afficher le graph de rendu d'un fichier media, c'est visualiser tous les filtres qui sont mis en jeu par un player DirectShow et le mécanisme de lecture. Plusieurs façon pour y arriver :
- L'option "Render Media File..." du menu "File" ou l'option "Render URL..." si le fichier est disponible sur Internet.
- Le drag & drop du fichier média dans GraphEdit.
- La construction du graph à la main si on sait à l'avance quels filtres sont utilisés...
Un AVI avec 1 piste vidéo XviD et 2 pistes audio MP3 : Le fichier "Exemple1.avi" est ouvert par "File Source Async." puis envoyé à l'"AVI Splitter". Le flux vidéo ("Stream 00") est envoyé au décodeur "XviD MPEG-4 Video Decoder" pour être affiché à l'écran via "Video Renderer" tandis que les 2 pistes audio ("Stream 01" et "Stream 02") sont décompressées par le "MPEG Layer-3 Decoder" puis envoyées à la carte son via "Default DirectSound Device".
L'exécution du graph par le bouton "Play" provoque la lecture du fichier média dans une fenêtre ActiveMovie et la barre de progression se tranforme en barre de nagivation. Pour peu que l'option "Use Clock" du menu "Graph" soit activée, on a là un player DirectShow des plus basiques avec un bouton "Stop" et un bouton "Pause".
La lecture dans une fenêtre ActiveMovie.
A noter :
- Les filtres changent de couleur selon qu'ils soient connectés à d'autres filtres ou pas.
- Si l'option "Use Clock" est activée, l'horloge du filtre "Default DirectSound Device" devient jaune.
- Pour afficher le graph de rendu, il est nécessaire de disposer de tous les filtres mis en jeu, y compris ceux dont on n'a pas besoin ou qui sont natifs à un player "évolué".
- Un graph de rendu est plus ou moins différent d'une machine à une autre selon les codecs et filtres qui sont installés (exemple : le "ffdshow MPEG-4 Video Decoder" peut très bien être utilisé à la place du "XviD MPEG-4 Video Decoder").
On peut se contenter d'afficher un graph mais on peut également le modifier :
- Pour supprimer une flêche : Sélectionner la flêche puis appuyer sur la touche "SUPPR" ou utiliser l'option "Delete" du menu "File".
- Pour supprimer un filtre : Sélectionner la brique puis appuyer sur la touche "SUPPR" ou utiliser l'option "Delete" du menu "File".
- Pour insérer un filtre : Cliquer sur le bouton d'insertion ou utiliser l'option "Insert Filters..." du menu "Graph", sélectionner le filtre puis cliquer sur le bouton "Insert Filter".
- Pour connecter un filtre à un autre : Cliquer sur le pin de sortie d'un filtre, diriger la souris vers le pin d'entrée d'un autre filtre puis relacher le bouton de la souris.
La fenêtre d'insertion des filtres.
Exemple : Sélection d'une piste audio lors de la lecture d'un BivX
Un BivX est un fichier média qui contient 1 piste vidéo et 2 pistes audio. La plupart des players possèdent un filtre intégré (de type Morgan Stream Switcher) pour pouvoir lire la piste audio souhaitée (VO ou VF en général). Dans le cas d'un player simple comme Windows Media Player, ce filtre n'existe pas et la lecture du fichier média entrainera la lecture des 2 pistes audio en même temps. La solution : (installer Morgan Stream Switcher bien sûr ou) créer un graph qui va supprimer la piste audio non utilisée.
- Afficher le graph de rendu du BivX.
Un AVI avec 1 piste vidéo XviD et 2 pistes audio MP3. - Supprimer tous les filtres qui sont utilisés pour la piste audio non souhaitée et qui sont situés après le pin de sortie du splitter.
Le graph ne laisse plus apparaître qu'une des 2 pistes audio. - Exécuter le graph pour lire le résultat dans GraphEdit via le bouton "Play"
ou
Enregistrer le fichier GRF par l'option "Save Graph" du menu "File" et ouvrir ce fichier GRF dans un player : on vient ici de créer un lanceur comme il en existait au tout début de l'utilisation des BivX (cette solution ne fonctionne plus qu'avec un nombre restreint de players).
A noter :
- Si un filtre n'est pas utilisé mais qu'il est toujours présent dans le graph, l'exécution du graph ne fonctionnera pas.
- La suppression d'un filtre supprime également les flêches de connexion de ce filtre.
- La plupart des filtres à insérer se trouvent dans la section "DirectShow Filters".
- L'option "Intelligent Connect" permet de détecter les incohérences lors de la connexion d'un filtre à un autre et d'ajouter automatiquement le filtre qui va bien.
- Sauf dans les cas où c'est clairement indiqué, il n'est pas nécessaire d'enregistrer le fichier GRF quand on quitte GraphEdit.
Exemple 1 : Extraction d'un flux audio
- Lancer GraphEdit.
- A partir du graph de rendu, supprimer tous les filtres autres que le "File Source Async." (celui qui porte le nom du fichier media "Exemple1.avi") et l'"AVI Splitter"
ou
Insérer le filtre "File Source Async." en sélectionnant le fichier media à ouvrir ("Exemple1.avi") puis insérer le filtre "AVI Splitter".
Un AVI (XviD/MP3) dont on veut extraire la piste son. - Insérer le filtre "Dump" et entrer le nom du fichier de sortie, ici "Exemple1.mp3".
- Connecter les filtres entre-eux de la façon suivante :
Le flux audio "Stream 01" est extrait vers "Exemple1.mp3". - Cliquer sur le bouton "Play" et attendre la fin de la lecture.
Exemple 2 : Conversion OGM -> AVI
- Lancer GraphEdit.
- A partir du graph de rendu, supprimer tous les filtres autres que le "File Source Async." (celui qui porte le nom du fichier media "Exemple2.ogm"), l'"Ogg Splitter" et le "Vorbis Decoder"
ou
Insérer le filtre "File Source Async." en sélectionnant le fichier media à ouvrir ("Exemple2.ogm") puis insérer les filtres "Ogg Splitter" et "Vorbis Decoder".
L'OGM dont la piste audio sera convertie en MP3 pour être multiplexée dans un AVI. - Insérer les filtres "AVI Mux", "MPEG Layer-3" et "File Writer" en spécifiant le nom d'un fichier de sortie, ici "Exemple2.avi".
- Connecter les filtres entre-eux de la façon suivante :
On récupère la vidéo telle quelle à la sortie de l'"Ogg Splitter" alors que le son est décodé via le "Vorbis Decoder" puis réencodé via "MPEG Layer-3". Le tout est ensuite muxé dans un AVI. - Cliquer sur le bouton "Play" et attendre la fin de la lecture.
A noter :
- Il est impossible d'utiliser directement l'encodeur MP3 de LAME autrement que pour produire un fichier MP3, d'où l'utilisation du banal encodeur de Microsoft.
- Il peut être nécessaire de paramétrer certains filtres (comme les encodeurs ou les muxers) avant d'exécuter le graph via l'option "Filter Properties" du clic-droit.