メディア管理システムを作る上でのデータの要、即ち画像・メディアの各種メタデータについてです。今回は取得について。
メタデータの取得と利用
FileMakerで自作するメディア管理システムでは、そこいらの貧弱なメディア管理アプリケーションなどものともしない凄いシステムが作れます。
と、大袈裟にぶっこいておりますが、自分で作るからこそ自分に必要なデータを備えた最適なシステムが構築できるわけで、その必要なデータというのが即ちメタデータです。どういったメタデータを取得して利用するのかを自分で決めて構築できるというが自作の強み。
さてではメディアのメタデータをどうやって取得し、どうやって管理し、どうやって利用するのかですが、内容が多岐に渡りますね。ここでは、取得についての概要を記しておきたいと思います。
本稿のまとめ方について
属性やメタデータを取得する時、普通の人間はその項目ごとについて考えはじめます。
ファイル名、ファイルパス、ファイルタイプ、作成日付、画像サイズ、再生時間、カメラ機種、著作権情報、キーワード、見出し、場所 … いろいろあってきりがないですね。
作り手の側に立つと、項目ごとに考えても埒が明かないから、取得方法別に捉えたりします。ということで、取得する方法をレベルに分けて順に進める事にします。
メタデータの取得を方法別にレベル分け
メタデータの取得レベルを設定しました。
LEVEL 1 何もしない
LEVEL 2 GetAsText
LEVEL 3 GetContainerAttribute
LEVEL 4 AppleScript
LEVEL 5 ExifTool
こんな感じで、取得方法別に何が取得できるかを知っていくのです。では行きます。
LEVEL 1 何もしない
取得できる項目: ファイルパス, ファイル名, サムネイル
重要項目: とくになし
何もしないのがレベル1です。
何もしなければ何も取得できませんが、画像をフォルダでインポートする際には基本の情報が取得できます。
ファイル > レコードのインポート > フォルダ でメディアをインポートすると、インポート画面でファイル名、ファイルパス、サムネールが同時に取得できます。
ファイル名、ファイルパス、サムネイルが取得できますから、最低限、これだけあればメディアカタログ風のものは出来上がります。
これだけあれば使える。OKさ。というデータベースなら、十分賄えるということになります。
これは実作編 Ver.0 基本で示した状態です。実際、レイアウトやスクリプトの工夫でそれなりのものが出来上がります。ダウンロードもできますのでお試しください。
実際にはこれだけではやはり力不足で、このままでは済みません。
LEVEL 2 GetAsText
取得できる項目: ファイルパス, ファイル名, 種類, サイズ
重要項目:ファイルパス
FileMakerの関数 GetAsText ( データ ) を使います。「データ」にオブジェクトフィールドを指定します。
GetAsTextでは、情報を何行かのテキストで返します。何が返されるかはデータ種類によって異なります。
remote:cat.jpg
size:320,240
JPEG:Images/Animals/cat.jpg
画像なら縦横サイズも得られますね。JPEG: というようにファイルタイプも取得できます。そして大抵の場合、最後の行がパスです。GetAsText では、パスの取得が最重要の役割となります。
ここでパスを取得しておくことが、メディア管理システムでは必須事項となります。
メディアを内部に格納している場合は相対パスが返されるので、パスとして利用する際には若干の手続きを行ったりします。
パスの取得についての詳細はこちらの記事を参照してください。
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” と書くことで、取得できる全てをゲットします。
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 を越えた別のものを併用します。
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
※ $posix にPOSIXを、@FileMaker にFileMakerの名前をあてがいます。結果フィールドという名前のフィールドが存在することが前提です
FileMakerのパスをPOSIXに変換したフィールド、結果フィールド、FileMakerのアプリ名(カスタム関数)を作成しておき、このスクリプトテンプレートの各所に当てはめて(置換)テキストを作成し、それを「AppleScriptを実行」で実行させます。
creation date(作成日), modification date(変更日), size(ファイルサイズ) など、コマンドをすげ替えていくつかのデータを扱えます。
メタデータとしてファイル属性の情報を取得するためにAppleScriptを使う必要はあまりないかもしれません。他で代用できることも多いし。ただし、AppleScriptが有利な点があります。メタデータではなくてファイルそのものから情報を得るので、メタデータをすべて削除したメディアファイルであっても、日付やサイズなどのファイル属性を取得できます。
「Finderで表示」「ゴミ箱に捨てる」「ファイルにコメントを書き込む」のようなファイル操作にも威力を発揮します(FileMaker 18以降では、ファイル名変更、ゴミ箱などいくつかファイル操作ができるようになりました)
そしてなにより、次のレベルに必須なターミナルにコマンドを送りつけるという大事な仕事があります。
LEVEL 5 Exiftool
取得できる項目: すべてのExif、IPTC、その他
必要な措置: Exiftoolをインストールしておくこと
ありとあらゆるすべてのメタデータを扱える最強アプリ、ご存じ Exiftool でございます。メタデータに関してはこれさえ使えば他の全ては不要になるレベルで何でもあります。取得するだけでなく、編集したり追加したりもできます。
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のかんたんなメモ
FileMaker から UNIXコマンドを利用する話
「AppleScriptを実行」をUNIXコマンドを自在に扱えるようになると世界が広がります。
LEVEL 3 GetContainerAttribute と同じような使い方ができるわけで、即ち、属性(ExifToolでは”タグ”)を個別にゲットすることもできるし、まとめて全部取得してから必要なデータを取り出すこともできます。
今ここで話す内容でもないのですが、参考のリンクを置いておきます。
ExifToolのインストール
公式 https://exiftool.org がインストーラーを用意してくださっているのでダウンロードすれば簡単にインストールできます。
使い方
使い方は「exiftool 」で始まるコマンドを送り込むだけです。
メタデータを指名して取得したり、まとめて全部ゲットしたり、編集したり追加したりできます。どのように使うかはお好み次第です。
ExifToolをFileMakerのメディア管理システムと連携できさえすれば、メタデータに関してどんなカタログソフトよりも最強の機能を手に入れることが出来ます。
基本のコマンドなどは ExifToolのかんたんなメモ を参照ください。
FileMakerで作るメディア管理では、基本ExifToolのコマンドとコピーコマンド pbcopy を利用して「メタデータを取得してコピー、FileMakerのフィールドにペースト」することで機能させていきます。
まとめてゲットしてから個別に登録してポータルで使うとか
メタデータをまとめてゲットしてフィールドにコピーした後、スクリプトを駆使して行ごとに別テーブルにレコードを作成、リレーションしてポータルで表示するというような方法も執れます。
これはExifToolに限らず、LEVEL 3 GetContainerAttribute でも有効な技ですね。
このような形でメタデータを関連レコードとして登録できた以上、見て確認するだけに留まらず、メタデータのキーで細かく抽出したり絞り込んだり検索したり、思うがままにメディアデータベースを機能させることができます。
実践
さて、LEVELに分けてメタデータの取得を見てきました。
FileMakerでこれらをどのように管理し、利用していくのか、上記に一つ例を挙げましたが、個別具体的な話になってきますし、また長い旅が始まります。次回「メタデータの管理」あるいはシリーズ実作編の中で徐々に行っていくことにしましょう。
「メタデータの管理」につづく
続きました。
FileMaker メディア管理 – メタデータの取得と利用(LEVEL 3 編)
さらに続きました。
FIleMaker メディア管理 – メタデータの取得と利用(LEVEL 5 ExifTool 編)