แบทช์หรือ VBS | จะตรวจสอบบิตเรตของไฟล์เพลงได้อย่างไร?

ฉันต้องตรวจสอบบิตเรตของไฟล์เพลง ฉันต้องได้รับตัวเลขเช่น: 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 และแสดงหน้าต่างพร้อมข้อมูล (รวมบิตเรต) แต่ด้วยหน้าต่าง ฉันไม่สามารถทำอะไรได้เลย... บางทีถ้าฉันสามารถเปลี่ยนเส้นทางข้อมูล 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

โอ้และฉันก็ลองแล้วเหมือนกัน แต่เสียเวลามากกว่า mediainfo:

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
ขอบคุณเป็นความคิดที่ดี แต่ฉันลองคิดดูแล้ว ฉันไม่สามารถจัดเก็บผลลัพธ์เพื่อทำการเปรียบเทียบในการดำเนินการครั้งถัดไปได้ เพราะบางครั้งฉันจะต้องแทนที่ไฟล์ที่เลือก (ไฟล์เก่า) อย่างไรก็ตาม ฉันไม่สามารถจัดการสิ่งนี้ด้วยไฟล์ Datestamps ได้ จำเป็นต้องเป็นขั้นตอนที่ไม่ซ้ำกันในการตรวจสอบไฟล์ทั้งหมด (หรือนี่คือสิ่งที่ฉันคิด...) ลาก่อน   -  person ElektroStudios    schedule 26.04.2012
comment
ทำไม downvote และคำถามปิด? หัวข้อนี้ดูน่าสนใจสำหรับฉัน! ฉันไม่ใช่ OP...   -  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 ที่มีการติดตั้งอัตโนมัติเช่น GUI Red Shoes แต่สิ่งที่ดีที่สุดคือเพียงติดตั้ง Ruby บนพีซีเหล่านี้ ลองพิจารณาว่าเป็น VM เช่นเช่น 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 และเมื่อเสร็จแล้วที่พร้อมท์คำสั่ง จากนั้น cd ไปที่แผนที่ \ruby193\bin แล้วพิมพ์ gem install ruby-audioinfo นั่นคือวิธีการติดตั้งไลบรารี่ Ruby (อัญมณี) - person peter; 07.05.2012

นี่คือสคริปต์ 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

โปรดดูที่ http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/OLE~COM~ADO~CDO~ADSI~LDAP+Get~Audio~File~Informationtxt สำหรับรายการแอตทริบิวต์ที่คุณสามารถใช้ได้

person peter    schedule 28.04.2012
comment
โซลูชันนี้จำเป็นต้องติดตั้งส่วนประกอบ wmplayer บน windows :-/ แต่ยังไงก็ขอบคุณ - person ElektroStudios; 07.05.2012