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


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'


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

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

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')

¡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)


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.