[R] Utilisation d'un shell

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

[R] Utilisation d'un shell

#1

Message par clark17 »

Bonjour à tous,

Pour un petit programme j'utilise la commande shell pour lancer ffmpeg avec des paramètres. Ca marche convenablement mais j'ai un petit souci. Tout d'abord voici le code:

Code : Tout sélectionner

#include <GDIPlus.au3>

;Variables
$repetition = 5
$attente = 1 * 1000 * 20
$nom_video = @HOUR & "h" & @MIN & "_" & @MDAY & "_" & @MON & "_" & @YEAR" & "mp4"

For $i = 001 To $repetition
    ;Télécharge en arrière plan
    Local $hDownload = InetGet("http://toto/map.jpg?0.314970187144354", "map-" & StringFormat("%03i", $i) & ".jpg", 1, 1)
    Do
        Sleep(250)
    Until InetGetInfo($hDownload, 2)
    InetClose($hDownload)
    $img1 = "map-" & StringFormat("%03i", $i) & ".jpg"  ; départ
    $img2 = "cmap-" & StringFormat("%03i", $i) & ".jpg"  ; arrivée
    _RognerImage($img1, $img2, 5, 24, 992, 938)
    FileDelete($img1)
    Sleep($attente)
Next

;Création de la vidéo avec FFmpeg
ShellExecute("ffmpeg.exe", "-f image2 -r 1 -i cmap-%03d.jpg -c:v libx264 -r 30 " & $nom_video)
ShellExecuteWait("ffmpeg.exe")

MsgBox(0, "", "Fin du script")


Func _RognerImage($imga, $imgb, $X, $Y, $W, $H)
    Local $hImage, $hClone
    _GDIPlus_Startup ()
    $hImage = _GDIPlus_ImageLoadFromFile ($imga)
    $hClone = _GDIPlus_BitmapCloneArea ($hImage, $X, $Y, $W, $H, $GDIP_PXF32RGB)
    _GDIPlus_ImageSaveToFile($hClone, $imgb)
    _GDIPlus_ImageDispose($hClone)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_ShutDown()
EndFunc
 
Comment faire pour éviter que la fenêtre shell se ferme toute seul? Parce que pour débugger c'est un peu chiant je n'ai pas le résultat du terminal. Y a une option pour laisser le terminal ouvert ou alors je dois passer par un batch?
Modifié en dernier par clark17 le jeu. 21 mars 2013 15:51, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Utilisation d'un shell

#2

Message par jguinch »

Salut
Plutôt que de lancer ffmpeg.exe directement, tu peux essayer de le lancer comme ça :

Code : Tout sélectionner

Run(@ComSpec & " /k ffmpeg.exe")
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

Re: [..] Utilisation d'un shell

#3

Message par clark17 »

Je comprend pas bien comment cela fonctionne, où dois-je mettre mes paramètres pour ffmpeg?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11818
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Utilisation d'un shell

#4

Message par Tlem »

Dans ce genre la :

Code : Tout sélectionner

$Params = "/param1 /param2 /param3 /param4"
Run(@ComSpec & " /k ffmpeg.exe" & " " & $Params)
PS : Pour ceux qui ce demanderaient pourquoi je n'ai pas fusionné l'espace avec la commande ffmpeg.exe, c'est tout simplement pour pas qu'il passe inaperçu ! :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

Re: [..] Utilisation d'un shell

#5

Message par clark17 »

Ah et ben oui tout simple quoi! Merci. pour infos voici le script que j'utilise désormais:

Code : Tout sélectionner

#include <GDIPlus.au3>

;Variables
$repetition = 120
$attente = 1 * 1000 * 20
$nom_video = @HOUR & "h" & @MIN & "_" & @MDAY & "_" & @MON & "_" & @YEAR & ".mp4"

MsgBox(0, "Lancement", "Lancement du script")

For $i = 001 To $repetition
    ;Télécharge en arrière plan
    Local $hDownload = InetGet("http://toto/map.jpg?0.314970187144354", "map-" & StringFormat("%03i", $i) & ".jpg", 1, 1)
    Do
        Sleep(250)
    Until InetGetInfo($hDownload, 2)
    InetClose($hDownload)
    $img1 = "map-" & StringFormat("%03i", $i) & ".jpg"  ; départ
    $img2 = "cmap-" & StringFormat("%03i", $i) & ".jpg"  ; arrivée
    _RognerImage($img1, $img2, 5, 24, 992, 938)
    Sleep($attente)
Next

;Création de la vidéo avec FFmpeg
MsgBox(0, "Encodage", "Lancement de l'encodage en x264")
RunWait(@ComSpec & " /k ffmpeg.exe -f image2 -r 1 -i cmap-%03d.jpg -c:v libx264 -r 30 " & $nom_video)

;On éfface les *.jpg
FileDelete("*.jpg")

MsgBox(0, "Quitter", "Fin du script")


Func _RognerImage($imga, $imgb, $X, $Y, $W, $H)
    Local $hImage, $hClone
    _GDIPlus_Startup ()
    $hImage = _GDIPlus_ImageLoadFromFile ($imga)
    $hClone = _GDIPlus_BitmapCloneArea ($hImage, $X, $Y, $W, $H, $GDIP_PXF32RGB)
    _GDIPlus_ImageSaveToFile($hClone, $imgb)
    _GDIPlus_ImageDispose($hClone)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_ShutDown()
EndFunc
 
Répondre