Batch atau VBS | Bagaimana cara memeriksa bitrate file musik?

Saya perlu memeriksa bitrate file musik, saya perlu menerima nomor dalam digit seperti: 192000 (untuk 192 kbps), 320000 (untuk 32kbps) atau (+)3000000 untuk wavs dan musik tidak terkompresi. Maksud saya, saya memerlukan nomor persisnya, Jika MP3 adalah VBR dan dikompresi pada 194 kbps, saya memerlukan nomor 194000, bukan CBR 192000 saat ini.

Saya melakukan pekerjaan ini dengan Program CLI MEDIAINFO (x64), Dalam Batch:

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

Tetapi saya memiliki 35.000+ file untuk diperiksa dan kemudian pengujian semua file memakan waktu lebih dari 2 jam.


Saya memerlukan kode sederhana untuk memeriksanya, Bukan program yang perlu menjalankannya dan membuang banyak waktu...

Sangat penting bahwa kode harus mengenali setidaknya jenis file ini (maksud saya bitrate internal): AIFF, FLAC, M4A, MP3, OGG, WAV, WMA.

Dan tidak bisa menjadi kode untuk Ruby atau Python, karena saya harus "mengkompilasinya" dan tentu saja ketika "dikompilasi" membuang banyak waktu untuk memeriksa banyak file (Menyebabkan tidak terkompresinya .exe yang dikompilasi).

Info lebih lanjut: Saya berpikir untuk menyimpan hasilnya dalam sebuah file dan kemudian melakukan perbandingan untuk memeriksa hanya file baru yang ditambahkan, Tapi saya tidak dapat menyimpan hasilnya untuk melakukan perbandingan pada proses berikutnya karena terkadang saya perlu mengganti file yang diperiksa (file lama). Ngomong-ngomong, saya juga tidak bisa menangani ini dengan stempel tanggal file. Harus ada satu prosedur unik untuk memeriksa SEMUA file, Selamanya (Atau ini yang saya pikirkan...).


Saya mencoba metode lain untuk memeriksa bitrate, saya benar-benar yakin ini yang saya perlukan tetapi saya tidak dapat menjalankannya seperti yang saya inginkan...

VBS ini menggunakan API program DBPowerAmp, Dan menampilkan jendela dengan info (termasuk bitrate), Tapi dengan jendela saya tidak bisa berbuat apa-apa... Mungkin jika saya bisa mengarahkan info windows ke file teks.. . Lalu atur variabel "Bitrate" dengan membaca info bitrate di file teks... Tapi saya tidak tahu cara melakukannya:

' 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)

Saya sudah mencoba "mengubah" kode itu menjadi Batch, seperti ini, Tapi jangan dijalankan, saya tidak mendapatkan apa-apa:

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

Oh dan saya sudah mencobanya juga, tetapi membuang lebih banyak waktu daripada mediainfo:

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

person ElektroStudios    schedule 26.04.2012    source sumber
comment
Apakah Anda perlu memeriksa +35.000 file setiap saat? Bisakah Anda mencapai proses +2 jam hanya satu kali (dan menyimpan hasilnya dalam sebuah file), dan sejak saat itu hanya memproses file baru (dan mengambil hasil lama dari file tersebut)?   -  person Aacini    schedule 26.04.2012
comment
Terima kasih adalah ide yang bagus tetapi saya memikirkannya, saya tidak dapat menyimpan hasilnya untuk melakukan perbandingan pada proses berikutnya karena terkadang saya perlu mengganti file yang diperiksa (file lama). Ngomong-ngomong, saya juga tidak bisa menangani ini dengan mengajukan stempel tanggal. Harus ada satu prosedur unik untuk memeriksa SEMUA file, Selamanya (Atau ini yang saya pikirkan...). Selamat tinggal   -  person ElektroStudios    schedule 26.04.2012
comment
Mengapa suara negatif dan pertanyaan dekat? Topik ini sepertinya menarik bagi saya! aku BUKAN OP...   -  person Aacini    schedule 27.04.2012
comment
di rumah saya punya vbs yang bisa melakukan itu, saya akan memeriksanya malam ini. tidak mengerti bagian di mana Anda tidak dapat menyimpan hasilnya karena file lama yang diperiksa ??? pastilah mungkin. Ruby akan jauh lebih baik, jika Anda perlu mengaburkan kodenya, ada beberapa cara, dekompresi yang Anda rujuk hanya sekali dan satu detik yang diperlukan tidak dihitung dalam waktu yang dibutuhkan seluruh proses   -  person peter    schedule 27.04.2012
comment
hai, tidak, saya tidak perlu menghapus kodenya tetapi perlu mengonversinya menjadi exe untuk digunakan di PC lain, jadi ketika exe yang dikonversi didekompresi, dibutuhkan banyak waktu untuk memeriksa banyak file... :(, Saya lebih suka VBS untuk melakukannya, PD: maaf untuk bahasa Inggris saya.   -  person ElektroStudios    schedule 28.04.2012
comment
ada implementasi Ruby yang memiliki instalasi otomatis seperti GUI Red Shoes, tapi yang terbaik adalah menginstal Ruby di pc ini, pertimbangkan VM seperti misalnya Java. Lagi pula jika Anda menggunakan VBS Anda juga memerlukan perpustakaan, dll, ocx atau apa pun dan akan lebih sulit menginstalnya di pc lain.   -  person peter    schedule 28.04.2012


Jawaban (2)


Untuk memberi Anda gambaran seperti apa di Ruby, audioinfo hanyalah salah satu dari banyak perpustakaan yang melakukan hal seperti itu.

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
hai, sekali lagi terima kasih tetapi saya tidak dapat menemukan permata bernama audioinfo :( - person ElektroStudios; 07.05.2012
comment
Instal saja ruby ​​​​dan setelah selesai, pada commandprompt Kemudian cd ke peta \ruby193\bin dan ketik gem install ruby-audioinfo begitulah cara perpustakaan ruby ​​​​(permata) diinstal. - person peter; 07.05.2012

Ini skrip vbs, berfungsi dengan mp3, sisanya saya tidak mencobanya

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

Lihat http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/OLE~COM~ADO~CDO~ADSI~LDAP+Get~Audio~File~Informasi.txt untuk daftar atribut yang dapat Anda gunakan.

person peter    schedule 28.04.2012
comment
solusi ini memerlukan komponen wmplayer yang diinstal di windows :-/ tapi terima kasih - person ElektroStudios; 07.05.2012