[TUTO/Vulgarisation] Chapitres Matroska

Chapitres Matroska [TUTO/Vulgarisation] - Traitement Vidéo - Video & Son

Marsh Posté le 09-04-2015 à 15:57:19    

Certaines fonctionnalités du format Matroska sont méconnus voir totalement ingnorés.
Parmi elle, le système de chapitrage.
La majorité des fichiers MKV (surtout HD) ne contienne pas de chapitres.
Les rares fois ou ils sont présent, les utilisateurs ne savent pas comment les exploiter ou ne
peuvent pas faute de matériel ou de player compatible.
L'utilisation la plus courante est un systeme d'index (de préférence nommé) qui reproduit le chapitrage
disponible sur le DVD ou le BluRay.
Mais d'autres fonctionnalités sont possible avec le système de chapitres matroska comme :  
 
 
 
- Créer des fichiers chapitres matroska pouvant exploiter d'autres MKV
- Exploiter des videos multi-angle a partir d'un meme fichier ou via des mkv différents
- Lier des mkv ou des partie de mkv afin qu'elles apparaissent a l'utilisateur comme un tous
- Créer des combinaisons audio/video/sous-titres selectionnable en un clic via le menu (pratique pour passer de la version VF a la version VOSTFR)
 
 
Pré requis :  
- mkvtoolnix
- Haali media splitter
 
Liaison de fichier et Seguement UID :  
 
avant de rentrer dans le vif du sujet, voici quelques notions propre au format matroska qui vont nous servir par la suite.
Un des concepts les plus simple a comprendre et les plus facile a accomplir est la liaison de fichier.
Des fichiers Matroska ayant la meme combinaison de pistes (audio video sous-titres) et les mêmes codecs
peuvent être liés. Ceci permet de lancer n'importe lequel de ces fichiers lié et d'obtenir dans le player
une reconstitution virtuel du fichier final a lire.
 
Avec un exemple c'est plus simple :  
Imaginez que vous réalisé un MKV de 1.4 Go et que vous avez besoin de le spliter en 2 partie de 700 Mo.
Dans Mkvmerge Gui, onglet "Options Globale" dans la partie "Fractionnement" vous pouvez sliter le multiplexage
automatiquement après une taille de 700 Mo (Ne pas oublier de cocher "lier les fichiers" )
Ont obtiens 2 fichiers : Film-001.mkv et un Film-002.mkv de 700 Mo chacun.
quelque soit le fichier qu'ont utilise, c'est le film dans sa globalité qui se lance comme si ont lançait un
fichier unique de 1.4 Go
(le fichier 1 a un fichier suite et le fichier 2 a un fichier précédent)
 
http://i.imgur.com/SeVQbCO.jpg
 
un peu plus bas dans le même onglet ont voie une partie appelé "File/segment linking" qui permet de lier le mkv a d'autres fichiers
MKV (avec le même set de video, audio, sous-titre) qui fait référence a une notion de "UID".
Mkvtoolnix installe le programme Mkvinfo GUI qui donne cette information sur la ligne "Segment UID"
 
http://i.imgur.com/qwAVObj.jpg
 
 
 
Voici un exemple d'utilisation de l'UID
Imaginons qu'ont encode une série TV en mkv. la saison comporte 24 épisodes qui ont tous les 3 même premières minutes identique : le générique
il est possible d'encoder une seul fois le générique de 3 minutes dans un fichier mkv a part et d'encoder les 24 épisodes sans les 3 premières minutes
du générique.
Au moment ou ont va multiplexer chaque mkv d'épisode, on indique dans "Previous segment UID" le segment UID du fichier générique.
L'utilisateur aura l'impression que tout les épisodes ont un générique de début mais dans la réalité il s'agit du meme fichier générique qui est repris
lorsqu'ont lance chaque épisode dans le player.
 
 
Description format chapitre et chapitre structuré
 
Voici un exemple simple de chapitre au format xml
il est possible de charger ce fichier xml dans mkvmerge Gui (menu chapitres / charger) ou dans un éditeur de texte.
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
  3. <Chapters>
  4.   <EditionEntry>
  5.     <EditionFlagHidden>0</EditionFlagHidden>
  6.     <EditionFlagDefault>1</EditionFlagDefault>
  7.     <EditionUID>2906622091</EditionUID>
  8.     <ChapterAtom>
  9.       <ChapterUID>236737181</ChapterUID>
  10.       <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
  11.       <ChapterFlagHidden>0</ChapterFlagHidden>
  12.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  13.       <ChapterDisplay>
  14.         <ChapterString>Intro</ChapterString>
  15.         <ChapterLanguage>eng</ChapterLanguage>
  16.       </ChapterDisplay>
  17.     </ChapterAtom>
  18.     <ChapterAtom>
  19.       <ChapterUID>3143058099</ChapterUID>
  20.       <ChapterTimeStart>00:01:42.102000000</ChapterTimeStart>
  21.       <ChapterFlagHidden>0</ChapterFlagHidden>
  22.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  23.       <ChapterDisplay>
  24.         <ChapterString>Opening</ChapterString>
  25.         <ChapterLanguage>eng</ChapterLanguage>
  26.       </ChapterDisplay>
  27.     </ChapterAtom>
  28.   </EditionEntry>
  29. </Chapters>


Chaque éléments est défini dans le tag <chapterAtom> et tous les éléments sont englobé dans un tag <EditionEntry>.
Il est possible d'avoir plusieurs "édition" de chapitres aux seins d'un même mkv.
(ont pourrait par exemple avoir une edition avec le chapitrage nommé en français et une édition avec le chapitrage nommé en anglais
ou encore une edition avec un chapitrage détaillé de 25 scènes et une autre édition avec un index plus sommaire de 7 ou 8 scènes)
Pour le reste c'est assez simple. le chapterID (généré automatiquement), le ChapterTimeStart (le timing de la scène si ont utilise le chapitres)
la possibilité de masquer un chapitre (ChapterFlagHidden), le nom de la scène et la langue (ChapiterString et ChapterLanguage).
Il est possible pour un <chapterAtom> de mettre plusieurs <ChapterDisplay> pour rajouter des noms de chapitres dans d'autres langues.
(par défaut le splitter détecte la langue de votre system et n'affiche que les titres de votre langue)
 
 
Il éxite un tag très intéressant <EditionFlagOrdered>1</EditionFlagOrdered> qui permet de transformer le chapitrage en un système structuré ou programmé.
Le chapitrage standard n'est qu'une simple suite de pointe d'entré dans la ligne de temps de votre film.
Les chapitres structuré permette de créer une ligne de temps virtuel. Ces chapitres ont un temps de début et un temps de fin (<ChapterTimeStart> et <ChapterTimeEnd> )
Prenons un exemple d'un clip video de 30 secondes que l'ont veut jouer 3 fois de suite.
en temps normale il faudrait encoder 3 fois le clip pour obtenir un fichier d'1m30s.
Le chapitre structuré suivant permet de faire la même chose avec le clip de 30 secondes
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
  3. <Chapters>
  4.   <EditionEntry>
  5.     <EditionFlagOrdered>1</EditionFlagOrdered>
  6.     <EditionFlagHidden>0</EditionFlagHidden>
  7.     <EditionFlagDefault>1</EditionFlagDefault>
  8.     <EditionUID>2906622092</EditionUID>
  9.     <ChapterAtom>
  10.       <ChapterUID>3143058099</ChapterUID>
  11.       <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
  12.       <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
  13.       <ChapterFlagHidden>0</ChapterFlagHidden>
  14.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  15.       <ChapterDisplay>
  16.         <ChapterString>Test</ChapterString>
  17.         <ChapterLanguage>fr</ChapterLanguage>
  18.       </ChapterDisplay>
  19.     </ChapterAtom>
  20.     <ChapterAtom>
  21.       <ChapterUID>3143058098</ChapterUID>
  22.       <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
  23.       <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
  24.       <ChapterFlagHidden>1</ChapterFlagHidden>
  25.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  26.       <ChapterDisplay>
  27.         <ChapterString>caché</ChapterString>
  28.         <ChapterLanguage>fr</ChapterLanguage>
  29.       </ChapterDisplay>
  30.     </ChapterAtom>
  31.     <ChapterAtom>
  32.       <ChapterUID>3143058097</ChapterUID>
  33.       <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
  34.       <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
  35.       <ChapterFlagHidden>1</ChapterFlagHidden>
  36.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  37.       <ChapterDisplay>
  38.         <ChapterString>Pouet!</ChapterString>
  39.         <ChapterLanguage>fr</ChapterLanguage>
  40.       </ChapterDisplay>
  41.     </ChapterAtom>
  42.   </EditionEntry>
  43. </Chapters>


Dans cet exemple les mêmes 30 secondes sont rejouer 3 fois.
Dans le player, c'est un fichier qui s'affiche avec une durée 1m 30s.
Notez que les chapitres 2 ou 3 sont cachés et que seul le chapitre 1 apparait dans le menu chapitre.
 
Voici un autre exemple d'utilisation pour ceux qui connaisse un peu le film Memento
il éxite une version orginale du film et une version "Ordre chonologique"
Il serait tout a fait possible dans le même fichier mkv de faire deux éditions de chapitres.
Une edition avec un chapitrage standard de la version original et une édition avec des chapitres structurés
reprenant la version chronologique du film. (voir même une 3ème édition avec votre propre montage si ça vous chante)
 
 
Chapitres structurés et liaison de segment
 
La création de ligne de temps virtuel via les chapitres structurés peut être combiné avec le système de liaison de fichier vu plus haut.
c'est a dire qu'il est possible de faire référence a un autre fichier dans notre ligne de temps.
 
voila ce que ça donne dans le fichier XML
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
  3. <Chapters>
  4.   <EditionEntry>
  5.     <EditionFlagOrdered>1</EditionFlagOrdered>
  6.     <EditionFlagHidden>0</EditionFlagHidden>
  7.     <EditionFlagDefault>1</EditionFlagDefault>
  8.     <EditionUID>2906622092</EditionUID>
  9.     <ChapterAtom>
  10.       <ChapterUID>3143058099</ChapterUID>
  11.       <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
  12.       <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
  13.       <ChapterFlagHidden>0</ChapterFlagHidden>
  14.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  15.       <ChapterDisplay>
  16.         <ChapterString>Test</ChapterString>
  17.         <ChapterLanguage>fr</ChapterLanguage>
  18.       </ChapterDisplay>
  19.     </ChapterAtom>
  20.     <ChapterAtom>
  21.       <ChapterUID>3143058098</ChapterUID>
  22.       <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
  23.       <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
  24.       <ChapterFlagHidden>0</ChapterFlagHidden>
  25.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  26.       <ChapterSegmentUID format="hex">
  27.        b4 9b 72 e0 94 11 05 61 8f 7b 0f d6 d0 34 82 01
  28.       </ChapterSegmentUID>
  29.       <ChapterDisplay>
  30.         <ChapterString>Lecture d'un autre fichier</ChapterString>
  31.         <ChapterLanguage>fr</ChapterLanguage>
  32.       </ChapterDisplay>
  33.     </ChapterAtom>
  34.     <ChapterAtom>
  35.       <ChapterUID>3143058097</ChapterUID>
  36.       <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
  37.       <ChapterTimeEnd>00:00:30.000000000</ChapterTimeEnd>
  38.       <ChapterFlagHidden>0</ChapterFlagHidden>
  39.       <ChapterFlagEnabled>1</ChapterFlagEnabled>
  40.       <ChapterDisplay>
  41.         <ChapterString>Identique au chapitre 1</ChapterString>
  42.         <ChapterLanguage>fr</ChapterLanguage>
  43.       </ChapterDisplay>
  44.     </ChapterAtom>
  45.   </EditionEntry>
  46. </Chapters>


idéal par exemple pour gérer les films avec une fin alternative.
 
 
Jouer avec les Editions (versions) de chapitres et les combinaisons de pistes
 
On a vu que les editions permettent d'inclure plusieurs versions de chapitres aux seins d'un même fichier MKV.
ces différentes versions vont apparaitre sous la forme Edition1, Edition2, etc..
si il n'est pas possible de les nommés via le fichier XML, il est possible d'utiliser un fichier tag (également au format XML
a inclure dans mkvmerge GUI sur la ligne "fichier d'étiquettes" )
où l'ont va faire référence aux EditionUID du fichier XML chapitres.
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
  3. <Tags>
  4. <Tag>
  5.  <Targets>
  6.   <EditionUID>2906622092</EditionUID>
  7.   <TargetTypeValue>50</TargetTypeValue>
  8.  </Targets>
  9.  <Simple>
  10.   <Name>TITLE</Name>
  11.   <String>Générique début</String>
  12.   <TagLanguage>fr</TagLanguage>
  13.   <DefaultLanguage>1</DefaultLanguage>
  14.  </Simple>
  15. </Tag>
  16. <Tag>
  17.  <Targets>
  18.   <EditionUID>2906622091</EditionUID>
  19.   <TargetTypeValue>50</TargetTypeValue>
  20.  </Targets>
  21.  <Simple>
  22.   <Name>TITLE</Name>
  23.   <String>Générique début alternatif</String>
  24.   <TagLanguage>eng</TagLanguage>
  25.   <DefaultLanguage>1</DefaultLanguage>
  26.  </Simple>
  27. </Tag>
  28. </Tags>


Le splitter haali permet, en jouant avec les fichiers tag de configurer les jeux de pistes ou combinaisons de pistes (video, audio, sous-titres)
ont peut par exemple faire une edition de chapitre avec un "trackset" audio Français + ghost subtitles et une édition avec un "trackset" audio Anglais + Sous titres Français
 
Voila en image ce que ça donne dans le menu Haali
 
http://i.picasion.com/pic79/3e3f966a58cc0a05f12440538555d126.gif
 
 
 
voila le fichier tag qui a rendu ça possible. Je vais pas détailler ici la codification mais si vous êtes intéressé je suis a votre disposition.
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
  3. <Tags>
  4.   <Tag>
  5.     <Targets>
  6.       <EditionUID>2906622092</EditionUID>
  7.       <TargetTypeValue>50</TargetTypeValue>
  8.     </Targets>
  9.     <Simple>
  10.       <Name>TITLE</Name>
  11.       <String>"Version FR"</String>
  12.       <TagLanguage>eng</TagLanguage>
  13.       <DefaultLanguage>1</DefaultLanguage>
  14.     </Simple>
  15.   </Tag>
  16.   <Tag>
  17.     <Targets>
  18.       <EditionUID>2906622091</EditionUID>
  19.       <TargetTypeValue>50</TargetTypeValue>
  20.     </Targets>
  21.     <Simple>
  22.       <Name>TITLE</Name>
  23.       <String>"VOSTFR"</String>
  24.       <TagLanguage>eng</TagLanguage>
  25.       <DefaultLanguage>1</DefaultLanguage>
  26.     </Simple>
  27.   </Tag>
  28.   <Tag>
  29.     <Simple>
  30.       <Name>TRACKSETEX</Name>
  31.       <String>2906622092 . #0 #0 fra VF</String>
  32.     </Simple>
  33.     <Simple>
  34.       <Name>TRACKSETEX</Name>
  35.       <String>2906622091 . #1 #1 eng VOSTFR</String>
  36.     </Simple>
  37.   </Tag>
  38. </Tags>


Tout ce blabla n'a pour but que de vulgariser des fonctionnalités méconnues.
Libre a chacun de juger si il est bon de les utiliser ou pas et dans quelles conditions
J'espère que mon sévère degrés de nullité en anglais ne m'a pas trop fait traduire n'importe quoi.
Merci de m'avoir lu.


---------------
-les newbies d'aujourd'hui seront l'élite de demain
Reply

Marsh Posté le 09-04-2015 à 15:57:19   

Reply

Marsh Posté le 21-05-2016 à 17:05:01    

On m'a demandé si il était possible de faire une sorte de fichier index pour lancer une saison compète d'une série
sans se taper le générique de début et fin a chaque épisode.
 
j'ai pris un exemple concret pour expliquer comment procéder
 
admettons que j'ai 4 épisodes de 20 minutes chaqu'un
chaque épisodes est structuré de la manière suivante :
45 seconde d'opening
30 seconde de end credit (générique de fin)
 
je voudrais faire un fichier unique qui une fois lancé
me donne en une traite :
1er épisode avec opening mais sans générique de fin
2ème et 3ème épisodes sans opening et sans générique de fin
4ème épisodes sans opening mais avec générique de fin
 
 
1ère étape : creer le petit fichier mkv a partir du 1er épisode
(c'est en quelque sort un peu comme le fichier .cue ou un fichier playlist)
Pour cela on va utiliser la fonction split de mkvtoolnix Gui
on charge le fichier Episode01.mkv dans mkvtoolnix-gui.exe et dans l'onglet "output"
on lui demnade de faire spliter le fichier en 2 parties avec la durée la plus courte possible
pour la premiere partie.
dans mon cas ça ma donné deux fichiers :
01 Menu Index-001.mkv : les 6 première secondes du générique
01 Menu Index-002.mkv : qui est le reste de l'épisode 1 : je peux supprimer ce 2ème fichier, il ne sera pas utilise pour la suite
http://i.imgur.com/9k0vk5t.jpg
 
2ème étape : identifier le Segment unique ID de chaque épisode
pour cela il est aussi possible d'utiliser le "edit headers" de mkvtoolnix Gui
http://i.imgur.com/vJnycNv.jpg
 
3ème étapes : construire le fichier xml avec la structure de chapitres (bloc note et copier coller powaaa !!!)
dans mon exemple ça donne ça :
 
<?xml version="1.0" encoding="UTF-8"?>
 
<!-- <!DOCTYPE Tags SYSTEM "matroskatags.dtd"> -->
 
<Chapters>
  <EditionEntry>
    <EditionFlagOrdered>1</EditionFlagOrdered>
    <EditionFlagHidden>0</EditionFlagHidden>
    <EditionFlagDefault>1</EditionFlagDefault>
    <EditionUID>2906622092</EditionUID>
    <ChapterAtom>
      <ChapterUID>3143058099</ChapterUID>
      <ChapterTimeStart>00:00:00.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:00:06.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterDisplay>
        <ChapterString>Opening</ChapterString>
        <ChapterLanguage>eng</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterUID>3143058098</ChapterUID>
      <ChapterTimeStart>00:00:06.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:19:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterSegmentUID format="hex">
          a415eeec46a0d7228c24061937c0128c
      </ChapterSegmentUID>
      <ChapterDisplay>
        <ChapterString>Episode 01</ChapterString>
        <ChapterLanguage>eng</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
    <ChapterAtom>
      <ChapterUID>3143058097</ChapterUID>
      <ChapterTimeStart>00:00:45.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:19:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterSegmentUID format="hex">
          b229a320544782e28f6aebc4893676a3
      </ChapterSegmentUID>
      <ChapterDisplay>
        <ChapterString>Episode 02</ChapterString>
        <ChapterLanguage>eng</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>
       <ChapterAtom>
      <ChapterUID>3143058096</ChapterUID>
      <ChapterTimeStart>00:00:45.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:19:30.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterSegmentUID format="hex">
          b4be7128d1a954f29f4070ebb2ca0021
      </ChapterSegmentUID>
      <ChapterDisplay>
        <ChapterString>Episode 03</ChapterString>
        <ChapterLanguage>eng</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>    
    </ChapterAtom>
       <ChapterAtom>
      <ChapterUID>3143058095</ChapterUID>
      <ChapterTimeStart>00:00:45.000000000</ChapterTimeStart>
      <ChapterTimeEnd>00:20:00.000000000</ChapterTimeEnd>
      <ChapterFlagHidden>0</ChapterFlagHidden>
      <ChapterFlagEnabled>1</ChapterFlagEnabled>
      <ChapterSegmentUID format="hex">
          a0ae23746f9f0f55a52d11b13bc2d29e
      </ChapterSegmentUID>
      <ChapterDisplay>
        <ChapterString>Episode 04</ChapterString>
        <ChapterLanguage>eng</ChapterLanguage>
      </ChapterDisplay>
    </ChapterAtom>    
  </EditionEntry>
</Chapters>
 
 
 
j'indique pour chaque chapitre la valeur que j'ai récupéré lors de l'étape 2
dans <ChapterSegmentUID format="hex">
et je défini le timing, a savoir :
commencer a partir de la 6ème secondes pour le 1er épisode pour avoir la suite de l'opening et terminer a 19mm30
pour ne pas voir le générique de fin du 1er épisode.
commencer a partir de 45 seconde et terminer a 19mm30s pour le chapitres 2 et 3
 
4ème étapes : ajouter a mon fichier 01 Menu Index-001.mkv le xml contenant le chapitrage
pour ce faire, je charge le fichier "01 Menu Index-001.mkv" obtenu lors de l'étape 1 dans mkvtoolnix-gui.exe
et je lui rajoute le fichier xml de chapitrage de l'étape 3
 
http://i.imgur.com/LwNb0Jr.jpg
 
le petit fichier mkv obtenu me permet de lancer dans mon player la séquence définie dans mon fichier de chapitres.
a noter que ça fonctionne même si je change le nom des fichiers correspondant a chaque épisodes.


Message édité par aboulafia le 21-05-2016 à 17:15:49

---------------
-les newbies d'aujourd'hui seront l'élite de demain
Reply

Marsh Posté le 22-05-2016 à 17:32:50    

Ce sujet a été déplacé de la catégorie Windows & Software vers la categorie Video & Son par Wolfman

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed