Ses dosyası özelliklerini tanımlayan komut satırı aracı


12

ImageMagick'in tanımlama komutuna eşdeğer bir ses dosyası arıyorum .

Örneğin, identifybir grup görüntü hakkında kısa bilgi edinebilirim:

% 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 

Ses dosyalarım hakkında benzer bilgiler almak istiyorum.

Nihai hedefim, tüm mp3 kitaplığımdan geçmek ve daha düşük bit hızlarında kopyalananları tanımlamak için bir komut dosyası oluşturmak ve daha sonra bu verileri CD'lerimi yeniden kopyalamak (veya Amazon veya iTunes'dan daha kaliteli sürümler satın almak) için kullanmaktır.

Windows çözümlerine tercih edilen OS X / Linux için çözümler


Ve bir tane daha: MediaInfo
slhck

Mediainfo harika ve bir komut satırı arayüzüne sahip.
Marc.2377

İlginç ama bir GUI uygulaması bu ihtiyaç için çalışmıyor.
Doug Harris

Yanıtlar:


10

OS X'te mdlsveya öğesini kullanabilirsiniz 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
Şimdiye kadar tüm cevaplar için oy verin, ancak bu onay işareti alır, çünkü (a) OS X'e özgüdür ve (b) mevcut spot meta veri bilgilerini kullanır ve mdfind komutu çılgınca hızlıdır.
Doug Harris

Her ikisini bir araya getiren ve standart bit hızlarıyla albüm adlarının bir listesini üreten:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Doug Harris

8

Çıktıyı ayrıştırmak için FFmpeg'den deneyin ffprobe -show_format 2>/dev/null.

OS X'te, Homebrew aracılığıyla kurabilirsiniz brew install ffmpeg.

$ ffprobe * .mp3 -show_format 2> / dev / null
[BİÇİM]
Dosya adı = 02. Salvadoro Dali.mp3
nb_streams = 2
format_name = mp3
format_long_name = MPEG ses katmanı 2/3
start_time = 0.000000
süresi = 300.254667
boyutu = 7206112
bit_rate = 191.999
ETİKET: başlık = Salvadoro Dali
TAG: sanatçı Siela =
TAG: parça = 10/02
TAG: Albüm Dali =
TAG: tarih = 2005
TAG: tür = Gotik kaya
TAG: replaygain_album_peak = 1.188815
TAG: replaygain_track_peak = 1.178607
ETİKET: replaygain_track_gain = -9,00 dB
ETİKET: replaygain_album_gain = -9,12 dB
TAG: ALBUM_ARTIST = Siela
[/BİÇİM]

Bir komut dosyasında:

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: az önce bir Linux programı buldu

Linux altında, mp3info :

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

Linux çözümü istediğinizi biliyorum; ancak, sorunuzu belirttiğiniz şekilde, bir Windows çözümü tamamen dışarıda gibi görünmüyor ...

Windows altında tag.exe işi yapacak.

Misal:

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

Sadece bit hızını almak için:

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

4

Çok basit bir yardımcı program sox
Mine linux sistemine önceden kurulmuştur.

 soxi auidofile.wav 

Çıktı :

 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

Bu konuda çok faydalı bir şey, stereo 2 kanalını mono kanala dönüştürmeme izin vermesiydi. Ses dosyaları için bir makine öğrenme modeli yetiştirmek için ona ihtiyacım vardı.

EDIT: 2 kanal ses mono sinyale dönüştürmek daha kolay yöntem :

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

Her türlü dosyayı işler ama mp3 değil !
not2qubit

.mp3, çevrimiçi dönüştürücüler kullanılarak kolayca .wav biçimine dönüştürülebilir. Belki matlab'ın bunu yapmak için bazı kütüphaneleri vardır. Ya da pencereleriniz için de bir ses dönüştürücü vardır. belki fabrika formatı ...
Priyank Pathak

Evet, ama OP'nin istediği bu değildi.
not2qubit

gelecekteki yardım için buradan ayrılacak.
Priyank Pathak

1

mp3info Linux altında geliştirilmiştir, ancak çoğu UN * X varyantı üzerinde çalışmalıdır. ... MP3Info ayrıca bir MP3 dosyasının çalma süresi, bit hızı, örnekleme frekansı ve diğer öznitelikleri içeren çeşitli teknik özelliklerini önceden tanımlanmış veya kullanıcı tarafından belirlenebilir bir çıktı biçiminde görüntüleyebilir.

veya

MP3 :: Bilgi - MP3 ses dosyalarından bilgileri değiştirme / alma

belki

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

(Denenmemiş)


1

ffprobe arkadaşınız (ayrıca avconv, mplayer kullanabilirsiniz; hepsi medya bilgilerini döndürür, ancak ffprobe sadece ihtiyacınız olan bilgileri döndürür)

Akışla:

ffprobe http://96.127.183.74:8604/live

İadeler

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

Yerel dosya ile:

ffprobe some_file.mp3 

İadeler

...
encoder         : LAME 64bits version 3.99.5
...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.