Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/05/2011, à 01:51

Hizoka

[Resolu] additionner des durées

Bonsoir,

je cherche un moyen simple pour additionner des temps, ex :
00:01:56
01:54:22
....

pour que cela me calcul le total (en respectant la limite de 59mins et 59sec évidement...)

alors il est possible de séparé  chaque durée en heures, minutes, secondes d'additionner chaque element de le diviser par 60 (min et sec) et co....

mais existe-t-il quelque chose de plus simple ?

Mon but ?
afficher la durée de film disponible dans un dossier en passant par ffmpeg.
alors s'il existe quelque chose du genre, je prends aussi smile

apres des tests rapides :

unset temps heure min sec heure_total min_total sec_total reste_sec reste_min
for i in *
do
temps=$(ffmpeg -i "${i}" 2>&1 | sed -n '/.*Duration/ s/.*Duration: \(.*\), start.*/\1/p')
[[ -z ${temps} ]] && continue
heure=${temps%%:*}
min=${temps%:*} min=${min#*:}
sec=${temps##*:} sec=${sec%.*}

heure_total=$((${heure_total:-0} + ${heure}))
min_total=$((${min_total:-0} + ${min}))
sec_total=$((${sec_total:-0} + ${sec}))

done

# Nombre de secondes
reste_sec=$((${sec_total}%60))

# Nombre de minutes
reste_min=$((${min_total}%60))

# Ajout des minutes formées par les secondes aux minutes
min_total=$(((${reste_min}/60) + ${min_total}))

# Ajout des heures formées par les minutes aux heures
heure_total=$((${heure_total} + (${min_total}/60)))

echo "Durée totale : ${heure_total} heures et ${reste_min} minutes et ${reste_sec} secondes"

mais ca me parait un chouille compliqué pour ça...

Dernière modification par Hizoka (Le 09/05/2011, à 16:45)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 09/05/2011, à 06:30

FRUiT

Re : [Resolu] additionner des durées

Bon  là c'est une soustraction mais le principe est le même,

http://forum.kubuntu-fr.org/viewtopic.p … 1#p3901101

Et aussi :

http://forum.kubuntu-fr.org/viewtopic.p … 9#p3986949


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#3 Le 09/05/2011, à 07:10

Hizoka

Re : [Resolu] additionner des durées

ouais mais là, du coup, il faut que je convertisse les temps en secondes...pas forcement plus pratique...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 09/05/2011, à 07:41

FRUiT

Re : [Resolu] additionner des durées

Plus pratique je sais pas, c'est peut-être possible de récupérer les temps directement en secondes, mais en tout cas, moins de lignes que ton bout de code surement, non ?


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#5 Le 09/05/2011, à 13:23

twocats

Re : [Resolu] additionner des durées

SECS=$(mplayer -frames 0 -identify "${i}" 2>/dev/null| awk 'BEGIN {FS="="} /ID_L/ {sub(/\./, "="); print $2}')
HH=$(( SECS / 3600 ))
MM=$(( ( SECS / 60 ) % 60 ))
SS=$(( SECS % 60 ))
printf "%02d:%02d:%02d " $HH $MM $SS

La réponse est 42

Hors ligne

#6 Le 09/05/2011, à 15:04

FRUiT

Re : [Resolu] additionner des durées

twocats a écrit :
HH=$(( SECS / 3600 ))
MM=$(( ( SECS / 60 ) % 60 ))
SS=$(( SECS % 60 ))
printf "%02d:%02d:%02d " $HH $MM $SS

=

date -u -d "@$SECS" +'%T'

Cf les liens au dessus smile

Dernière modification par FRUiT (Le 09/05/2011, à 15:23)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#7 Le 09/05/2011, à 15:31

FRUiT

Re : [Resolu] additionner des durées

Ce qui donnerait en gros :

SECS=0
for i in *; do
    SECS=$(($(mplayer -frames 0 -identify "${i}" 2>/dev/null| awk -F'=' '/ID_L/ {sub(/\./, "="); print $2}')+$SECS))
done
[ $SECS -ge 86400 ] && TOT=$(date -u -d "@$SECS" +'(%d) %T') || TOT=$(date -u -d "@$SECS" +'%T')

Dernière modification par FRUiT (Le 09/05/2011, à 17:07)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#8 Le 09/05/2011, à 16:45

Hizoka

Re : [Resolu] additionner des durées

Merci, c'est en effet plus simple (même si j'ai toujours du mal avec awk), mais il y a 2 erreurs smile
- Il manque une " ) " pour la récupération de SECS.
- %SECS -ge 86400 => $SECS -ge 86400

ce qui donne :

for i in *; do
    SECS=$(($(mplayer -frames 0 -identify "${i}" 2>/dev/null| awk -F'=' '/ID_L/ {sub(/\./, "="); print $2}')+${SECS:-0}))
done
[ ${SECS} -ge 86400 ] && TOT=$(date -u -d "@${SECS}" +'(%d) %T') || TOT=$(date -u -d "@${SECS}" +'%T')

il fallait le savoir que ID_LENGTH valait le temps en secondes...

merci à vous !


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 09/05/2011, à 17:06

FRUiT

Re : [Resolu] additionner des durées

Oups dsl pour les erreurs je pouvais pas faire de C/C...

Je corrige mon message.


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#10 Le 09/05/2011, à 18:15

twocats

Re : [Resolu] additionner des durées

À propos de :

awk -F'='

Je rappel ce que dit 'man awk' :

BOGUES
       L'option  -F  n'est  pas nécessaire étant donné la fonctionnalité d'affectation de variables en ligne de commandes ; elle n'est maintenue que pour assurer une
       compatibilité ascendante.

       Les programmes syntaxiquement invalides d'un seul caractère tendent à faire déborder la pile de l'analyseur syntaxique, générant ainsi un message  plutôt  in‐
       utile. De tels programmes sont contre toute attente difficiles à diagnostiquer dans le cas le plus général, et l'effort nécessaire pour les détecter n'en vaut
       pas vraiment la peine.

C'est pourquoi je mets un bloc BEGIN.


La réponse est 42

Hors ligne

#11 Le 09/05/2011, à 19:42

FRUiT

Re : [Resolu] additionner des durées

J'avais jamais prêté attention à ce passage, merci de l'info, je note.

Je vois pas trop ce que c'est ces "Syntactically  invalid  single  character  programs"... En as-tu une idée toi ?


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#12 Le 10/05/2011, à 18:05

Hizoka

Re : [Resolu] additionner des durées

mais en y reflechissant ça ne repond pas totalement à la question de base qui était de calculer des durées heure:min:sec smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#13 Le 10/05/2011, à 19:38

Postmortem

Re : [Resolu] additionner des durées

Salut à tous !
Je me permet une petite question en passant :

FRUiT a écrit :
date -u -d "@$SECS" +'%T'

D'où sort le @ dans << date -u -d "@$SECS" +'%T' >> ??
J'ai cherché dans "man date" et ça n'en cause pas... ou alors j'ai pas les yeux en face des trous !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#14 Le 10/05/2011, à 21:22

FRUiT

Re : [Resolu] additionner des durées

Apparemment ça sert à indiquer que l'unité du nombre suivant est la seconde :

> date -u -d "@300" +'%T'
00:05:00
> date -u -d "300" +'%T'
03:00:00
> date -u -d "0020" +'%T'
00:20:00
> date -u -d "330" +'%T'
03:30:00

Sinon j'avoue que moi j'ai bêtement recopié sur Totor sans trop y réfléchir.

Et pour les « » c'est alt-GR+w et alt-GR+x ^^

Dernière modification par FRUiT (Le 10/05/2011, à 21:27)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#15 Le 10/05/2011, à 22:54

aduxas

Re : [Resolu] additionner des durées

info coreutils 'date invocation'
coreutils a écrit :

27.8 Seconds since the Epoch
============================

If you precede a number with `@', it represents an internal time stamp
as a count of seconds.  The number can contain an internal decimal
point (either `.' or `,'); any excess precision not supported by the
internal representation is truncated toward minus infinity.  Such a
number cannot be combined with any other date item, as it specifies a
complete time stamp.

Hors ligne

#16 Le 11/05/2011, à 12:36

Postmortem

Re : [Resolu] additionner des durées

Merci à vous !
J'avais bien regardé dans « info coreutils 'date invocation' » mais dans ma version, pas de trace du « @ » !

EDIT :
Ah si, ça en cause !

Or if you do not mind depending on the `@' feature present since
     coreutils 5.3.0, you could shorten this to:

          date -d @946684800 +"%F %T %z"
          1999-12-31 19:00:00 -0500

RE-EDIT : Sous Natty, c'est au paragraphe 28.8 que ça parle de « Seconds since the Epoch »

Dernière modification par Postmortem (Le 11/05/2011, à 12:50)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne