Bonjour,
Je ne sait pas d'ou peu venir une solution ( de Perl ? de Gtk ? de bash ?.. ) donc j'ai fini par poster ce message ici. J'espere avoir choisi le forum le plus adapté.
Bon, je vous expose ma situation et mon probleme (ps: je débute Perl)
Avec des mots:
Je fait une mini-GUI pour mencoder pour mon papa. Pour ce faire, je lance la commande mencoder dans perl, et j'en récupère la sortie pour l'examiner et en retirer l'avancement en pourcentage de l'encodage, ceci afin de faire avancer une barre de progression Gtk2::ProgressBar.
[EDIT : ] je sai pas si ça va être plus clair ou si ça empire :aie: , mais le but c'est d'être plus clair. j'ai fait un super croquis de la mort pour expliquer:
Avec du code ( très largement épuré )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 # La commande de mencoder my $cmd = "nice -19 mencoder " ."-ovc xvid -xvidencopts fixed_quant\=$videoBitrate " ."-oac mp3lame -lameopts abr\=$audioBitrate " ."\"$inpFile\" -o \"".$outDir."/".$outFile."\""; # transforme la ligne ou y'a le % qui change en plusieurs lignes pour utiliser avec <> my $c = "$cmd | tr '\\r' '\\n' | grep 'Pos:' | "; # $progressBar est le widget Gtk2::progressBar Gtk2->grab_add($progressBar); open (COMMAND,$c); select COMMAND; $|=1; # Bar de progression while (<COMMAND>) { # je récupere le % dans la ligne sortie de mencoder $_ =~ /\(((\s|[0-9])[0-9])\%\)/; my $n = $1/100.; # Si le % a changé if (!($n==$percent)) { $percent = $n; $progressBar->set_fraction($n); $progressBar->set_text($1.'%'); # je rend la main a Gtk2 le temps qu'il mette a jour la barre Gtk2->main_iteration_do(TRUE); } } $progressBar->set_fraction(1.); $progressBar->set_text('Termine'); Gtk2->grab_remove($progressBar);
Probleme
Sur des petites vidéo, aucun probleme. Ca marche niquel.
Sur des grosses vidéo (DV, genre +1Mb/s) mencoder encode sans probleme, mais il ne laisse aucune place à Gtk2 pour mettre a jour la barre de progression qui du coup passe de 0 à 100% quasiment d'un coup une fois l'encodage terminé.
J'ai bien éssayé de foutre un "nice -19" devant la commande de mencoder, mais rien n'y fait.
Une idée ? une Piste ?
PS: Les fork() seraient-ils une solution ? ( mais ça a l'air un peu plus lourd a programmer .. )
Merci par avance.
Partager