У меня есть большая коллекция c музыки, и я хотел бы узнать скорость передачи и разрядность отдельных файлов.
Я использую Windows 10, и он не показывает свойства всех файлы в папках (при детальном просмотре нет возможности «развернуть» папку, как на ma c). Я знаю, как добавить метку битовой глубины и метку битрейта в окно, когда я открываю папку для просмотра файлов в ней. Но мне нужно найти все файлы, например, с разрядностью 24 бита в наборе вложенных папок, которые содержат много файлов musi c: некоторые 16-битные и некоторые 24-битные. Цель этого упражнения - разделить все файлы размером> 16 бит в другой каталог.
Я пробовал использовать тег mp3, приложение, которое перечисляет эти свойства для всех файлов в каталоге (даже тех, которые глубоко вложены), но это мучительно медленный на моем ноутбуке (30000 файлов можно было бы просто перечислить за 5 часов). Я пробовал использовать mediainfo (из mediaarea. net), но он работает только с отдельными файлами. Я попытался сопоставить сетевую папку (в которой существуют файлы) и использовать команду «tree», но она тоже не работает. Поиск в Google по запросу «рекурсивно перечислить битрейт всех файлов в windows» дал несколько ссылок, одной из которых 11 лет здесь . Я изменил его для fla c вот так
function Get-FLACs( [string]$directory = "$pwd", [int]$minimumBitrate = 32 ) {
$shellObject = New-Object -ComObject Shell.Application
$bitrateAttribute = 0
# Find all flac files under the given directory
$flacFiles = Get-ChildItem $directory -recurse -filter '*.flac'
foreach( $file in $flacFiles ) {
# Get a shell object to retrieve file metadata.
$directoryObject = $shellObject.NameSpace( $file.Directory.FullName )
$fileObject = $directoryObject.ParseName( $file.Name )
Write-Output ("filename",$fileObject)
# Find the index of the bit depth attribute, if necessary.
for( $index = 5; -not $bitdepthAttribute; ++$index ) {
$name = $directoryObject.GetDetailsOf( $directoryObject.Items, $index )
if( $name -eq 'Bit depth' ) {
$bitdepthAttribute = $index
Write-Output ("bit depth index",$bitdepthAttribute)
$bitdepthString = $directoryObject.GetDetailsOf( $fileObject, $bitdepthAttribute )
Write-Output ("bit depth",$bitdepthString)
}
}
}
Я попытался протестировать приведенный выше сценарий в папке с 2 файлами fla c, оба из которых имеют глубину 24 бита и частоту дискретизации 96 кГц.
Результатом приведенного выше сценария было
PS C:\Users\Stefan\Downloads\Compare formats> Get-FLACs
filename
Application : System.__ComObject
Parent : System.__ComObject
Name : BATIK - The Old Man FLAC
Path : C:\Users\Stefan\Downloads\Compare formats\BATIK - The Old Man FLAC.flac
GetLink :
GetFolder :
IsLink : False
IsFolder : False
IsFileSystem : True
IsBrowsable : False
ModifyDate : 6/15/2014 11:27:46 PM
Size : 66131611
Type : FLAC File
bit depth index
174
bit depth
filename
Application : System.__ComObject
Parent : System.__ComObject
Name : Carmen Gomes Inc - A 1000 Shades of Blue FLAC
Path : C:\Users\Stefan\Downloads\Compare formats\Carmen Gomes Inc - A 1000 Shades of Blue FLAC.flac
GetLink :
GetFolder :
IsLink : False
IsFolder : False
IsFileSystem : True
IsBrowsable : False
ModifyDate : 4/26/2014 8:41:08 PM
Size : 34188974
Type : FLAC File
Для первого файла он нашел атрибут 'bit-depth' и его индекс (174), но не нашел атрибут для второго файла. . Ни в том, ни в другом случае скрипт не нашел правильную битовую глубину, а просто оставил значение пустым.