亀の甲羅2

今日もまた朝とく起きて励まなん窓に明るきありあけの月

powershell :mp3ファイルのプロパティ値の参照と出力

mp3ファイルのプロパティ値参照

たまったmp3ファイルからちょっと探し物がしたい時に、必要な情報のDBがあるとテキスト検索が楽。
mp3のプロパティ情報をかき集められないかを調べてみた。

目次

本文

1. サンプルコード

とりあえず自分のもっているmp3ファイルの情報を出力するスクリプト
デスクトップにmp3.csvファイルを出力してくれる。

$obj_Path = "C:\music"
$out_Dir = [System.Environment]::GetFolderPath("Desktop")

$sh = New-Object -ComObject Shell.Application

$a = Get-ChildItem -Recurse -Filter *.mp3 -Path $obj_Path

$csv = ""

$a | %{ 

    $Dir = $_.DirectoryName 
    $folder = $sh.Namespace($Dir) 
    $fi = $folder.ParseName($_.Name)


    # Track No
    $num = $folder.GetDetailsOf($fi,26).PadLeft(2,"0")
    # Title
    $title = $folder.GetDetailsOf($fi, 21)
    # 曲の長さ
    $time = $folder.GetDetailsOf($fi, 27)
    # ファイルサイズ
    $size =  $folder.GetDetailsOf($fi,1)
    # エンコード
    $enc = $folder.GetDetailsOf($fi, 28)
    # ミュージシャン
    $musician = $folder.GetDetailsOf($fi, 13)
    # アルバム名
    $name_album = $folder.GetDetailsOf($fi, 14)
    # ファイル名
    $name_file = $folder.GetDetailsOf($fi, 0)

    $csv += $musician + "," + $name_album + "," + $num + "," + $title + "," + $time + "," + $name_file + "," + $size + "," + $enc + "," + $Dir + "`n"
}

$csv_obj = $csv | ConvertFrom-Csv -Delimiter "," -Header "アーティスト名","アルバム名","No","タイトル","時間","ファイル名","サイズ","エンコード","ディレクトリ"

$fileN = (JOIN-PATH $out_Dir "mp3.csv") 

$csv_obj | Export-Csv -Path $fileN -Encoding UTF8 -NoTypeInformation

2. 簡単な補足

GetDetailsOf でファイルの持つプロパティ値を参照している。これはデジカメのExif参照のときにも使ったテクニック。0~310までのIDごとにデータが格納されているので参照する。今回のスクリプトは公式リファレンスなどを参照していないので、間違ったデータを参照している可能性もある。

参考:

PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します


バージョン情報

> $PSVersionTable

Name                           Value                                                                                                          
----                           -----                                                                                                          
PSVersion                      5.1.19041.1023