Alat baris perintah untuk mengidentifikasi spesifikasi file audio

12

Saya mencari file audio yang setara dengan perintah identifikasi ImageMagick .

Misalnya, dengan identify, saya bisa mendapatkan informasi singkat tentang banyak gambar:

% 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 

Saya ingin mendapatkan informasi serupa tentang file audio saya.

Tujuan akhir saya adalah membuat skrip untuk menelusuri seluruh pustaka mp3 saya dan mengidentifikasi orang-orang yang robek pada bitrate lebih rendah dan kemudian menggunakan data itu untuk merobek ulang CD saya (atau membeli versi kualitas yang lebih baik dari Amazon atau iTunes).

Solusi untuk OS X / Linux lebih disukai daripada solusi Windows

Doug Harris
sumber
Dan satu lagi: MediaInfo
slhck
Mediainfo hebat dan memiliki antarmuka baris perintah.
Marc.2377
Menarik tetapi aplikasi GUI tidak berfungsi untuk kebutuhan ini.
Doug Harris

Jawaban:

10

Pada OS X Anda mungkin hanya menggunakan mdlsatau 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
sumber
2
Upvotes untuk semua jawaban sejauh ini, tetapi yang ini mendapatkan tanda centang karena (a) itu asli untuk OS X dan (b) menggunakan info metadata lampu sorot yang ada dan bahwa perintah mdfind gila dengan cepat.
Doug Harris
Menggabungkan keduanya dan menghasilkan daftar nama album dengan bit rate di bawah standar:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Doug Harris
8

Untuk keluaran yang mudah diurai, coba ffprobe -show_format 2>/dev/nulldari FFmpeg.

Pada OS X, Anda dapat menginstalnya melalui Homebrew via brew install ffmpeg.

$ ffprobe * .mp3 -show_format 2> / dev / null
[FORMAT]
nama file = 02. Salvadoro Dali.mp3
nb_streams = 2
format_name = mp3
format_long_name = Lapisan audio MPEG 2/3
start_time = 0,000000
durasi = 300.254667
ukuran = 7206112
bit_rate = 191999
TAG: title = Salvadoro Dali
TAG: artis = Siela
TAG: track = 2/10
TAG: album = Dali
TAG: date = 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]

Dalam naskah:

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
pengguna1686
sumber
5

EDIT: baru saja menemukan program Linux

Di Linux, mp3info :

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

Saya tahu Anda menginginkan solusi Linux; Namun, dengan cara Anda menyatakan pertanyaan Anda, sepertinya solusi Windows tidak sepenuhnya keluar ...

Di bawah Windows, tag.exe akan melakukan tugasnya.

Contoh:

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

Untuk mendapatkan bitrate:

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

Utilitas yang sangat sederhana adalah sox
Mine yang sudah diinstal pada sistem linux.

 soxi auidofile.wav 

Keluaran:

 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

sesuatu yang sangat berguna tentang ini adalah hal itu memungkinkan saya untuk mengubah stereo 2-channel ke saluran mono. Saya membutuhkannya untuk melatih model pembelajaran mesin untuk file audio.

EDIT: Metode yang lebih mudah mengubah audio 2 kanal menjadi sinyal mono :

 from pydub import AudioSegment  
 song = AudioSegment.from_wav("01.wav")
 song = song.set_channels(1)
 song.export("01.wav", format='wav')
Priyank Pathak
sumber
Menangani semua jenis file tetapi tidak mp3 !
not2qubit
.mp3 dapat dengan mudah dikonversi ke .wav, menggunakan konverter online. Mungkin matlab memiliki beberapa perpustakaan untuk melakukannya. Atau windows Anda memiliki konverter suara yang sama. mungkin format pabrik ...
Priyank Pathak
Ya, tapi bukan itu yang diminta OP.
not2qubit
mungkin akan pergi dari sini untuk bantuan di masa depan.
Priyank Pathak
1

mp3info dikembangkan di Linux, tetapi harus bekerja pada sebagian besar varian UN * X. ... MP3Info juga dapat menampilkan berbagai aspek teknis dari file MP3 termasuk waktu pemutaran, kecepatan bit, frekuensi pengambilan sampel, dan atribut lainnya dalam format output yang ditentukan sebelumnya atau yang ditentukan pengguna.

atau

MP3 :: Info - Memanipulasi / mengambil info dari file audio MP3

Mungkin

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

(belum dicoba)

RedGrittyBrick
sumber
1

ffprobe adalah teman Anda (juga Anda dapat menggunakan avconv, mplayer; semuanya mengembalikan info media, tetapi ffprobe hanya mengembalikan info yang Anda butuhkan)

Dengan aliran:

ffprobe http://96.127.183.74:8604/live

Kembali

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

Dengan file lokal:

ffprobe some_file.mp3 

Kembali

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