Befehlszeilentool zum Identifizieren von Audiodateispezifikationen


12

Ich suche nach einer Audiodatei, die dem Identifizierungsbefehl von ImageMagick entspricht .

Mit identifykann ich beispielsweise kurze Informationen zu einer Reihe von Bildern erhalten:

% 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 

Ich möchte ähnliche Informationen zu meinen Audiodateien erhalten.

Mein letztendliches Ziel ist es, ein Skript zu erstellen, das meine gesamte MP3-Bibliothek durchläuft und diejenigen identifiziert, die mit niedrigeren Bitraten gerippt wurden, und diese Daten dann zum erneuten Rippen meiner CDs zu verwenden (oder bessere Versionen von Amazon oder iTunes zu kaufen).

Lösungen für OS X / Linux werden Windows-Lösungen vorgezogen


Und noch eine: MediaInfo
slhck

Mediainfo ist großartig und hat eine Kommandozeilenschnittstelle.
März 2377

Interessant, aber eine GUI-App funktioniert für diesen Bedarf nicht.
Doug Harris

Antworten:


10

Unter OS X können Sie einfach mdlsoder verwenden 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
Bisherige Upvotes für alle Antworten, aber diese erhalten das Häkchen, weil (a) sie für OS X nativ sind und (b) vorhandene Spotlight-Metadateninformationen verwenden und dieser Befehl mdfind schnell verrückt ist.
Doug Harris

Kombinieren Sie beide und erstellen Sie eine Liste von Albumnamen mit minderwertigen Bitraten:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Doug Harris

8

Versuchen Sie es mit ffprobe -show_format 2>/dev/nullFFmpeg , um die Ausgabe einfach zu analysieren .

Unter OS X können Sie es über Homebrew über installieren brew install ffmpeg.

$ ffprobe * .mp3 -show_format 2> / dev / null
[FORMAT]
Dateiname = 02. Salvadoro Dali.mp3
nb_streams = 2
format_name = mp3
format_long_name = MPEG-Audioebene 2/3
start_time = 0,000000
Dauer = 300.254667
Größe = 7206112
bit_rate = 191999
TAG: Titel = Salvadoro Dali
TAG: Künstler = Siela
TAG: Spur = 2/10
TAG: Album = Dali
TAG: Datum = 2005
TAG: Genre = Gothic Rock
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]

In einem Skript:

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: habe gerade ein Linux-Programm gefunden

Unter Linux mp3info :

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

Ich weiß, dass Sie eine Linux-Lösung wollen. Übrigens, wie Sie Ihre Frage gestellt haben, klingt es so, als ob eine Windows-Lösung nicht vollständig aus ist ...

Unter Windows erledigt tag.exe die Aufgabe.

Beispiel:

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

Um nur die Bitrate zu erhalten:

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

4

Ein sehr einfaches Dienstprogramm ist sox
Mine wurde auf dem Linux-System vorinstalliert.

 soxi auidofile.wav 

Ausgabe :

 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

etwas sehr Nützliches daran war, dass ich Stereo-2-Kanal in Mono-Kanal konvertieren konnte. Ich brauchte es, um ein Modell für maschinelles Lernen für Audiodateien zu trainieren.

BEARBEITEN: Einfachere Methode zur Umwandlung von 2-Kanal-Audio in Monosignal :

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

Verarbeitet alle Arten von Dateien, aber nicht MP3 !
not2qubit

.mp3 kann mit Online-Konvertern einfach in .wav konvertiert werden. Vielleicht hat Matlab einige Bibliotheken, um dies zu tun. Oder Ihr Windows hat einen Soundkonverter für das gleiche. vielleicht
Fabrikformat

Ja, aber das hat das OP nicht verlangt.
not2qubit

möglich wird hier für zukünftige Hilfe verlassen.
Priyank Pathak

1

mp3info wurde unter Linux entwickelt, sollte aber auf den meisten UN * X-Varianten funktionieren. ... MP3Info kann auch verschiedene technische Aspekte einer MP3-Datei anzeigen, einschließlich Wiedergabezeit, Bitrate, Abtastfrequenz und anderer Attribute in einem vordefinierten oder benutzerdefinierbaren Ausgabeformat.

oder

MP3 :: Info - Informationen aus MP3-Audiodateien bearbeiten / abrufen

Vielleicht

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

(ungetestet)


1

ffprobe ist dein Freund (du kannst auch avconv, mplayer verwenden; alle geben Medieninformationen zurück, aber ffprobe gibt nur die Informationen zurück, die du brauchst)

Mit Stream:

ffprobe http://96.127.183.74:8604/live

Kehrt zurück

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

Mit lokaler Datei:

ffprobe some_file.mp3 

Kehrt zurück

...
encoder         : LAME 64bits version 3.99.5
...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.