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

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

我正在寻找一个与 ImageMagick 的确认命令。

例如,使用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(或从亚马逊或 iTunes 购买质量更好的版本)。

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

答案1

在 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

为了便于解析输出,请尝试ffprobe -show_format 2>/dev/nullFFmpeg。

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

$ ffprobe *.mp3 -show_format 2>/dev/null
[格式]
文件名=02. 萨尔瓦多·达利.mp3
nb_streams=2
格式名称=mp3
format_long_name=MPEG 音频层 2/3
开始时间=0.000000
持续时间=300.254667
尺寸=7206112
比特率=191999
标签:title=萨尔瓦多·达利
标签:艺术家=Siela
标签:轨迹=2/10
标签:专辑=达利
标签:日期=2005
标签:流派=哥特摇滚
标签:replaygain_album_peak=1.188815
标签:replaygain_track_peak=1.178607
标签:replaygain_track_gain=-9.00 dB
标签:replaygain_album_gain=-9.12 dB
标签:专辑艺术家=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

答案3

一个非常简单的实用程序是袜子
我的是预先安装在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')

答案4

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

或者

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

也许

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

(未经测试)

相关内容