FileMakerでメディア管理 – メタデータの取得

メディア管理システムを作る上でのデータの要、即ち画像・メディアの各種メタデータについてです。今回は取得について。

メタデータの取得と利用

FileMakerで自作するメディア管理システムでは、そこいらの貧弱なメディア管理アプリケーションなどものともしない凄いシステムが作れます。

と、大袈裟にぶっこいておりますが、自分で作るからこそ自分に必要なデータを備えた最適なシステムが構築できるわけで、その必要なデータというのが即ちメタデータです。どういったメタデータを取得して利用するのかを自分で決めて構築できるというが自作の強み。

さてではメディアのメタデータをどうやって取得し、どうやって管理し、どうやって利用するのかですが、内容が多岐に渡りますね。ここでは、取得についての概要を記しておきたいと思います。

本稿のまとめ方について

属性やメタデータを取得する話を整理しようとして、最初は個別に項目を順序立てようとしていました。

ファイル名、ファイルパス、ファイルタイプ、作成日付、ファイル容量、画像サイズ、再生時間、カメラ機種、著作権情報、キーワード、レート、見出し、場所、GPS… みたいな感じで羅列してその取得方法を書いていくという。

普通の人間は、知りたい項目を優先するという順序で思考しますから自然な流れですが、メタデータの項目はリストしきれないほど沢山あるものだし、それに対して取得方法は基本的に数種類しかありません。

作り手側として、取得方法別に記していくのが良いとわかります(←ようやく判ったらしい)

ということで、取得する方法をレベルに分けて順に進める事にします。

メタデータの取得を方法別にレベル分け

メタデータの取得レベルを設定しました。

LEVEL 1 何もしない

LEVEL 2 GetAsText

LEVEL 3 GetContainerAttribute

LEVEL 4 AppleScript

LEVEL 5 ExifTool

こんな感じで、取得方法別に何が取得できるかを知っていくのです。では行きます。

LEVEL 1 何もしない

取得できる項目: ファイルパス, ファイル名, サムネイル
重要項目: とくになし

何もしないのがレベル1です。

何もしなければ何も取得できませんが、画像をフォルダでインポートする際には基本の情報が取得できます。

ファイル > レコードのインポート > フォルダ でメディアをインポートすると、インポート画面でファイル名、ファイルパス、サムネールが同時に取得できます。

インポートダイアログ
v17までのインポート画面
インポートダイアログ
v18以降のインポート画面

ファイル名、ファイルパス、サムネイルが取得できますから、最低限、これだけあればメディアカタログ風のものは出来上がります。

これだけあれば使える。OKさ。というデータベースなら、十分賄えるということになります。

これは実作編 Ver.0 基本で示した状態です。実際、レイアウトやスクリプトの工夫でそれなりのものが出来上がります。ダウンロードもできますのでお試しください。

FileMakerメディア管理 実作編 Ver.0 基本

実際にはこれだけではやはり力不足で、このままでは済みません。

LEVEL 2 GetAsText

取得できる項目: ファイルパス, ファイル名, 種類, サイズ
重要項目:ファイルパス

FileMakerの関数 GetAsText ( データ ) を使います。「データ」にオブジェクトフィールドを指定します。

GetAsTextでは、情報を何行かのテキストで返します。何が返されるかはデータ種類によって異なります。

remote:cat.jpg
size:320,240
JPEG:Images/Animals/cat.jpg

画像なら縦横サイズも得られますね。JPEG: というようにファイルタイプも取得できます。そして大抵の場合、最後の行がパスです。GetAsText では、パスの取得が最重要の役割となります。

ここでパスを取得しておくことが、メディア管理システムでは必須事項となります。

メディアを内部に格納している場合は相対パスが返されるので、パスとして利用する際には若干の手続きを行ったりします。

パスの取得についての詳細はこちら実践編の記事を参照してください。FileMakerメディア管理 実作編 Ver.1 ファイルパスを取得する

FileMakerメディア管理 実作編 Ver.1 ファイルパスを取得する

LEVEL 2 GetAsText ではその他縦横サイズや簡易なメディア種類が取得できますので、それだけ情報があれば目的を達成できるのさ。という場合にはこのレベルで十分に賄うことが出来ます。

LEVEL 3 GetContainerAttribute

取得できる項目: オブジェクトの様々なメタデータ
重要項目:StorageType

オブジェクト関数 GetContainerAttribute は、オブジェクトと属性名を指定することでメタデータをゲットできます。メタデータだけじゃなく、FileMakerのシステム的なデータもゲットできます。こう書きます。

GetContainerAttribute (フィールド ; "属性名")

「フィールド」にオブジェクトのフィールド、「属性名」に、項目名(いわゆるキー)を指定します。

例えば

 GetContainerAttribute (フィールド ; "filename")

こう書くとファイル名が取得できます。

この関数でファイルパスが取得できないことが腑に落ちませんが。

取得できる項目は、ファイル名、保存タイプ(格納か参照かなど)、ファイルサイズ、画像の幅と高さ、DPI、アルファチャンネルの有無、写真の撮影日、カメラ情報、角度、オーディオファイルのメタデータ、その他、いろいろあります。

重要なキーは「storageType」それと必要に応じて「MD5」と思います。

「strageType」は、FileMakerに画像をどのように保存したかを返します。参照か格納かを返しますから、分類や計算式の条件に使用します。つまり、GetAsText でパスを取得する際、格納か参照かで計算式を分岐するときに使います。storageType は必須かと思います。

これも実作編Ver.1 ファイルパスですでに利用していますのでご確認ください。
→ FileMakerメディア管理 実作編 Ver.1 ファイルパスを取得する

MD5はユニークであることの証明にもなるIDみたいなものですね。重複登録も防げます。必要であれば役に立つでしょう。

GetContainerAttributeは、わりといろいろとメタデータを取得できるので「ここまでできれば十分」と考えることもできるかもしれません。詳しくはFileMakerのヘルプを検索してご確認ください。GetContainerAttribute – FileMaker Pro ヘルプ

尚、属性に “all” と書くことで、取得できる全てをゲットします。

参考:ある写真データから “all” で取得したデータ
[General]
Filename: IMGP4906.JPG
Storage Type: File Reference
MD5: 1E11C93C8F4967F109C6FC7CBCD3C404
File Size: 9179509
Internal Size: 164
External Size: 9179509
External Files: 1[Image]
Width: 6000
Height: 4000
DPI Width: 300
DPI Height: 300
Transparency: 0 (False)[Photo]
Orientation: 1 (Normal)
Created: 2021/05/05 12:46:10
Modified:
Latitude:
Longitude:
Make: RICOH IMAGING COMPANY, LTD.
Model: PENTAX K-70

 

LEVEL 3 GetContainerAttribute で取得できるメタデータで満足できるか出来ないかが運命の別れ路。なぜなら、ここまでは FileMaker Pro の機能で賄えます。ここから先は、FileMaker を越えた別のものを併用します。

※ AppleScriptやターミナルを使いますので、ここより先はMac専用になります。OSレベルで似たことを実現することは出来ると思いますので、Windowsの場合は読み替えていただけるなら、、

LEVEL 4 AppleScript

取得できる項目: ファイルタイプ、ファイル名、サイズ、拡張子、作成日、変更日などファイル属性
重要事項:AppleScriptの使用そのもの。

レベル4というより番外編って感じですが、AppleScript を使ってファイルの属性を調べられます。

これまで、作成日や変更日やファイルサイズの取得にこの方法を使ってきました。

set filePath to POSIX file "$posix"
tell application "Finder"
set cdate to get creation date of file filePath
end tell

tell application "@FileMaker"
activate
set contents of field "結果フィールド" of current record to cdate as string
end tell

※ このスクリプトには仕込みが含まれますし次のステップも必要なのでこのままではコピペ使用不可ですよ。

FileMakerのパスをPOSIXに変換したフィールド、結果フィールド、FileMakerのアプリ名(カスタム関数)を作成しておき、このスクリプトテンプレートの各所に当てはめて(置換)テキストを作成し、それを「AppleScriptを実行」で実行させます。

creation date(作成日), modification date(変更日), size(ファイルサイズ) など、コマンドをすげ替えていくつかのデータを扱えます。

メタデータとしてファイル属性の情報を取得するためにAppleScriptを使う必要はあまりないかもしれません。他で代用できることも多いし。ただし、AppleScriptが有利な点があります。メタデータではなくてファイルそのものから情報を得るので、メタデータをすべて削除したメディアファイルであっても、日付やサイズなどのファイル属性を取得できます。

「Finderで表示」「ゴミ箱に捨てる」「ファイルにコメントを書き込む」のようなファイル操作にも威力を発揮します(FileMaker 18以降では、ファイル名変更、ゴミ箱などいくつかファイル操作ができるようになりました)

そしてなにより、次のレベルに必須なターミナルにコマンドを送りつけるという大事な仕事があります。

FileMakerでAppleScriptを実行させることについては、投稿がありますので参照してください。

FileMakerでメディア管理 その4 スクリプト#AppleScriptと組み合わせる

FileMakerからターミナルコマンドを送り込む二つの方法

LEVEL 5 Exiftool

取得できる項目: すべてのExif、IPTC、その他
必要な措置: Exiftoolをインストールしておくこと 

ありとあらゆるすべてのメタデータを扱える最強アプリ、ご存じ Exiftool でございます。メタデータに関してはこれさえ使えば他の全ては不要になるレベルで何でもあります。取得するだけでなく、編集したり追加したりもできます。

参考:Exiftool で取得したメタデータの例
ExifToolVersion: 12.27
FileName: IMGP4906.JPG
Directory: /Volumes/******/******/******/****/****/IMGP4906.jpg
FileSize: 8.8MiB
FileModifyDate: 2021: 05: 0512: 46: 16+09: 00
FileAccessDate: 2021: 06: 1913: 00: 19+09: 00
FileInodeChangeDate: 2021: 05: 0513: 27: 33+09: 00
FilePermissions: -rwxrwxrwx
FileType: JPEG
FileTypeExtension: jpg
MIMEType: image/jpeg
ExifByteOrder: Little-endian(Intel,II)
Make: RICOHIMAGINGCOMPANY,LTD.
Model: PENTAXK-70
Orientation: Horizontal(normal)
XResolution: 300
YResolution: 300
ResolutionUnit: inches
Software: PENTAXK-70Ver.1.11
ModifyDate: 2021: 05: 0512: 46: 10
Artist:
YCbCrPositioning: Co-sited
Copyright:
ExposureTime: 1/180
FNumber: 2.8
ExposureProgram: ShutterspeedpriorityAE
SensitivityType: StandardOutputSensitivity
StandardOutputSensitivity: 1600
ExifVersion: 0230
DateTimeOriginal: 2021: 05: 0512: 46: 10
CreateDate: 2021: 05: 0512: 46: 10
ComponentsConfiguration: Y,Cb,Cr,-
Flash: Off,Didnotfire
FocalLength: 35.0mm
PentaxVersion: 12.1.3.0
PentaxModelType: 0
PentaxModelID: K-70
Date: 2021: 05: 05
Time: 12: 46: 10
Quality: Best
FlashMode: Off,Didnotfire;Internal
FocusMode: AF-A(Focus-priority)
AFPointSelected: Auto;0
ISO: 1600
ExposureCompensation: 0
MeteringMode: Multi-segment
AutoBracketing: 0EV,NoExtendedBracket
WhiteBalance: MultiAuto
DSPFirmwareVersion: 1.11.20.06
EffectiveLV: 6.5
ImageEditing: None
PictureMode: ShutterSpeedPriority;1/2EVsteps
DriveMode: Single-frame;NoTimer;ShutterButton;HDRManual
DataScaling: 8063
LensType: smcPENTAX-DA35mmF2.8MacroLimited
ExtenderStatus: Notattached
SensitivityAdjust: 0
ImageEditCount: 0
CameraTemperature: 22C
AELock: Off
NoiseReduction: Off
FlashExposureComp: 0;0
ImageTone: Natural
ShakeReduction: On(AAsimulationoff)
ShutterCount: 9258
FacesDetected: 0
FacePosition: 00
RawDevelopmentProcess: 17(K-70)
Hue: Normal
WhiteBalanceAutoAdjustment: Off
TungstenAWB: StrongCorrection
DynamicRangeExpansion: On;Auto;0;0
WorldTimeLocation: Hometown
HometownDST: No
DestinationDST: No
HometownCity: Tokyo
DestinationCity: NewYork
HighLowKeyAdj: 0
ContrastHighlight: 0
ContrastShadow: 0
ContrastHighlightShadowAdj: Off
FineSharpness: Off;Normal
HighISONoiseReduction: Auto;Active(Weak)
AFAdjustment: 0
MonochromeFilterEffect: None
MonochromeToning: None
FaceDetect: Off;0facesdetected;0
FaceDetectFrameSize: 00
ShadowCorrection: Auto
CrossProcess: Off
DistortionCorrection: On
ChromaticAberrationCorrection: On
PeripheralIlluminationCorr: Off
DiffractionCorrection: On
BleachBypassToning: n/a
AspectRatio: 3: 2
HDR: HDRAuto;Auto-alignOn;2EV;0
ShutterType: Normal
IntervalShooting: Off
SkinToneCorrection: Off
ClarityControl: Off
BlackPoint: 256256256256
WhitePoint: 153928192819216320
AutoAperture: On
MinAperture: 22
LensFStops: 8.5
MinFocusDistance: 0.13-0.19m
FocusRangeIndex: 0(veryclose)
LensFocalLength: 35.0mm
NominalMaxAperture: 2.8
NominalMinAperture: 23
MaxAperture: 2.8
AEMeteringSegments: 6.66.15.55.55.95.55.65.44.42.82.55.55.65.95.85.44.64.43.53.63.23.45.95.55.65.64.93.83.53.02.23.54.05.23.95.45.93.83.43.63.52.63.13.64.43.55.25.63.93.93.43.42.92.83.44.44.04.95.14.03.02.82.93.23.54.05.15.05.25.03.93.63.23.13.43.64.1
FlashMeteringSegments: 00000000000000000000000000000000000000000000000000000000000000000000000000000
SlaveFlashMeteringSegments: 00000000000000000000000000000000000000000000000000000000000000000000000000000
ManufactureDate: 2017: 01: 16
ProductionCode: 2.1
InternalSerialNumber: 7016223
PowerSource: BodyBattery
BodyBatteryState: ClosetoFull
BodyBatteryVoltage1: 7.78V
BodyBatteryVoltage2: 7.35V
ColorMatrixA2: 58572334008192003357856
ColorMatrixB2: 13952-4416-1344-147213792-4128128-281610880
AFPredictor: -1021
AFDefocus: 135
AFIntegrationTime: 4ms
AFPointsInFocus: Unknown(255)
KelvinWB_Daylight: 520502.20605468751.5823974609375
KelvinWB_01: 250001.158691406252.9715576171875
KelvinWB_02: 263001.2199707031252.7918701171875
KelvinWB_03: 278001.30187988281252.6280517578125
KelvinWB_04: 294001.3830566406252.48291015625
KelvinWB_05: 313001.46936035156252.33740234375
KelvinWB_06: 333001.5549316406252.2081298828125
KelvinWB_07: 357001.65539550781252.078857421875
KelvinWB_08: 385001.770996093751.95556640625
KelvinWB_09: 417001.8964843751.84130859375
KelvinWB_10: 455002.02893066406251.7308349609375
KelvinWB_11: 500002.15808105468751.6240234375
KelvinWB_12: 556002.279785156251.515380859375
KelvinWB_13: 625002.388183593751.4093017578125
KelvinWB_14: 714002.495605468751.3099365234375
KelvinWB_15: 833002.63269042968751.22998046875
KelvinWB_16: 1000002.86230468751.19580078125
WBShiftAB: 0
WBShiftGM: 0
EVSteps: 1/2EVSteps
SensitivitySteps: 1EVSteps
SerialNumber: 7298699
SourceDirectoryIndex: 0
SourceFileIndex: 0
LevelOrientation: Horizontal(normal)
CompositionAdjust: Off
RollAngle: -1
PitchAngle: -4.5
CompositionAdjustX: 101
CompositionAdjustY: 1
CompositionAdjustRotation: 9
ContrastDetectAFArea: 0000
PixelShiftResolution: Off
NumAFPoints: 11
FlashpixVersion: 0100
ColorSpace: sRGB
ExifImageWidth: 6000
ExifImageHeight: 4000
InteropIndex: R98-DCFbasicfile(sRGB)
InteropVersion: 0100
SensingMethod: One-chipcolorarea
FileSource: DigitalCamera
SceneType: Directlyphotographed
CustomRendered: Custom
ExposureMode: Manual
FocalLengthIn35mmFormat: 52mm
SceneCaptureType: Standard
Contrast: Normal
Saturation: Normal
Sharpness: Normal
SubjectDistanceRange: Macro
GPSVersionID: 2.3.0.0
PrintIMVersion: 0300
Compression: JPEG(old-style)
ThumbnailOffset: 32138
ThumbnailLength: 7168
PreviewImageSize: 720×480
PreviewImageLength: 57546
PreviewImageStart: 39396
PreviewImageBorders: 0000
ImageWidth: 6000
ImageHeight: 4000
EncodingProcess: BaselineDCT,Huffmancoding
BitsPerSample: 8
ColorComponents: 3
YCbCrSubSampling: YCbCr4: 2: 2(21)
Aperture: 2.8
ImageSize: 6000×4000
LensID: smcPENTAX-DA35mmF2.8MacroLimited
Megapixels: 24.0
PreviewImage: (Binarydata57546bytes,use-boptiontoextract)
ScaleFactor35efl: 1.5
ShutterSpeed: 1/180
ThumbnailImage: (Binarydata7168bytes,use-boptiontoextract)
CircleOfConfusion: 0.020mm
FOV: 38.2deg
FocalLength35efl: 35.0mm(35mmequivalent: 52.0mm)
HyperfocalDistance: 21.63m
LightValue: 6.5

 

これだけのものが一気に取得できる上に追加・編集までできるとなれば、もうこいつだけあれば十分だと思えましょう。

ExifToolについての簡単なメモをすでに残していますので、参考にしていただければ。→ ExifToolのかんたんなメモ

ExiftoolとFileMakerを連携させてメタデータを取得するために、csvファイルを介してやりとりすることも試してみたことがあります。しかし問題はその手続きが面倒すぎたことでした( → ターミナルで動くのにAutomatorでエラー

面倒の原因は作成者の知恵が不足しすぎていたせいです。後にそれが僅かに是正され、面倒ではない方法を確立できました(→ 続編: Automatorで苦労したのでFileMakerで自動化した

その方法とはこうです。「AppleScriptを実行」を使ってターミナルにExiftoolのコマンドと、その結果をクリップボードにコピーするコマンドをセットで送り込み、FileMakerのフィールドにペーストするんです。csvを介する必要などまったくありません。

LEVEL 3 GetContainerAttribute と同じような使い方ができるわけで、即ち、属性(ExifToolでは”タグ”)を個別にゲットすることもできるし、まとめて全部取得してから必要なデータを取り出すこともできます。

Windowsの場合、AppleScriptに該当するアプリを知りませんので何も言えないんですけど、FileMakerからコマンドラインへ送る方法があればその方法を使ってください。

ExifToolのインストール

公式 https://exiftool.org がインストーラーを用意してくださっているのでダウンロードすれば簡単にインストールできます。

使い方

使い方は「exiftool 」で始まるコマンドを送り込むだけです。

メタデータを指名して取得したり、まとめて全部ゲットしたり、編集したり追加したりできます。どのように使うかはお好み次第です。

ExifToolをFileMakerのメディア管理システムと連携できさえすれば、メタデータに関してどんなカタログソフトよりも最強の機能を手に入れることが出来ます。

基本のコマンドなどは ExifToolのかんたんなメモ  を参照ください。

FileMakerで作るメディア管理では、基本ExifToolのコマンドとコピーコマンド pbcopy を利用して「メタデータを取得してコピー、FileMakerのフィールドにペースト」することで機能させていきます。

まとめてゲットしてから個別に登録してポータルで使うとか

メタデータをまとめてゲットしてフィールドにコピーした後、スクリプトを駆使して行ごとに別テーブルにレコードを作成、リレーションしてポータルで表示するというような方法も執れます。

メタデータポータルを含むレイアウト
メタデータ( ContainerAttribute と Exif )のポータルを含めたレイアウト

これはExifToolに限らず、LEVEL 3 GetContainerAttribute でも有効な技ですね。

このような形でメタデータを関連レコードとして登録できた以上、見て確認するだけに留まらず、メタデータのキーで細かく抽出したり絞り込んだり検索したり、思うがままにメディアデータベースを機能させることができます。

実践

さて、LEVELに分けてメタデータの取得を見てきました。

FileMakerでこれらをどのように管理し、利用していくのか、上記に一つ例を挙げましたが、個別具体的な話になってきますし、また長い旅が始まります。次回「メタデータの管理」あるいはシリーズ実作編の中で徐々に行っていくことにしましょう。

「メタデータの管理」につづく