会社行きたくなかったんです。

自由になりたくて会社辞めました

IT Visual Studio プログラミング

VB.netでメディアファイル(写真、動画)のプロパティを取得する方法

更新日:

VB.netでメディアファイルのプロパティを取得するサンプルを作成しました。
画像や動画ファイルのプロパティの詳細タブに表示される情報をVB.netのプログラムで取得します。
写真の場合は、ファイルの更新日時とは別に撮影日時というプロパティがあります。
ムービーの場合は、更新日時が実際に撮影した時刻になりますが、撮影端末によっては、更新日時が世界標準時になっていて、時差が9時間あったりすることがあります。

スポンサーリンク

ムービーの場合、メタデータに保存されている 追加情報から撮影日時を知ることができる場合がありますが、今回は、VB.netでメディアファイルのプロパティを取得する 方法を紹介します。

VB.netでメディアファイルのプロパティを取得する方法

「参照の追加」で、「Microsoft Shell Controls And Automation」を追加します。

参照に「Shell32」が追加されました。

「Shell32」を右クリックして、プロパティを開きます。

「相互運用型の埋め込み」を「True」に変更します。

 

ソースコードは以下です。

        Dim shell As New ShellClass()
        Dim objFolder As Folder = shell.NameSpace("フォルダ名")
        Dim objItem As FolderItem
        Dim s項目名 As String
        Dim s値 As String
        Dim sText As String = ""
        objItem = objFolder.ParseName("ファイル名")
        For i As Integer = 0 To 1000
            s項目名 = objFolder.GetDetailsOf(Nothing, i)
            s値 = objFolder.GetDetailsOf(objItem, i)
            If Not String.IsNullOrEmpty(s値) Then
                sText &= i & "," & s項目名 & "," & s値 & vbCrLf
            End If
        Next

sTextが読取り結果です。

「相互運用型の埋め込み」を「True」にしていないと、「ShellClass」がエラーになります。
エラー内容は、

クラス 'ShellClass' への参照は、そのアセンブリが相互運用機能型を埋め込むように構成されている場合には許可されません。

です。

画像ファイルで取得したデータです。

0,名前,DSC_0132.JPG
1,サイズ,2.27 MB
2,項目の種類,JPEG イメージ
3,更新日時,2017/06/11 15:07
4,作成日時,2017/07/04 16:56
5,アクセス日時,2017/07/04 16:58
6,属性,A
9,認識された種類,イメージ
10,所有者,Administrators
11,分類,ピクチャ
12,撮影日時,‎2017/‎06/‎11 ‏‎15:07
19,評価,評価なし
30,カメラのモデル,SO-03G
31,大きさ,‪3840 x 2160‬
32,カメラの製造元,Sony
35,プログラム名,32.3.D.0.100_0_f900
53,コンピューター,PC-I7 (このコンピューター)
155,ファイル名,DSC_0132.JPG
160,ビットの深さ,24
161,水平方向の解像度,‎72 dpi
162,幅,‎3840 ピクセル
163,垂直方向の解像度,‎72 dpi
164,高さ,‎2160 ピクセル
173,共有,いいえ
176,フォルダー名,Temp
177,フォルダーのパス,C:\Temp
178,フォルダー,Temp (C:)
180,パス,C:\Temp\DSC_0132.JPG
182,種類,JPEG イメージ
188,リンクの状態,未解決
230,EXIF バージョン,0220
232,露出補正,‎0 ステップ
234,露出時間,‎1/50 秒
235,絞り値,f/2
236,フラッシュ モード,フラッシュなし (強制)
237,焦点距離,‎5 mm
239,ISO 速度,ISO-400
242,光源,不明
244,測光モード,パターン
245,向き,270 度回転
250,ホワイト バランス,自動
269,共有状態,プライベート

動画ファイルでも取得してみました。

0,名前,MOV_0117.mp4
1,サイズ,61.0 MB
2,項目の種類,MP4 ビデオ
3,更新日時,2017/06/11 11:25
4,作成日時,2017/07/04 16:08
5,アクセス日時,2017/07/04 16:58
6,属性,A
9,認識された種類,ビデオ
10,所有者,Administrators
11,分類,ビデオ
19,評価,評価なし
27,長さ,00:00:28
28,ビット レート,‎159kbps
29,保護,いいえ
53,コンピューター,PC-I7 (このコンピューター)
155,ファイル名,MOV_0117.mp4
173,共有,いいえ
176,フォルダー名,Temp
177,フォルダーのパス,C:\Temp
178,フォルダー,Temp (C:)
180,パス,C:\Temp\MOV_0117.mp4
182,種類,MP4 ビデオ
188,リンクの状態,未解決
269,共有状態,プライベート
280,ビデオ圧縮,{34363248-0000-0010-8000-00AA00389B71}
282,データ速度,‎17885kbps
283,フレーム高,1080
284,フレーム率,‎29 フレーム/秒
285,フレーム幅,1920
286,総ビット レート,‎18045kbps

撮影日時が分までしか取得できませんね。

FileInfoのLastWriteTimeで秒がわかるので、それを使えば良いと思います。
ツールで取り込むことで、更新日時が変わってしまう場合は、別の方法でファイルの順番を保つようにする必要があります。

動画ファイルのメタデータを読み込む方法はこちらです。

VB.netでメディアファイル(写真、動画)のメタデータを取得する方法

-IT, Visual Studio, プログラミング

Copyright© 自由になりたくて会社辞めました , 2024 AllRights Reserved Powered by AFFINGER4.