Пакет или VBS | Как проверить битрейт музыкального файла?

Мне нужно проверить битрейт музыкального файла, мне нужно получить цифровое число, например: 192000 (для 192 кбит/с), 320000 (для 32 кбит/с) или (+)3000000 для wav и несжатой музыки. Я имею в виду, что мне нужен именно номер. Если MP3 является VBR и сжат со скоростью 194 кбит/с, мне нужен номер 194000, а не текущий CBR 192000.

Я выполнял эту работу с помощью программы командной строки MEDIAINFO (x64) в пакетном режиме:

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 использует API программы DBPowerAmp, И показывает окно с информацией (включая битрейт), Но с окном я ничего не могу сделать... Может быть, если я смогу перенаправить информацию Windows в текстовый файл.. , А затем установите переменную «Битрейт», прочитав информацию о битрейте в текстовом файле... Но я не знаю, как это сделать:

' 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

О, и я тоже пробовал это, но тратил больше времени, чем медиаинформация:

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

person ElektroStudios    schedule 26.04.2012    source источник
comment
Вам нужно проверять более 35 000 файлов каждый раз? Могли бы вы добиться +2 часов обработки только один раз (и сохранить результаты в файле), и с этого времени просто обрабатывать новые файлы (и брать старые результаты из файла)?   -  person Aacini    schedule 26.04.2012
comment
Спасибо, это хорошая идея, но я думал об этом, я не могу сохранить результат для сравнения при следующем запуске, потому что иногда мне нужно заменить проверенные файлы (старые файлы). Кстати, я не могу справиться с этим с помощью дат файлов. Должна быть одна уникальная процедура для проверки ВСЕХ файлов, когда-либо (Или это то, что я думаю...). до свидания   -  person ElektroStudios    schedule 26.04.2012
comment
Почему минус и закрытый вопрос? Мне эта тема кажется интересной! Я НЕ ОП...   -  person Aacini    schedule 27.04.2012
comment
дома у меня есть VBS, который может это сделать, я посмотрю на него сегодня вечером. не понимаю ту часть, где вы не можете сохранить результаты из-за проверенных старых файлов ??? обязательно должно быть возможно. Ruby был бы намного лучше, если вам нужно запутать код, есть способы, распаковка, на которую вы ссылаетесь, выполняется только один раз, и одна секунда, которая может занять это, не учитывается во времени, которое занимает весь процесс.   -  person peter    schedule 27.04.2012
comment
привет, нет, мне не нужно использовать код, но мне нужно преобразовать его в exe для использования на другом компьютере, поэтому, когда преобразованный exe распаковывается, требуется много времени, чтобы проверить много файлов... :(, Я предпочитаю VBS для этого, PD: извините за мой английский.   -  person ElektroStudios    schedule 28.04.2012
comment
существуют реализации Ruby, которые имеют автоматическую установку, например Red Shoes с графическим интерфейсом, но лучше всего просто установить Ruby на эти компьютеры, например, на виртуальную машину, например Java. В любом случае, если вы используете VBS, вам также понадобится библиотека, dll, ocx или что-то еще, и будет сложнее установить их на другие компьютеры.   -  person peter    schedule 28.04.2012


Ответы (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}
person peter    schedule 28.04.2012
comment
привет, еще раз спасибо, но я не могу найти ни одного драгоценного камня под названием audioinfo :( - person ElektroStudios; 07.05.2012
comment
Просто установите ruby ​​и, когда закончите, в командной строке. Затем перейдите на карту \ ruby193\bin и введите gem install ruby-audioinfo, так устанавливаются библиотеки ruby ​​(gems). - person peter; 07.05.2012

Вот vbs скрипт, работает с мп3, остальное не пробовал

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

См. http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/OLE~COM~ADO~CDO~ADSI~LDAP+Get~Audio~File~Information.txt для списка атрибутов, которые вы можете использовать.

person peter    schedule 28.04.2012
comment
для этого решения нужен компонент wmplayer, установленный в Windows :-/ но все равно спасибо - person ElektroStudios; 07.05.2012