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 :

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;
	}
}
Qui me permet de convertir des minutes en jours, heures minutes.
Je l'appelle dans mon script de cette mannière :

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";
			}
		}
	}
Voilà ce que ca donne dans mon shell :

Temps restant : 00 jour(s), 00 heure(s) et 58 minute(s), 0% terminé, Vitesse : 21.88 fps
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.
Par exemple si jours = 0 et heures = 0 alors :

Temps restant : 58 minute(s), 0% terminé, Vitesse : 21.88 fps
Merci d'avance
A noter que j'avais déjà essayer avec des if / elsif mais c'est un joli bordel


Jjeje007