Outil en ligne de commande pour identifier les spécifications des fichiers audio


12

Je recherche un fichier audio équivalent à la commande d' identification d'ImageMagick .

Par exemple, avec identify, je peux obtenir de brèves informations sur un tas d'images:

% identify b*
banner1.jpg JPEG 134x614 134x614+0+0 8-bit DirectClass 38.4kb 
banner.jpg[1] JPEG 772x307 772x307+0+0 8-bit DirectClass 37.5kb 
bg2.jpg[2] JPEG 103x1500 103x1500+0+0 8-bit DirectClass 43kb 
bg_control_nav.png[3] PNG 13x39 13x39+0+0 8-bit DirectClass 1.73kb 
bg_direction_nav.png[4] PNG 104x52 104x52+0+0 8-bit DirectClass 3.3kb 

Je souhaite obtenir des informations similaires sur mes fichiers audio.

Mon objectif final est de créer un script pour parcourir toute ma bibliothèque mp3 et identifier ceux extraits à des débits inférieurs, puis utiliser ces données pour ré-extraire mes CD (ou acheter des versions de meilleure qualité sur Amazon ou iTunes).

Solutions pour OS X / Linux préférées aux solutions Windows


Et un autre: MediaInfo
slhck

Mediainfo est génial et possède une interface de ligne de commande.
Marc.2377

Intéressant mais une application graphique ne fonctionne pas pour ce besoin.
Doug Harris

Réponses:


10

Sur OS X, vous pouvez simplement utiliser mdlsou mdfind.

$ mdls 01\ Kindred.mp3 
kMDItemAlbum                   = "Kindred EP"
kMDItemAudioBitRate            = 320000
kMDItemAudioChannelCount       = 2
kMDItemAudioSampleRate         = 44100
kMDItemAudioTrackNumber        = 1
kMDItemAuthors                 = (
    Burial
)
kMDItemComment                 = "HDB059"
kMDItemContentCreationDate     = 2012-03-19 21:20:59 +0000
kMDItemContentModificationDate = 2012-06-04 16:07:09 +0000
kMDItemContentType             = "public.mp3"
kMDItemContentTypeTree         = (
    "public.mp3",
    "public.audio",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2012-04-02 19:49:07 +0000
kMDItemDisplayName             = "01 Kindred.mp3"
kMDItemDurationSeconds         = 686.08
kMDItemFSContentChangeDate     = 2012-06-04 16:07:09 +0000
kMDItemFSCreationDate          = 2012-03-19 21:20:59 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "01 Kindred.mp3"
kMDItemFSNodeCount             = 27457838
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 27457838
kMDItemFSTypeCode              = ""
kMDItemKind                    = "MP3 audio"
kMDItemLogicalSize             = 27457838
kMDItemMediaTypes              = (
    Sound
)
kMDItemMusicalGenre            = "Dubstep"
kMDItemPhysicalSize            = 27459584
kMDItemRecordingYear           = 2012
kMDItemTitle                   = "Kindred"
kMDItemTotalBitRate            = 320000

mdfind -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'


2
Votes pour toutes les réponses jusqu'à présent, mais celui-ci obtient la coche parce que (a) il est natif d'OS X et (b) utilise les informations de métadonnées Spotlight existantes et que la commande mdfind est très rapide.
Doug Harris

Combiner les deux et produire une liste de noms d'album avec des débits binaires inférieurs:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Doug Harris

8

Pour une sortie facile à analyser, essayez à ffprobe -show_format 2>/dev/nullpartir de FFmpeg.

Sous OS X, vous pouvez l'installer via Homebrew via brew install ffmpeg.

$ ffprobe * .mp3 -show_format 2> / dev / null
[FORMAT]
nom de fichier = 02. Salvadoro Dali.mp3
nb_streams = 2
format_name = mp3
format_long_name = Couche audio MPEG 2/3
start_time = 0.000000
durée = 300,254667
taille = 7206112
bit_rate = 191999
TAG: title = Salvadoro Dali
TAG: artiste = Siela
TAG: piste = 2/10
TAG: album = Dali
TAG: date = 2005
TAG: genre = rock gothique
TAG: replaygain_album_peak = 1.188815
TAG: replaygain_track_peak = 1.178607
TAG: replaygain_track_gain = -9,00 dB
TAG: replaygain_album_gain = -9.12 dB
TAG: album_artist = Siela
[/FORMAT]

Dans un script:

find -iname '*.mp3' | while read -r file; do
    bitrate=$(ffprobe "$file" -show_format 2>/dev/null |
              awk -F"=" '$1 == "bit_rate" {print $2}')
    if (( bitrate <= 128000 )); then
        echo "[$bitrate] $file"
    fi
done

5

EDIT: vient de trouver un programme Linux

Sous Linux, mp3info :

mp3info -p "%Q %L %v %o %r" test.mp3
output:
48000 III 1.000000 joint stereo

Je sais que vous voulez une solution Linux; cependant, par la façon dont vous avez posé votre question, il semble qu'une solution Windows ne soit pas complètement sortie ...

Sous Windows, tag.exe fera le travail.

Exemple:

C:\mp3>tag.exe "test.mp3"
Tag - Automatic Tag from filename
Copyright (c) 2002-2003 Case.  Minor additions by Neil Popham, 2004-2007
Version 2.0.52, Compiled 2007-05-04

C:\dl\test.mp3
Format:  MPEG 1 Layer 3, Joint Stereo
Details: 44100 Hz Stereo, 128 kbps, playtime 05:24
Tag:     ID3v2

Pour obtenir simplement le bitrate:

C:\mp3>tag.exe "test.mp3" 2>&1 | findstr /i "Details:"
Details: 44100 Hz Stereo, 128 kbps, playtime 05:24

4

Un utilitaire très simple est que sox
Mine a été préinstallé sur le système Linux.

 soxi auidofile.wav 

Production :

 Input File     : 'Yvette_Audin_F_70_7e.wav154.wav'
 Channels       : 2
 Sample Rate    : 44100
 Precision      : 24-bit
 Duration       : 00:00:10.01 = 441254 samples = 750.432 CDDA sectors
 File Size      : 2.65M
 Bit Rate       : 2.12M
 Sample Encoding: 24-bit Signed Integer PCM

quelque chose de très utile à ce sujet est qu'il m'a permis de convertir un canal stéréo 2 canaux en canal mono. J'en avais besoin pour former un modèle d'apprentissage automatique pour les fichiers audio.

EDIT: Méthode plus simple de conversion de l' audio 2 canaux en signal mono :

 from pydub import AudioSegment  
 song = AudioSegment.from_wav("01.wav")
 song = song.set_channels(1)
 song.export("01.wav", format='wav')

Gère toutes sortes de fichiers mais pas mp3 !
not2qubit

.mp3 peut être facilement converti en .wav, à l'aide de convertisseurs en ligne. Peut-être que matlab a quelques bibliothèques pour le faire. Ou vos fenêtres ont un convertisseur de son pour le même. peut-être le format d'usine ...
Priyank Pathak

Oui, mais ce n'est pas ce que le PO a demandé.
not2qubit

possible quittera ici pour une aide future.
Priyank Pathak

1

mp3info a été développé sous Linux, mais devrait fonctionner sur la plupart des variantes UN * X. ... MP3Info peut également afficher divers aspects techniques d'un fichier MP3, y compris la durée de lecture, le débit binaire, la fréquence d'échantillonnage et d'autres attributs dans un format de sortie prédéfini ou spécifiable par l'utilisateur.

ou

MP3 :: Info - Manipuler / récupérer des informations à partir de fichiers audio MP3

Peut-être

  perl -MMP3::Info \
       -e 'print ($_, ": ",MP3::Info->new($_)->bitrate, "\n") for (@ARGV)' *.mp3

(non testé)


1

ffprobe est votre ami (vous pouvez également utiliser avconv, mplayer; tous renvoient des informations sur les médias, mais ffprobe ne renvoie que les informations dont vous avez besoin)

Avec flux:

ffprobe http://96.127.183.74:8604/live

Retour

...
Stream #0:0: Audio: aac (HE-AACv2), 44100 Hz, stereo, fltp, 31 kb/s

Avec fichier local:

ffprobe some_file.mp3 

Retour

...
encoder         : LAME 64bits version 3.99.5
...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.