1

我需要检查音乐文件的比特率,我需要以数字形式接收数字,例如:192000(对于 192 kbps)、320000(对于 32kbps)或 (+)3000000(对于 wav 和未压缩音乐)。我的意思是我需要确切的数字,如果 MP3 是 VBR 并且以 194 kbps 压缩,我需要 194000 数字,而不是当前的 CBR 192000。

我正在使用MEDIAINFO (x64) CLI 程序批量完成这项工作:

for /f "tokens=*" %%%% in ('mediainfo "%%a" "--Inform=General;%%BitRate/String%%"') do set "BitRate=%%~%%"

但我有 35.000 多个文件要检查,然后所有文件的审查时间超过 2 小时。


我需要一个简单的代码来检查它,而不是一个需要执行它并浪费大量时间的程序......

代码至少需要识别这种文件类型(我的意思是内部比特率)非常重要: AIFF、FLAC、M4A、MP3、OGG、WAV、WMA。

并且不能是 Ruby 或 Python 的代码,因为我需要“编译”它并确定什么时候“编译”会浪费大量时间来检查很多文件(导致编译的 .exe 解压缩)。

更多信息:我考虑将结果存储在一个文件中,然后进行比较以仅检查新添加的文件,但我无法存储结果以在下次运行时进行比较,因为有时我需要替换检查的文件(旧文件)。顺便说一句,我也不能通过文件时间戳来处理这个问题。需要成为一个独特的程序来检查所有文件,永远(或者这就是我的想法......)。


我尝试了另一种方法来检查比特率,我真的确定这是我需要的,但我无法让它像我想要的那样运行......

这个 VBS 使用 DBPowerAmp 程序 API,并显示一个带有信息的窗口(包括比特率),但是对于一个窗口我什么也做不了......也许如果我可以将窗口信息重定向到一个文本文件......然后通过读取文本文件中的比特率信息来设置变量“比特率”......但我不知道该怎么做:

' create shell object
Set WshShell = CreateObject("WScript.Shell")

' Create dMC Object
Set dMC = CreateObject("dMCScripting.Converter")

'Read audio properties of a file
Dim AudioProps
AudioProps = dMC.AudioProperties("C:\test.aac")
Call WshShell.Popup(AudioProps, , "Returned Audio Properties", 0)

我试图像这样将该代码“转换”成批处理,但是不要运行,我什么也没得到:

@echo off
rundll32.exe dMCScripting.Converter.AudioProperties("C:\Test.aac") > test.txt
exit

哦,我也试过这个,但比 mediainfo 浪费更多时间:

mplayer "test.aac" -frames 0 | findstr "kbit"
4

2 回答 2

2

这是一个 vbs 脚本,适用于 mp3,其余的我没有尝试

Set objPlayer = CreateObject("WMPlayer.OCX" )
Set colMediaCollection = objPlayer.mediaCollection

Set colMedia = colMediaCollection.getAll()

For i = 0 to colMedia.Count - 1
    Set objItem = colMedia.Item(i)
    Wscript.Echo objItem.Name & " : " & objItem.GetItemInfo("bitrate")
Next

有关列表_可以使用的属性。

于 2012-04-28T15:09:19.897 回答
2

为了让您了解 Ruby 中的情况,audioinfo 只是执行此类操作的众多库之一。

require "audioinfo"

AudioInfo.open("R:/mp3/j/John Coltrane - I Think.mp3") do |info|
  puts info.to_h
end
=>{"artist"=>"John Coltrane", "album"=>"John Coltrane", "title"=>"I Think", "tracknum"=>nil, "date"=>nil, "length"=>272, "bitrate"=>128}
于 2012-04-28T15:28:10.137 回答