Stabilisation vidéo, execution d'une commande pour chaque fichier d'un dossier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
arnaudluti
Niveau 1
Niveau 1
Messages : 2
Enregistré le : ven. 11 mai 2018 09:53
Status : Hors ligne

Stabilisation vidéo, execution d'une commande pour chaque fichier d'un dossier

#1

Message par arnaudluti » ven. 11 mai 2018 10:19

Bonjour à tous!

Je souhaite créer un script simple (du moins, qui me parait simple!) pour automatiser le traitement de vidéos, à savoir la stabilisation logicielle.

Celle-ci est gérée par un exécutable autonome de la suite logicielle FILMORA "VideoStabilizer.exe"
Je pensais que je pourrais gérer l'affaire avec un simple batch, sauf qu'on ne peut spécifier d'arguments en ligne de commande... le GUI du logiciel s'ouvre systématiquement, sachant que les deux seules actions à effectuer dessus est un clic bouton sur "STABILIZE" et "SAVE" ...

Je me suis donc dit > AUTOIT!
Je n'ai aucune expérience dans ce language, mais j'ai un collègue qui l'utilisait pour automatiser des actions sur l'interface d'un ERP, et ça m'a paru bien judicieux pour mon cas!

Donc l'idée, serait d'appeler l'exécutable, avec comme argument le chemin d'accès d'une vidéo. Donc j'imagine utiliser un tableau pour référencer les fichiers du dossier ? Et une boucle pour parcourir ce tableau et lancer la ligne de commande VideoStabilizer.exe "Chemin_de_la_video1" ?
Sachant qu'une fois la ligne de commande exécutée, le GUI du stabiliseur s'ouvre, il faut appuyer sur "Stabilize" > alors une petite fenêtre de chargement apparaît, après disparition de celle-ci il faut alors cliquer sur "Save". Une fois l'enregistrement terminé (nouvelle fenêtre de chargement) , le GUI se ferme tout seul.

J'avais pensé à ça pour manipuler le GUI une fois ouvert;

Code : Tout sélectionner

;Lance le stabiliseur
ShellExecute("C:\VideoStablizer.exe") ; sachant qu'il faut mettre en argument de cette commande la variable(?) contenant le chemin vers chaque vidéo... 

WinWaitActive("Wondershare Video Stabilization")
Send ("{TAB}")
Send ("{TAB}")
Send ("{TAB}")
Send ("{TAB}")
Send ("{TAB}")
Send ("{ENTER}");bouton "stabilize"

;à ce moment la fenêtre s'affiche, donc la fenêtre "wondershare video stabilization" n'est plus active)

WinWaitActive("Wondershare Video Stabilization");donc on attend qu'elle le redevienne
Send ("{TAB}")
Send ("{TAB}")
Send ("{TAB}")
Send ("{TAB}")
Send ("{TAB}")
Send ("{ENTER}");bouton "save"


Je sollicite donc votre aide pour pouvoir spécifier une variable et alimenter cette boucle ...
J'avoue que je suis un peu perdu, j'ai tenté de parcourir les scripts existants pour trouver quelque chose qui y ressemble, en vain. Si vous en avez je suis néanmoins preneur!!!

Merci beaucoup d'avance!
Arnaud

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1732
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

Re: Stabilisation vidéo, execution d'une commande pour chaque fichier d'un dossier

#2

Message par TommyDDR » ven. 11 mai 2018 11:32

Je ne sais pas si vous êtes dans l'optique d'apprendre ou qu'on vous donne un script tout fait donc je pars sur la 1ere hypothèse :

Regardez l'aide (Touche F1 quand le curseur est sur la fonction) de ShellExecute, vous devriez trouver l'emplacement pour y mettre votre argument.
Pour ce qui est d'un traitement de masse, vous pouvez mettre les noms des fichiers dans un tableau et boucler sur celui-ci.
Voici un exemple de script utilisant et bouclant sur un tableau :
Global $tableau = ["c:\fichier1.avi", "c:\fichier2.avi", "c:\fichier3.avi", "c:\fichier4.avi"]

For $i = 0 To UBound($tableau, 1) - 1
        MsgBox(0, "", $tableau[$i])
Next
Et pour gagner de la place dans votre code :
Send("{TAB 5}")
correspond à :
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

arnaudluti
Niveau 1
Niveau 1
Messages : 2
Enregistré le : ven. 11 mai 2018 09:53
Status : Hors ligne

Re: Stabilisation vidéo, execution d'une commande pour chaque fichier d'un dossier

#3

Message par arnaudluti » ven. 11 mai 2018 13:07

Bonjour,

Merci pour votre réponse.

Je suis dans l'optique d'apprendre, mais je fais partie de ces gens qui apprennent par le visuel, et moins par la lecture attentive de 30 pages de procédure détaillée quand ils veulent faire une chose simple :wink:

Donc j'ai bien lu la syntaxe de ShellExecute, la n'est pas mon problème, la syntaxe complète de la ligne de commande devrait ressemble à ça...

Code : Tout sélectionner

ShellExecute c:\videostabilizer.exe $file_to_stabilize
Le truc, c'est alimenter et mettre à jour cette variable au fil des stabilisations...

Pour créer et remplir le tableau avec une sélection de fichiers (j'ai plus de 400 vidéos), j'avais trouvé cette fonction dans un autre script;

Code : Tout sélectionner

$Dossier_a_scanner = FileOpenDialog("Selectionnez les videos à stabiliser (Touche CTRL pour une selection multiple)", @ScriptDir,"Tous types (*.*)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)

$tableau_liste_fichiers = StringSplit($Dossier_a_scanner,"|")
For $i=0 to UBound($tableau_liste_fichiers)-1 ; si selection multiple
                $fichier_en_cours = $tableau_liste_fichiers[$i]
			     MsgBox(0, "", $teableau_liste_fichiers[$i])
        Next
EndIf
Est-elle correcte? J'y ai ajoute votre "MsgBox(0, "", $teableau_liste_fichiers[$i])", c'est censé afficher le tableau j'imagine?

Et du coup, comment dire à la stabilisation de prendre comme argument de la ligne de commande, successivement toutes les lignes du tableau ?

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1732
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

Re: Stabilisation vidéo, execution d'une commande pour chaque fichier d'un dossier

#4

Message par TommyDDR » sam. 12 mai 2018 12:09

En ajoutant les parenthèses et les virgules ça doit donner :
ShellExecute("c:\videostabilizer.exe", $file_to_stabilize)
Avec le code complet et commenté :
#include <FileConstants.au3>

;on récupère une chaine avec des séparateurs dont le 1er élément le dossier selectionné et les éléments suivants sont les noms des fichiers
Local $Dossier_a_scanner = FileOpenDialog("Selectionnez les videos à stabiliser (Touche CTRL pour une selection multiple)", @ScriptDir,"Tous types (*.*)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)

If(Not(@error)) Then ;Si des éléments ont été sélectionnés
        Local $tableau_liste_fichiers = StringSplit($Dossier_a_scanner, "|", 3) ;On découpe la chaine avec le séparateur, "3" signifie qu'on ne veut pas la taille du tableau dans la case 0 ET que le séparateur doit être entier (utile quand le séparateur a + d'un caractère)
        Local $nbElements = UBound($tableau_liste_fichiers, 1) - 1
        Local $dossier = $tableau_liste_fichiers[0] ;On récupère le nom du dossier dans lequel les fichiers ont été choisis
        For $i = 1 to $nbElements ;On démarre à 1 car comme vu plus haut, la case 0 possède le nom du dossier, ici on ne veut que les fichiers
                $file_to_stabilize = $dossier & "\" & $tableau_liste_fichiers[$i] ;On créé une variable qui contient le nom du dossier suivi du nom du fichier
                ConsoleWrite("Stabilisation de : " & $file_to_stabilize & @CRLF) ;On l'affiche dans la console
                ShellExecute("c:\videostabilizer.exe", $file_to_stabilize) ;On lance videostabilizer.exe avec le nom du fichier en paramètre
        Next
EndIf
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Répondre