Herramienta de línea de comando para identificar especificaciones de archivos de audio

12

Estoy buscando un archivo de audio equivalente al comando de identificación de ImageMagick .

Por ejemplo, con identify, puedo obtener información breve sobre un montón de imágenes:

% 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 

Me gustaría obtener información similar sobre mis archivos de audio.

Mi objetivo final es crear un script para revisar toda mi biblioteca de mp3 e identificar aquellos copiados a velocidades de bits más bajas y luego usar esos datos para volver a copiar mis CD (o comprar versiones de mejor calidad en Amazon o iTunes).

Soluciones para OS X / Linux preferidas a las soluciones de Windows

Doug Harris
fuente
Y otro: MediaInfo
slhck
Mediainfo es excelente y tiene una interfaz de línea de comandos.
Marc.2377
Interesante, pero una aplicación GUI no funciona para esta necesidad.
Doug Harris

Respuestas:

10

En OS X puedes usar mdlso 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'

Lri
fuente
2
Vota a favor de todas las respuestas hasta ahora, pero esta obtiene la marca de verificación porque (a) es nativa de OS X y (b) usa información de metadatos de foco existente y ese comando mdfind es una locura rápida.
Doug Harris
Combinando ambos y produciendo una lista de nombres de álbumes con velocidades de bits deficientes:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Doug Harris
8

Para una salida fácil de analizar, intente ffprobe -show_format 2>/dev/nulldesde FFmpeg.

En OS X, puede instalarlo a través de Homebrew a través de brew install ffmpeg.

$ ffprobe * .mp3 -show_format 2> / dev / null
[FORMATO]
nombre de archivo = 02. Salvadoro Dali.mp3
nb_streams = 2
nombre_formato = mp3
format_long_name = MPEG audio layer 2/3
hora_inicio = 0.000000
duración = 300.254667
tamaño = 7206112
bit_rate = 191999
ETIQUETA: título = Salvadoro Dali
ETIQUETA: artista = Siela
TAG: pista = 2/10
ETIQUETA: álbum = Dali
TAG: fecha = 2005
ETIQUETA: género = rock gótico
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
[/FORMATO]

En un guion:

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
usuario1686
fuente
5

EDITAR: acabo de encontrar un programa de Linux

En Linux, mp3info :

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

Sé que quieres una solución de Linux; sin embargo, por la forma en que planteó su pregunta, parece que una solución de Windows no está completamente descartada ...

En Windows, tag.exe hará el trabajo.

Ejemplo:

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

Para obtener la tasa de bits:

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

Una utilidad muy simple es sox
Mine se instaló previamente en el sistema Linux.

 soxi auidofile.wav 

Salida:

 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

Algo muy útil sobre esto fue que me permitió convertir estéreo de 2 canales a mono. Lo necesitaba para entrenar un modelo de aprendizaje automático para archivos de audio.

EDITAR: Método más sencillo para convertir audio de 2 canales en señal mono :

 from pydub import AudioSegment  
 song = AudioSegment.from_wav("01.wav")
 song = song.set_channels(1)
 song.export("01.wav", format='wav')
Priyank Pathak
fuente
¡Maneja todo tipo de archivos pero no mp3 !
not2qubit
.mp3 se puede convertir fácilmente a .wav, utilizando convertidores en línea. Quizás Matlab tenga algunas bibliotecas para hacerlo. O su ventana tiene un convertidor de sonido para el mismo. quizás el formato de fábrica ...
Priyank Pathak
Sí, pero eso no es lo que pidió el OP.
not2qubit
posible saldrá de aquí para ayuda futura.
Priyank Pathak
1

mp3info fue desarrollado bajo Linux, pero debería funcionar en la mayoría de las variantes UN * X. ... MP3Info también puede mostrar varios aspectos técnicos de un archivo MP3, incluido el tiempo de reproducción, la velocidad de bits, la frecuencia de muestreo y otros atributos en un formato de salida predefinido o especificado por el usuario.

o

MP3 :: Info - Manipula / recupera información de archivos de audio MP3

Quizás

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

(no probado)

RedGrittyBrick
fuente
1

ffprobe es tu amigo (también puedes usar avconv, mplayer; todos ellos devuelven información de medios, pero ffprobe solo devuelve la información que necesitas)

Con corriente:

ffprobe http://96.127.183.74:8604/live

Devoluciones

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

Con archivo local:

ffprobe some_file.mp3 

Devoluciones

...
encoder         : LAME 64bits version 3.99.5
...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
aesede
fuente