Salut,
Désolé pour le titre mais je sais pas trop comment condenser ça
Bref, voilà ce que j'aimerais faire.
J'ai cette fonction :
Qui me permet de convertir des minutes en jours, heures minutes.
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 sub M2DHM { my $minutes = shift; chomp $minutes; # Si les minutes retournées par mencoder sont égales à 0, alors on retourne 'estimation en cours' if ( $minutes eq 0 ) { return ( sprintf 'Estimation en cours'); } # Si c'est pas égal à 0, alors calcul else { my $jours = int($minutes/1440); $minutes -= $jours * 1440; my $hours = int($minutes/60); $minutes -= $hours * 60; # TODO : n'afficher que ce qui est différent de zero return sprintf '%02d jour(s), %02d heure(s) et %02d minute(s)', $jours, $hours, $minutes; } }
Je l'appelle dans mon script de cette mannière :
Voilà ce que ca donne dans mon shell :
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 my $video_encod = new IO::Pipe(); $video_encod->reader("mencoder -nosound -dvd-device /home/jerome/VIDEO_TS dvd://1 -vf crop=720:576:0:0 -of rawvideo -ovc x264 -x264encopts bitrate=1000:pass=1:subq=4:8x8dct:me=dia:frameref=5:bframes=2:b_pyramid:weight_b:direct_pred=auto:partitions=all:qcomp=0.75:ip_factor=1.10:pb_factor=1.40 -o /dev/null"); { local $/ = "\r"; my $runtime; while( defined( my $line = $video_encod->getline ) ) { # Pour info (pourcentage) $1 = '((\s{0,1}\d+%)\)', (fps) $2 = '([\d\.]+s)' et (temps restant) $3 = '(\d+)' # Ligne de mencoder lors du lancement : # Pos: 0.0s 1f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0] if ( $line =~ m/Pos:\s{0,3}?[\d\.]+s\s{0,6}?\d+f\s{1}?\((\s{0,1}\d+%)\)\s{0,2}?([\d\.]+)fps\s{1}?Trem:\s{0,3}?(\d+)min.*$/ ) { $runtime = M2DHM($3); # Utilisation de la fonction calcul m > j:h:m print " Temps restant : $runtime, $1 terminé, Vitesse : $2 fps\r"; } else { print " Estimation en cours ...\r"; } } }
J'aimerais un petit coup de main pour que la fonction ne retourne pas les jours si ceux-ci sont égales à 0 et ainsi de suite.Temps restant : 00 jour(s), 00 heure(s) et 58 minute(s), 0% terminé, Vitesse : 21.88 fps
Par exemple si jours = 0 et heures = 0 alors :
Merci d'avanceTemps restant : 58 minute(s), 0% terminé, Vitesse : 21.88 fps
A noter que j'avais déjà essayer avec des if / elsif mais c'est un joli bordel
Jjeje007
Partager