#1 Le 05/08/2010, à 14:25
- shamanyan
[RESOLU] Recup. la duree precise d'un fichier son en bash
Bonjour,
Je cherche un moyen pour récupérer la durée précise (en milliseconde) d'un fichier audio en bash.
Pour l'instant je le fais avec la ligne suivante:
duree=$(ffmpeg -i "morceau.m4a" 2>&1 | grep Duration | cut -c13-23);
Mais j'obtiens un résultat assez peu précis : 00:01:09.21 par exemple.
J'ai bien pensé à transformer le tout en ms mais je suis loin de la véritable valeur.
L'idéal serait que la commande marche pour plusieurs format de son (mp3 et m4a minimum )
Je suis débutant (et motivé), aussi j'apprécierais les explications de la commande
Merci d'avance
Sham.
Dernière modification par shamanyan (Le 16/08/2010, à 14:57)
Hors ligne
#2 Le 05/08/2010, à 15:03
- iuchiban
Re : [RESOLU] Recup. la duree precise d'un fichier son en bash
ffmpeg -i "morceau.m4a" : affiche les info du fichier
| grep Duration : n'affiche que la ligne contenant la durée
| cut -c13-23); prends les caractères 13 à 23 de la ligne Duration
duree=$([...]) : affecte le résultat des commandes passées entre ( ) à durée
A partir de ce que tu as, tu peux transformer duree en ms par la commande suivante :
heure=$(echo $duree | cut -d":" -f1)
minute=$(echo $duree | cut -d":" -f2)
seconde=$(echo $duree | cut -d":" -f3 | cut -d"." -f1)
milli=$(echo $duree | cut -d":" -f3 | cut -d"." -f2)
total=$(($heure*3600000+$minute*60000+$seconde*1000+$milli*10))
Je fais milli*10 car s'il n'affiche que 2 chiffres après le ., ce sont des dizaines de millisecondes.
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#3 Le 06/08/2010, à 10:27
- shamanyan
Re : [RESOLU] Recup. la duree precise d'un fichier son en bash
Merci pour t'a réponse.
Comme je le disais, je connais cette méthode mais elle n'est pas suffisamment précise:(, je m'explique :
Je travail sur un script pour configurer des sonneries de téléphone automatiquement.
Dans le fichier de config, je dois donner le temps en ms, or avec la méthode ffmpeg etc...
j'obtiens pour un morceau : 20630, alors que pour le même morceau dans le fichier issu du logiciel, j'ai 20574:/.
Dans le post suivant : http://forum.ubuntu-fr.org/viewtopic.php?pid=3452566
l'auteur MAO-40 dit "...durée du fichier audio en millisecondes (y'a une ligne de commande qui permet d'avoir ce chiffre avec précision, mais je ne m'en souviens plus..."
je cherche donc cette fameuse commande ou n'importe quelle autre pouvant me donner plus de précision mais surtout en ligne de commande pour l'inclure dans mon script.
Merci d'avance.
Hors ligne
#4 Le 06/08/2010, à 15:08
- twocats
Re : [RESOLU] Recup. la duree precise d'un fichier son en bash
hachoir-metadata fichier.mp3 | grep D
donne (par exemple) :
- Duration: 4 min 10 sec 462 ms
Après tu peux travailler avec.
La réponse est 42
Hors ligne
#5 Le 06/08/2010, à 21:31
- shamanyan
Re : [RESOLU] Recup. la duree precise d'un fichier son en bash
Merci bcp !
C'est vrai que cette méthode est plus précise...mais le chiffre et toujours différent !!
Pour l'heure je pars en vacances ! Mais je vais tester pour connaitre l'incidence qu'aurait un chiffre approximatif et aussi complétement faux.
Je vous tiens informé des que c'est fait et évidemment, je mettrais mon script en ligne pour ceux que ça intéresse!
y.
ps. pour Towcats : Vu ta signature, j'espère que tu as ta serviette !!
Hors ligne
#6 Le 16/08/2010, à 14:51
- shamanyan
Re : [RESOLU] Recup. la duree precise d'un fichier son en bash
Me revoilou ! bronzé et tout
Bon alors j'ai fait quelques tests, et en voici les résultats:
L'approximation de la durée suffit à l'iPhone ... moi et mon "perfectionnisme" !!!!
La balise <Total Time> ne sert pas pour la lecture de la sonnerie mais seulement lors du réglage du volume (cf. sujet de MAO-40).
Merci pour votre aide.
ps: Le script est là -> http://forum.ubuntu-fr.org/viewtopic.php?id=412665
Dernière modification par shamanyan (Le 16/08/2010, à 15:28)
Hors ligne