Ferramenta de linha de comando para identificar especificações de arquivos de áudio


12

Estou procurando um arquivo de áudio equivalente ao comando de identificação do ImageMagick .

Por exemplo, com identify, posso obter informações breves sobre várias imagens:

% 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 

Gostaria de obter informações semelhantes sobre meus arquivos de áudio.

Meu objetivo final é criar um script para percorrer toda a minha biblioteca de mp3 e identificá-los com taxas de bits mais baixas e, em seguida, usar esses dados para copiar novamente meus CDs (ou comprar versões de melhor qualidade da Amazon ou iTunes).

Soluções para OS X / Linux preferidas às soluções Windows


E outro: MediaInfo
slhck

O Mediainfo é ótimo e possui uma interface de linha de comando.
Marc.2377

Interessante, mas um aplicativo GUI não funciona para essa necessidade.
Doug Harris

Respostas:


10

No OS X, você pode apenas usar 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
Upvotes para todas as respostas até agora, mas essa é a marca de seleção porque (a) é nativa do OS X e (b) usa as informações existentes de metadados do Spotlight e esse comando mdfind é muito rápido.
Doug Harris

Combinando e produzindo uma lista de nomes de álbuns com taxas de bits abaixo do padrão:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Doug Harris

8

Para fácil analisar a saída, tente ffprobe -show_format 2>/dev/nullno FFmpeg.

No OS X, você pode instalá-lo através do Homebrew via brew install ffmpeg.

$ ffprobe * .mp3 -show_format 2> / dev / null
[FORMATO]
filename = 02. Salvadoro Dali.mp3
nb_streams = 2
format_name = mp3
format_long_name = Camada de áudio MPEG 2/3
start_time = 0.000000
duration = 300.254667
tamanho = 7206112
bit_rate = 191999
TAG: title = Salvadoro Dali
TAG: artista = Siela
TAG: faixa = 2/10
TAG: álbum = Dali
TAG: data = 2005
TAG: 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]

Em um 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: acabou de encontrar um programa Linux

No Linux, mp3info :

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

Eu sei que você quer uma solução Linux; no entanto, pela maneira como você declarou sua pergunta, parece que uma solução do Windows não está completamente pronta ...

No Windows, o tag.exe fará o trabalho.

Exemplo:

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 obter apenas a taxa de bits:

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

4

Um utilitário muito simples é o sox
Mine, que foi pré-instalado no sistema linux.

 soxi auidofile.wav 

Resultado :

 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 muito útil sobre isso foi que me permitiu converter 2 canais estéreo em canal mono. Eu precisava dele para treinar um modelo de aprendizado de máquina para arquivos de áudio.

EDIT: Método mais fácil de converter áudio de 2 canais em sinal mono :

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

Lida com todos os tipos de arquivos, mas não mp3 !
not2qubit # 03

.mp3 is pode ser facilmente convertido em .wav, usando conversores online. Talvez o matlab tenha algumas bibliotecas para fazer isso. Ou o seu Windows possui um conversor de som para o mesmo. talvez formato de fábrica ...
Priyank Pathak

Sim, mas não foi isso que o OP pediu.
Not2qubit 9/0318

possível sairá daqui para ajuda futura.
Priyank Pathak

1

O mp3info foi desenvolvido no Linux, mas deve funcionar na maioria das variantes UN * X. O MP3Info também pode exibir vários aspectos técnicos de um arquivo MP3, incluindo tempo de reprodução, taxa de bits, frequência de amostragem e outros atributos em um formato de saída predefinido ou especificável pelo usuário.

ou

MP3 :: Info - Manipula / busca informações de arquivos de áudio MP3

Possivelmente

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

(não testado)


1

O ffprobe é seu amigo (também é possível usar o avconv, mplayer; todos eles retornam informações da mídia, mas o ffprobe apenas retorna as informações necessárias)

Com stream:

ffprobe http://96.127.183.74:8604/live

Devoluções

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

Com arquivo local:

ffprobe some_file.mp3 

Devoluções

...
encoder         : LAME 64bits version 3.99.5
...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.