Windows7のエクスプローラで動画ファイルを表示すると、「長さ」という列に動画の再生時間が表示されます。この「長さ」の値をスクリプトで取得する方法があれば教えてください。


お願いしている立場ですので言語は何でも構いませんが、vbscrpit / PowerShell / rubyなら嬉しいです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/08/03 14:06:43

ベストアンサー

id:cx20 No.1

回答回数607ベストアンサー獲得回数108

エクスプローラで表示される拡張情報は、Shell オブジェクトの ExtendedProperty() にて取得可能です。


ExtendedProperty は、「プロパティ名」を指定するか「SCID という形式」(「Format ID (FMTID)」と「Property ID (PID)」の組み合わせ)で指定します。


以下は、VBScript でのサンプルです。

' File : ShowExtendedProperty.vbs
' Usage : CScript //Nologo ShowExtendedProperty.vbs
' Description : VBScript から Shell.Application を使用してファイル拡張情報を表示するサンプル

Option Explicit

Const FMTID_AudioSummaryInformation = "{64440490-4C8B-11D1-8B70-080036B11A03}"

Call Main()

Sub Main()
    Dim strFilePath
    strFilePath = "C:\Users\Public\Videos\Sample Videos"
    Call ShowExtendedProperty( strFilePath )
End Sub

Sub ShowExtendedProperty( strFilePath )
    Dim objShell
    Set objShell = CreateObject("Shell.Application")

    Dim objFolder
    Set objFolder = objShell.Namespace(strFilePath)

    Dim objItem
    For Each objItem In objFolder.Items
       WScript.Echo "FileName : [" & objItem.Name & "]"
       WScript.Echo "Duration : [" & CStr(objItem.ExtendedProperty("Duration")) & "]" ' 単位は 100ns
       WScript.Echo "FMTID_AudioSummaryInformation,3 : [" & CStr(objItem.ExtendedProperty(FMTID_AudioSummaryInformation & " 3") ) & "]" ' 単位は 100ns
    Next
End Sub

実行結果

FileName : [野生動物.wmv]
Duration : [300930000]
FMTID_AudioSummaryInformation,3 : [300930000]

参考情報

■ ShellFolderItem.ExtendedProperty Method

http://msdn.microsoft.com/en-us/library/bb774055.aspx

■ System.Media.Duration (Windows)

http://msdn.microsoft.com/en-us/library/bb787399.aspx

■ ファイルの作成者情報を取得する方法(VB6.0)

http://hanatyan.sakura.ne.jp/patio/read.cgi?no=59

■ BlueLeaf1336-PROBLEMS-2006_0021 > DelphiでShellオブジェクトを使う > ShellFolderItem.ExtendedProperty(1)

http://www.geocities.jp/fjtkt/problems/2006_0021.html

id:teraco

提示された方法でばっちりでした!ありがとうございました!

※ ポイント付き質問にするの忘れたのでポイント送ります。

2011/08/03 14:07:49

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません