60 votes

vérifier la durée des fichiers audio en ligne de commande

Je dois vérifier la durée d'un groupe de fichiers audio. Existe-t-il un moyen simple de le faire en ligne de commande Unix ?

> duration *

J'ai l'excellente application SoX qui a une option appelée stats qui génère un ensemble d'informations audio y compris la durée. Je cherche un moyen d'obtenir uniquement la durée. Je suis flexible sur le format de sortie, qui peut être n'importe quelle longueur d'échantillon, hh:mm:ss, ou secondes. C'est ce dernier que je préfère.

62voto

ted.strauss Points 804
soxi -D filename
soxi -D *

Soxi interroge les métadonnées des fichiers audio ; D est l'option de durée. Il supporte le globbing. Le grand frère de Soxi sox effectue un traitement audio en ligne de commande.

1 votes

J'utilise aussi soxi, mais il ne prend malheureusement pas en charge les m4a.

4 votes

Est-ce que c'est moi, ou est-ce qu'il ne prend même pas en charge le mp3 ? J'obtiens soxi FAIL formats: no handler for file extension 'mp3' . EDIT : Il s'est avéré que je devais sudo apt-get install libsox-fmt-mp3 .

3 votes

Il y a aussi soxi -d pour les heures, les minutes et les secondes

38voto

0xbadc0de Points 991
mp3info -p "%m:%02s\n" filename

vous donne la longueur du fichier spécifié en mm:ss (mm peut être supérieur à 59). Pour obtenir le nombre total de secondes dans le fichier, vous devez utiliser :

mp3info -p "%S\n" filename

Pour obtenir la longueur totale de tous les fichiers mp3 en quelques secondes, AWK peut vous aider :

mp3info -p "%S\n" *.mp3 | awk 'BEGIN { s = 0 }; { s = s + $1 }; END { print s }'

2 votes

Et l'intégrer dans une boucle for et le tour est joué, for file in *.mp3 ; do mp3info -p "%m:%s\n" $file ; done . Bonne chance à tous.

4 votes

Mp3info -p " %f %m:%s \n " *.mp3 fonctionne également - imprime le nom du fichier et la durée.

2 votes

Ne fonctionne que pour les fichiers mp3, pas pour les conteneurs wav ou ogg par exemple.

22voto

JellicleCat Points 4694
ffmpeg -i <audiofile> 2>&1 | grep Duration

3 votes

Vous pouvez également utiliser ffprobe qui accompagne ffmpeg et est conçu pour cela.

0 votes

Wow, quand il s'agit de fichiers médias, ffmpeg ne vous fait jamais défaut.

18voto

DoggoDougal Points 323

mediainfo vous renverra les millisecondes d'un fichier audio. En supposant que le répertoire actuel ne contienne que des fichiers audio, la formule suivante

mediainfo --Inform="Audio;%Duration%" "Miley Cyrus - Wrecking Ball.mp3"

Pour calculer la durée de tous les fichiers audio du répertoire local, ce gist aidera :

shopt -s nullglob
let playlist_duration_ms=0
for song_file in *.{mp3,ogg,m4a,flac,wav}; do
  playlist_duration_ms=$(expr $playlist_duration_ms + $(mediainfo --Inform="Audio;%Duration%" "$song_file"))
done
shopt -u nullglob

let playlist_duration_secs=$(expr $playlist_duration_ms / 1000)
let playlist_duration_mins=$(expr $playlist_duration_ms / 60000)
let playlist_duration_remaining_secs=$(expr $playlist_duration_secs - $(expr $playlist_duration_mins \* 60))

echo $playlist_duration_mins minutes, $playlist_duration_remaining_secs seconds

0 votes

Cet outil est excellent, il fonctionne également pour les fichiers ogg et est disponible dans les dépôts debian.

0 votes

Je pense que cette réponse nécessite le moins de ressources de la part de la machine qui l'exécute par rapport aux autres réponses.

1 votes

Pour moi, il n'imprime qu'une ligne vide.

13voto

cdosborn Points 1161

sur OSX

Imprime la longueur de chaque fichier audio dans le répertoire actuel :

afinfo * | awk '/estimated duration/ { print $3 }'

Inclure le chemin d'accès au fichier :

afinfo * | awk '/File:/ { song=$2 } /estimated duration/ { print song, $3 }'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X