在powershell中按比特率递归获取文件列表

时间:2009-07-20 14:10:54

标签: powershell bitrate

如何使用PowerShell列出文件(音频)比特率大于32kbps的目录中的所有文件(递归)?

4 个答案:

答案 0 :(得分:3)

linknew link locationJohannes' post)开始,这是一个简单的函数,使用GetDetailsOf查找目标中具有最小比特率的所有mp3文件:

function Get-Mp3Files( [string]$directory = "$pwd", [int]$minimumBitrate = 32 ) {
  $shellObject = New-Object -ComObject Shell.Application
  $bitrateAttribute = 0

  # Find all mp3 files under the given directory
  $mp3Files = Get-ChildItem $directory -recurse -filter '*.mp3'
  foreach( $file in $mp3Files ) {
    # Get a shell object to retrieve file metadata.
    $directoryObject = $shellObject.NameSpace( $file.Directory.FullName )
    $fileObject = $directoryObject.ParseName( $file.Name )

    # Find the index of the bit rate attribute, if necessary.
    for( $index = 5; -not $bitrateAttribute; ++$index ) {
      $name = $directoryObject.GetDetailsOf( $directoryObject.Items, $index )
      if( $name -eq 'Bit rate' ) { $bitrateAttribute = $index }
    }

    # Get the bit rate of the file.
    $bitrateString = $directoryObject.GetDetailsOf( $fileObject, $bitrateAttribute )
    if( $bitrateString -match '\d+' ) { [int]$bitrate = $matches[0] }
    else { $bitrate = -1 }

    # If the file has the desired bit rate, include it in the results.
    if( $bitrate -ge $minimumBitrate ) { $file }
  }
}

答案 1 :(得分:2)

嗯,第一部分肯定是Get-ChildItem -Recurse。但是,对于比特率,您需要更多脚本。 Microsoft Scripting Guys不久前回答了一个问题:How Can I find Files' Metadata。您可以使用它来获取音频比特率并对其进行过滤。

答案 2 :(得分:1)

一般情况下,如果你想做一些你知道的内置Windows组件本身支持的东西,最快的路径可能是COM。 James Brundage has a great post即时发现这些功能&快速使用它们。

答案 3 :(得分:0)

惊人的皇帝!我意识到我有一些56K的MP3,我应该用更好的质量来代替(嘿,当驱动器被数百个megs测量时它们被撕裂,而不是演出,节省空间是重要的!)我想今天早上我应该看到如果有一种方法可以在Powershell下做到这一点(我曾经有一个名为EDIR的程序可以从文件中获取信息,但那是在Win 95的时代......),这个页面是PowerShell下的第一个命中或monad mp3比特率提取。谈谈幸运!

我还可以想出改变这一点,所以我可以通过选择16:9,16:10左右的所有壁纸,如果没有别的只是对它们进行分类。 16:9-10,4:3(肖像),9-10:16,3:4(风景),方形和其他。在我的(哈!)业余时间听起来像是对我的计划。