C# 動画ファイルの長さを取得する

C#で動画ファイルの長さ(再生時間)を取得する方法を記載します。

動画ファイルの長さ の確認方法

長さは動画ファイルのプロパティで確認できます。
詳細タブ > ビデオ > 長さ

動画ファイルのプロパティ

Shell32.dllのインポート

このプログラムはShell32.dllを使用します。
[参照の追加]画面を開き、「COM」タブの「Microsoft Shell Controls And Automation」を追加してください。

参照の追加 Microsoft Shell Controls And Automation

ソースコード

[STAThread]
public string GetMovieDurationText(string strMovPath)
{
    FileInfo fi = new FileInfo(strMovPath);
    string strFileName = fi.FullName;
    var shellAppType = Type.GetTypeFromProgID("Shell.Application");
    dynamic shell = Activator.CreateInstance(shellAppType);
    Folder objFolder = shell.NameSpace(Path.GetDirectoryName(strFileName));
    FolderItem folderItem = objFolder.ParseName(Path.GetFileName(strFileName));
    string strDuration = objFolder.GetDetailsOf(folderItem, 27);
    return strDuration;
}

以下のように使います。

// 動画の長さ取得
string strDuration = GetMovieDurationText(@"C:\test.mp4");
Console.WriteLine(strDuration);         // -> 00:03:07

// TimeSpanに変換
TimeSpan ts = TimeSpan.Parse(strDuration);
Console.WriteLine(ts.Hours);            // -> 0
Console.WriteLine(ts.Minutes);          // -> 3
Console.WriteLine(ts.Seconds);          // -> 7

参考URL

Scriptable Shell Objects (Windows)

コメント

タイトルとURLをコピーしました