FixMKVGaps dispose d’un module permettant d’exécuter des scripts pour automatiser certaines de ses fonctions.
Pour accéder à ce module, tapez F12 ce qui ouvre la page des scripts.
Sur la page qui s’ouvre vous pouvez écrire un script selon une syntaxe très proche du langage Pascal, puisque le module est basé sur l’utilitaire Pascalscript de RemObjects. L’objectif de cette documentation n’est pas de faire un cours sur PascalScript. Voyez par exemple ce site sur Github si vous voulez approfondir cette question. Les exemples de script qui suivent ci-dessous peuvent être une inspiration pour les adapter à vos besoins. Mais attention, l’écriture de scripts est un vrai travail de programmation qui ne sera pas facile pour ceux qui n’ont aucune notion en la matière.
L’intérêt des scripts dans mes logiciels est qu’ils peuvent utiliser des procédures permettant de commander le logiciel. La liste de ces procédures est obtenue en tapant F1 ce qui ouvre la fenêtre des aides. Contrairement aux autres fenêtres de l’application, cette fenêtre peut rester ouverte en permanence, et peut être déplacée sur l’écran indépendamment de la fenêtre principale. On peut même la placer sur un second écran si on a un poste de travail qui en est pourvu.
Ces procédures apparaissent ici sous deux onglets (main, actions) qui en regroupent au total une vingtaine. Sélectionnons par exemple OpenFile (CTRL+O) sous l’onglet actions. Plusieurs informations sont alors affichées:
- Le nom de la procédure, par exemple OpenFile.
- Il est suivi par le raccourci clavier CTRL+O qui permet de l’appeler quand on utilise le logiciel. Ce raccourci ne sert pas pour écrire des scripts mais pour commander manuellement l’application.
- L’indice qui s’affiche quand la souris passe sur un composant qui actionne cette procédure. Il donne de manière synthétique l’action que réalise la procédure.
- La syntaxe de la procédure, notamment si elle utilise des variables, ici : procedure OpenFile(const aWidestring:widestring); Cette syntaxe montre, dans l’exemple, qu’il faut donner à la procedure un paramètre qui est un widestring. Ce sera bien sûr le nom complet du fichier à ouvrir, puisque vous avez compris à ce stade que OpenFile sert à ouvrir un fichier .mkv.
- La syntaxe du switch en mode ligne de commandes. Cela ne sert pas pour les scripts, mais pour pouvoir lancer l’application en mode ligne de commandes.
- Eventuellement une zone pouvant comprendre des commentaires. Voyez par exemple l’action SaveFolder pour en voir un exemple.
Dès lors l’usage dans le script en découle.
Exemple 1:
Notez que le script est insensible à la casse: on peut écrire aussi bien OpenFile que openfile. En outre chaque instruction est terminée par un point-virgule, ce qui n’étonnera pas les programmeurs sous Pascal.
Si vous cliquez sur le bouton Execute, alors le programme chargera la vidéo demandée (ici « La mort aux trousses ») et commencera tout de suite à l’analyser. Vous ne le voyez sans doute pas car la fenêtre du script cache la fenêtre principale. C’est pourquoi tapez tout de suite F12 à nouveau pour fermer la fenêtre du script.
L’intérêt de cet exemple est limité, mais cela devient un peu plus intéressant si on enchaîne plusieurs actions. Par exemple on peut demander à FixMKVGaps, d’ouvrir plusieurs fichiers et de les réparer chaque fois immédiatement s’ils contiennent des erreurs.
Exemple 2:
Cet exemple montre comment mettre une instruction par ligne. En outre, ici l’intérêt du script est évident, car on va ouvrir et corriger deux fichiers dans le même script, enchaînant toutes les opérations.
Si vous cliquez sur le bouton Execute l’application charge le fichier vidéo demandé dans openfile, il en commence l’analyse immédiatement, et quand celle-ci est terminée, s’il y a des gaps, il enchaîne automatiquement la réparation et produit un fichier réparé (en utilisant le dossier précisé dans les Réglages). Puis il continue le même processus avec le second fichier.
Là aussi pour le voir, il faut taper F12 de manière à masquer la page des scripts.
Exemple 3:
En fait, au lieu de taper F12 on peut utiliser une procédure de l’application qui a le même effet pour fermer la page des scripts. Elle s’appelle script, et figure sous l’onglet main dans la page d’Aide (F1). C’est d’ailleurs une bonne pratique de commencer tous ses scripts par l’appeler dès le début pour refermer la page des scripts et pouvoir suivre ce qui se passe dans l’interface de l’application. On pourra toujours retaper F12, une fois que tout sera fini si on veut voir, dans la zone du bas de la page des scripts, les messages émis par le compilateur du script, et pendant l’exécution.
La procédure script, comme un certain nombre d’autres, qui basculent entre un état Vrai ou Faux, a deux syntaxes: d’une part on peut l’employer seule, sans paramètre, alors elle inverse l’état existant: ici si la page de script est affichée, elle la masque, mais si celle-ci ne l’était pas, elle l’afficherait. D’autre part, on peut l’utiliser sous la forme setscript(True) ou setscript(False) qui impose l’état Vrai ou faux, indépendamment de celui qui était en cours.
On a demandé ensuite que la réparation s’engage directement après l’analyse, en ajoutant la commande enchainer(True). C’est une commande équivalente à cocher la case Enchaîner la réparation dans les Réglages. Cela permet d’économiser les commandes Fix, puisque la seule commande openfile lancera aussi la réparation.
Si on clique ici sur Execute, alors d’abord la fenêtre du script se ferme (puisqu’elle était ouverte, la procédure script la masque). Puis le premier fichier demandé est chargé, et quand son analyse est terminée, il se répare aussitôt. Puis le second fichier s’ouvre, est analysé et réparé. Pour l’anecdote, on a remis une commande script à la fin, pour revenir à la page des scripts, ce qui permet de vérifier si la compilation et l’exécution ont réussi.
Exemple 4:
Notre langage de scripts peut utiliser des conditions comme if… then… else…, des boucles comme while…end; ou aussi for i:=1 to do begin…end; Il y a aussi des fonctions spéciales pour parcourir les fichiers d’un dossier, notamment les trois fonctions findfirst, findnext, findclose. L’exemple 4 montre comment écrire un script qui peut analyser et réparer tous les fichiers .mkv contenus dans un dossier.
On définit ici d’abord le dossier source SourceFolder où se trouvent les fichiers .mkv à analyser et à réparer le cas échéant, puis le dossier destination DestFolder où seront logés les fichiers recréés. Notez comment on définit des constantes avec le mot-clé const.
Puis on définit une variable, SourceFile qui contiendra le nom du fichier en cours de traitement. Ce nom changera au fur et à mesure qu’on bouclera dans tous les fichiers .mkv du dossier source. C’est pourquoi il faut une variable.
Notez aussi que les déclarations comme const et var sont faites avant le begin qui commence les instructions du script, qui elles sont toutes entre begin et end.
On retrouve la procédure script pour masquer la page des scripts. Puis la commande enchainer ( True) qui permet d’enchaîner directement la réparation après l’analyse; suivi de SameFolder(False) qui indique qu’on ne veut pas créer les fichiers réparés dans le même dossier que l’original, mais dans un dossier qu’on spécifie un peu plus loin par SaveFolder(DestFolder) qui se réfère à une constante créée plus haut, en l’occurrence le dossier g:\fixed. On a aussi ajouté une fonction forcedirectories qui permet de créer le dossier désigné s’il n’existe pas, ainsi que tous ses sous-dossiers. C’est une précaution utile pour éviter des erreurs.
On appelle alors findfirst avec comme paramètres le dossier source à explorer, et le masque des fichiers recherchés, ici *.mkv. Tant que le nom de fichier renvoyé par findfirst et plus loin par findnext n’est pas vide, on ouvre le fichier renvoyé dans SourceFile, ce qui lance automatiquement l’analyse, et aussi la réparation puisqu’on a mis enchaîner à True.
Quand tout le travail sera fini, FixMKVgaps réactivera la fenêtre des scripts, ce qui vous permet de lire le résultat , en espérant que ce soit *** Compilation succeeded *** puis *** Succesfully Executed***. S’il y a des erreurs de compilation, il faut vérifier le texte du script où quelque chose doit clocher. Si l’exécution ne réussit pas, c’est que FixMKVGaps lui-même a rencontré une erreur, ou que mkvmerge en a rencontré une. En général, il vous dira alors ce qu’il faudrait vérifier.
Notez dans cet exemple 4 que la fenêtre de FixMKVGaps qui contient le texte du script a été agrandie en hauteur (comme on peut le faire de la plupart des fenêtres Windows), et que cela permet d’avoir ici le script complet. N’hésitez pas donc à élargir en hauteur ou largeur cette fenêtre pour mieux éditer le script.