用于识别音频文件规格的命令行工具


12

我正在寻找与ImageMagick的identify命令等效的音频文件。

例如,使用identify,我可以获得有关一堆图像的简要信息:

% 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 

我想获得有关我的音频文件的类似信息。

我最终的目标是创建一个脚本来遍历我的整个mp3库,并识别那些以较低比特率翻录的脚本,然后使用该数据重新复制我的CD(或从Amazon或iTunes购买质量更高的版本)。

OS X / Linux解决方案优于Windows解决方案


还有一个:MediaInfo
slhck 2012年

Mediainfo很棒,并且具有命令行界面。
Marc.2377'7

有趣的是,但GUI应用程序无法满足此需求。
道格·哈里斯

Answers:


10

在OS X上,您可能只使用mdlsmdfind

$ 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
到目前为止,对所有答案都投票支持,但是此选项得到了选中标记,因为(a)它是OS X的本机,并且(b)使用现有的Spotlight元数据信息,并且mdfind命令非常快。
道格·哈里斯

结合两者并产生具有不合标准比特率的专辑名称列表:mdfind -0 -onlyin ~/Music 'kMDItemFSName==*.mp3&&kMDItemAudioBitRate<=192000'| xargs -0 mdls -name kMDItemAlbum | sort | uniq
Doug Harris

8

为了易于解析输出,请尝试ffprobe -show_format 2>/dev/null从FFmpeg。

在OS X上,可以通过安装自制通过brew install ffmpeg

$ ffprobe * .mp3 -show_format 2> / dev / null
[格式]
文件名= 2。Salvadoro Dali.mp3
nb_streams = 2
format_name = mp3
format_long_name = MPEG音频层2/3
start_time = 0.000000
持续时间= 300.254667
大小= 7206112
bit_rate = 191999
TAG:title =萨尔瓦多·达利(Salvadoro Dali)
TAG:artist = Siela
标记:track = 2/10
TAG:相册= Dali
TAG:日期= 2005
标签:流派=哥特式摇滚
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
[/格式]

在脚本中:

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

编辑:刚找到一个Linux程序

在Linux下,mp3info

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

我知道您需要Linux解决方案;但是,顺便说一句,听起来好像Windows解决方案还没有完全解决...

在Windows下,tag.exe将完成此工作。

例:

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

要获得比特率:

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

4

sox
Mine是一个非常简单的实用程序,它已预先安装在linux系统上。

 soxi auidofile.wav 

输出:

 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

对此非常有用的是它使我可以将立体声2声道转换为单声道。我需要它来训练用于音频文件的机器学习模型。

编辑:更简单的方法将2声道音频转换为单声道信号

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

处理各种文件,但不能处理mp3
not2qubit

可以使用在线转换器将.mp3轻松转换为.wav。也许matlab有一些库可以这样做。或者您的窗户有一个相同的声音转换器。也许是工厂格式...
Priyank Pathak

是的,但这不是OP要求的。
not2qubit

可能会离开这里以供将来使用。
Priyank Pathak '18

1

mp3info是在Linux下开发的,但可以在大多数UN * X变体上使用。... MP3Info还可以以预定义或用户指定的输出格式显示MP3文件的各种技术方面,包括播放时间,比特率,采样频率和其他属性。

要么

MP3 :: Info-从MP3音频文件中处理/获取信息

也许

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

(未试)


1

ffprobe 是您的朋友(您也可以使用avconv,mplayer;它们都返回媒体信息,但是ffprobe只是返回您需要的信息)

带流:

ffprobe http://96.127.183.74:8604/live

退货

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

带有本地文件:

ffprobe some_file.mp3 

退货

...
encoder         : LAME 64bits version 3.99.5
...
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.