やる気駆動型エンジニアの備忘録

WPF(XAML+C#)の話題を中心に.NET/Android/CI やたまに趣味に関するブログです

フォルダ内にあるMedia の再生時間を取得する(C#/WindowsAPICodePack)

特定のフォルダ内にあるメディア(MP3とかAVIとか)ファイルの再生時間を取得する方法のメモ

動作環境

WindowsAPICodePack は、以下の方法でインストールします。 www.nuget.org

以下、サンプルです。

var files = Directory.GetFiles(@"C:\work\");
foreach (var file in files)
{
    using (var shell = ShellObject.FromParsingName(file))
    {
        var property = shell.Properties.System.Media.Duration;
        if (property?.ValueAsObject != null)
        {
            var time = (ulong)property.ValueAsObject;
            Console.WriteLine($"{Path.GetFileName(file)} 再生時間[{TimeSpan.FromTicks((long)time)}]");
        }
        else
        {
            Console.WriteLine($"{Path.GetFileName(file)} 該当プロパティなし。");
        }
    }
}

ShellObject.FromParsingName でファイルの情報を取得し、Properties.System.Media.Duration で該当プロパティの値を取得します。 注意しなければならないのは、ファイルに再生時間(Duration)プロパティが無い場合は、Properties.System.Media.Duration がnull になります。 また、ファイルが破損していたりして再生時間が記録されていない場合は、Properties.System.Media.Duration.ValueAsObject がnull になります。