lundi 9 mars 2009

Customiser VisualSubSync sans connaître Delphi

Ajouter quelques boutons sur l'interface, redimensionner et déplacer les éléments déjà présents, tout cela est facile même sans s'y connaître en programmation Delphi. Il suffit d'utiliser ResHack, un petit utilitaire permettant d'extraire, éditer, et recompiler certaines ressources des exécutables. Un peu d'observation, de logique, pas mal de copier-coller et d'essais, et bien sûr un peu de patience... rien d'effrayant pour les sous-titreurs, donc.

Petit exemple en image :

Les habitués verront aisément les différences avec la version officielle...

J'ai d'abord repositionné quelques "contrôles" (boutons ou autres éléments graphiques et fonctionnels de l'interface) par rapport à l'original. Notamment les boutons contrôlant le zoom de la waveform, et le compteur temps de la prévisualisation vidéo (à droite, tombant plus facilement sous le regard quand on lance la dite vidéo, avec une police légèrement plus grosse). Bon, question de préférences personnelles, c'est clair.

Ensuite, j'ai ajouté ajouté six boutons :
Car j'ai la flegme d'aller dans les menus ; et j'utilise déjà une floppée de raccourcis-clavier.

1 - afficher/cacher les keyframes (changement de scène)
2 - afficher/cacher le text-pipe.
3, 4, 5 - montrer (fenêtre vidéo) les images début(4)/ fin(5) d'affichage du sous-titre sélectionné, et celle relative à la position du curseur(4). Je me sers beaucoup de ces fonctions de VSS. (hop : et trois raccourcis clavier de moins)
6 - afficher/masquer la vidéo. (même avec un 28" j'aime admire la waveform dans toute sa splendeur)

Vous l'aurez compris, ces "ajouts" sont limités à la gestion de l'interface et ne lancent que des fonctions déjà définies par le programme. Donc, même si ça ne casse pas trois pattes à un canard, ça marche, ça rend service, et c'est assez fun. Accessoirement, cela pourrait donner l'envie à certains de franchir l'étape suivante, en étudiant vraiment quelques bases de Delphi histoire d'aller plus loin dans l'enrichissement de VSS.

La Méthode
1 - Télécharger l'utilitaire Ressource Hacker.

2 - Faire une copie de sauvegarde de l'exécutable VisualSubSync. ResHack ne fera qu'un backup... à chaque recompilation/sauvegarde, donc le backup lui-même pourrait être écrasé si vous faites plusieurs essais (plus que probable).

3 - lancer ResHack. MenuFile/Open, et choisissez l'exécutable visualsubsync.exe dans le répertoire où vous avez installé celui-ci.

4 - dans la colone de gauche, déployez le dossier RCData et, à nouveau, déployez TMAINFORM. Sélectionnez l'icône unique qu'il contient, "0". La fenêtre de droite affiche alors le script de création d'interface de VSS ; cf.screenshoot :

4b - Ne paniquez pas, vous n'êtes pas dans la matrice. Je le redis : la suite n'a rien de sorcier.

5 -
Ok, jetez un coup d'oeil : ce long script commence par définir les principales parties de l'interface, précisant ensuite la nature des contrôles, menus et boutons, et leur éventuelle action pour ceux qui sont cliquables. ces actions sont définies plus loin. Chaque nouvel élément est défini comme un objet, dont la nature est aussitôt précisée "Splitter"(d'interface), paneau(partie d'interface regroupant différent éléments, menu, bouton ou zone d'information. Exemple : utilisez la fonction recherche de ResHack (Ctrl+F), tapez: MemoTextPipe.
Le premier point du script ne nous intéresse pas vraiment ("object SplitterMemoTextPipe: TSplitter"), pressez F3 pour trouver la deuxième instance : "object MemoTextPipe: TTntRichEdit". Les lignes qui suivent définissent position et dimensions par défaut, police de caractère, en bref l'apparence de la zone éditable du text-pipe de VSS. un "end" referme la définition de cet élément. Pour la suite, changeons vraiment un autre élément.

6 - Pour un premier test, déplacer le compteur temps de la préview vidéo. Déroulez le script si vous avez la patience d'un moine boudhiste, sinon utilisez à nouveau la fonction recherche texte avec : "00:00:00.000" (sans les guillemets bien sûr). C'est un élément, pardon, un objet de type TPanel. :
object plCursorPos: TPanel
Left = 706
Top = 0
Width = 186
Height = 33
Hint = 'Cursor Position'
BevelOuter = bvLowered
Caption = '00:00:00.000'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -28
Font.Name = 'Arial'
Font.Style = [fsBold]
ParentFont = False
ParentShowHint = False
ShowHint = True
TabOrder = 1
object TntButton2: TTntButton
Left = 8
Top = 0
Width = 33
Height = 25
Caption = 'TntButton2'
TabOrder = 0
Visible = False
OnClick = TntButton2Click
end

Les parties qui nous intéressent : Left = 210 (sa deuxième ligne), et éventuellement Width et Height si vous souhaitez modifier la taille d'affichage (via : Font.Height). Mais pour l'instant contentons-nous d'une seule modif sur la position horizontale, en pixel; par exemple: Left = 750.

Note - pour se faciliter la vie :
Vous pouvez télécharger un autre petit utilitaire : Pixel Ruler.
générallement utile pour les webmasters et graphistes, cette règle virtuelle permet de prendre la mesure exacte de tout ce qui se trouve à l'écran. fonctionne avec toutes les applications.


7 - Si VSS est ouvert, fermez-le. Dans ResHack, cliquez sur le bouton "Compile Script", puis sauvegardez (conseil : vous pouvez très bien donnez un nom bidon, ex: VSScustom.exe, placé dans le même répertoire que VisualSubSync il n'y aura pas de problème pour vos tests). Lancez alors cet exécutable modifié et comparez. Evidemment, tout fonctionne comme à l'habitude.

Soyons un peu plus ambitieux : ajoutons un bouton. Il suffira de repomper joyeusement sur les éléments existant, de trouver une position en pixel qui convienne, et d'associer l'action voulue. Un exemple :

8 - Lancez une recherche sur "bttShowHideVideo". Vous devriez trouver la définition du bouton afficher/cacher la vidéo :
object bttShowHideVideo: TSpeedButton
Left = 337
Top = 0
Width = 23
Height = 25
Action = ActionShowHideVideo
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
20000000000000040000(...)}
ParentShowHint = False
ShowHint = True
end


9 -
Sélectionnez au curseur et copiez (ctrl+c) tout ce bloc, de "object..." à "end", inclus. Ouvrez le notepad de windows et collez-y (ctrl+v) ce gabarit de travail. Pour en faire votre nouveau bouton, qui permettra par exemple d'afficher/cacher les keyframes dans la waveform, il faut chercher dans ResHack la fonction correspondante. On sait que VSS permet cette fonction via le menu View--Show/HideSceneChange. Une recherche avec "SceneChange" donne plusieurs résultats. Faites F3 jusqu'à avoir la définition de cette action :
object ActionShowHideSceneChange: TTntAction
Tag = 1
Caption = 'Show/Hide scene change'
OnExecute = ActionShowHideSceneChangeExecute
end

Ayant le nom exact, repompons allègrement "ActionShowHideSceneChange" et modifions dans Notepad notre nouveau bouton. Par exemple, dans ma version les lignes modifiées sont :
object bttShowHideSceneChange: TSpeedButton
Left = 254
Top = 28
Width = 23
Height = 25
Action = ActionShowHideSceneChange

Choisissez évidemment une position Left/Top correspondant à un emplacement libre dans VSS.
Note : Pour changer l'icône, vous pouvez copier les données hexa "Glyph.Data" d'un autre bouton défini dans le script original, ou pas, carr ne pas en préciser pour certaines fonctions (showstartframe, par exemple) n'empêche pas forcément vss de se débrouiller pour trouver l'icône correspondant). Il y à sûrement d'autres méthodes, à explorer.

10 - Copiez ce nouveau bouton de NotePad vers le ResHack, en prenant simplement soin de le coller entre deux définitions (d'autres boutons, plutôt que n'importe-où tant qu'à faire, ce sera plus simple pour vous y retrouver plus tard), donc entre un "end" et un "objet" d'autres éléments. Sinon, ça ne marchera pas.

11 - Compilez le script, sauvegardez, testez. Voilà pour les exemples. Kawa et/ou clop(s) seront bien mérités pour continuer à expérimenter vos propres bidouilles.

- Crysta669.

1 commentaire:

Anonyme a dit…

Hello there. I tried to get your e-mail but I can’t find it. So I am writing here, if you excuse me. It is about the CPS autochecker that you created for Subtitle Workshop. I saw a post of yours saying that you were going to change the Ctrl+Space shortcut, as in Subtitle this is the most used shortcut. This post is a couple years old and I can’t find the update. Did you change it? Is there a way to get the version where the Ctrl+Space shortcut works on Subtitle Workshop? It would be of great use for me. Sincerely, Rodrigo Conti.