我正在寻找一个与 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 上您可能只需使用mdls
或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
为了便于解析输出,请尝试ffprobe -show_format 2>/dev/null
FFmpeg。
在 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')