FileMakerでメディア管理のデータベースを実際に作りながら進める実作編、サムネイルについていくつかの追加を施します。
このページ内の見出し
サムネイル – 工夫をプラス
FileMakerで写真や動画を管理するデータベースを実際に作っていく試み、実作編の三回目、サムネイルです。今回ファイルはVer.2、ダウンロードはこちらです。2021年8月、Ver.2 は パス部分の修正を施した Ver. 2.2になっております。
眺めて弄って試してください。このファイルをベースにお話を始めます。
このファイル、ちょっと修正して差し替えました(2021.07.21)
ダウンロードされた方は再ダウンロードお願いします。
サムネイルフィールドはGetThumbnail関数を使ってオブジェクトからサムネイルを作成するだけの簡単な計算式を備えるオブジェクトフィールドです。
しかしそれだけでは力不足。何かの折にサムネイルが作られず「?」になったり、あるいは単に「サムネイルを再生成したい」ということもあるし、もうちょっと状況に応じた細やかな対処が必要です。措置を施しました。
Ver.2 ファイルで行った措置は次のようなことです。
- サムネイルを作り直すスクリプト(シンプル)
- サムネイルを作り直すスクリプト(強引)
- オブジェクトの種類に応じた代替アイコンを表示する仕組み
- ムービーのサムネイルを撮影するスクリプト(Macのみ)
- 小技:「既存にないデータのみインポートする」フォルダ監視的機能
サムネイルの再生成に関するスクリプト
サムネイル生成(シンプル)
単にサムネイルを再生成したいときのために、スクリプト「サムネイルを作成」を作成、中身はシンプルなGetThumbnail関数で、オブジェクトフィールドからサムネイルを作成します。これをボタンにでも仕込んでおけばいつでもサムネイルを作り直せます。
でもそれに留まらず、次の強引バージョンもセットで作ります。結果的に、参照なら強引、そうでない画像系ならシンプルというスクリプトになりました。
サムネイル生成(強引)
サムネイルが「?」表示になってしまうケースが希にあります。参照で読み込んだオブジェクトを再度フォルダインポートして更新してしまったときなどに発生します。参照メディアから再度サムネイルを作ることはGetThumbnailでは出来ないんです。強引に作る必要があります。
この件については FileMakerメディア管理 – 参照ファイルのサムネイルを作りたい にありますのでご参照ください。
仮のグローバルフィールドに一旦読み込んでサムネイルを作るという力技です。これを実作編のバージョン内に組み入れました。
サムネイルが作成されないメディア
サムネイルがいつも作成できるとは限りません。写真や一般的な画像ファイルならいいんですが、メディア管理ですから動画やオーディオのファイルもあります。動画やオーディオのファイルではサムネイルをゲットしようがありません。
FileMakerで作るメディアファイルの大きな弱点
そして根本的な問題として、FileMakerで扱えるメディアファイルは極めて少ないです。正直「メディア管理」と偉そうに言えるレベルのデータベースは元々作れません。
どういうファイルが扱えるか、FileMakerのヘルプ「オブジェクトフィールドのデータ操作」で確認することができます。
オブジェクトフィールドのデータ操作 ver.17
オブジェクトフィールドのデータ操作 ver.19
以下はv19のデータですが、たったこれだけのファイルタイプしか扱えません。17ではPhotoshopのpsdすら扱えない酷い有様でした(FileMaker でメディア管理 ・・・ Photoshop .psd の扱い)
ファイルタイプ サポートされる形式タイプ ピクチャ Encapsulated Postscript (.eps)
GIF (.gif)
HEIF/HEIC (.heic) (macOS, iOS, iPadOS)
JPEG/JFIF (.jpg)
PDF (.pdf) (macOS)
Photoshop (.psd) (macOS)
PNG (.png)
TIFF (.tif)
Windows ビットマップ (.bmp)
Windows メタファイル/拡張メタファイル (.wmf/.emf) (Windows)オーディオ/ビデオ AIFF オーディオファイル (aif、.aiff)
AVI ムービー (.avi)
FLAC オーディオファイル (.flac) (iOS、iPadOS)
MP3 オーディオファイル (.mp3)
MPEG-4 オーディオファイル (.m4a)
MPEG-4 ムービー (.mp4)
MPEG ムービー (.mpg、.mpeg)
MPEG-4 ビデオファイル (.m4v)
QuickTime ムービー (.mov、.qt) (下記のメモを参照)
Sun オーディオファイル (.au)
WAVE オーディオファイル (wav)
Windows Media Audio (.wma)
Windows Media Video (.wmv)https://help.claris.com/ja/pro-help/content/data-in-container-fields.html?Highlight=オブジェクトフィールド
非対応のメディアファイルを登録するとアイコンの表示となります。

FileMaker事情による新たな分類を作成する
サムネイルが作れないファイルタイプは「?」表示になります。?ではかっこ悪いので対処しましょう。
サムネイルというよりアイコンと考え、ビデオファイル、オーディオファイル、非対応の画像ファイルのデフォルトのアイコンを登録しておき、代替としてこれを表示できるようにしてみました。
これを実現するためには、ビデオ、オーディオ、非対応タイプの分類をしてやる必要があります。分類に応じて代替画像をサムネイルフィールドに収めるんです。
ヘルプを元に分類を作る
自動で分類させるためにはファイルタイプを仕込まなければなりません。仕方ない。仕込みましょう。良い方法があります。値一覧を使うんです。
上記FileMakerのヘルプページに扱えるファイルタイプが載っています。幸い、というと変ですが、幸い扱えるタイプが少なすぎて手動でリストを作るのも苦痛になりません。
値一覧に「video」と「audio」と「picture」を作成し、ヘルプページに載っているタイプ(拡張子)をリストします。実際にはこれ以外に「PDF」があります。「picture」にリストされていない画像ファイルのタイプは全て未対応ということになります。
グローバルなオブジェクトフィールドを三つ作り、代替画像を登録します。例えばこんな感じ。
読み込むメディアファイルの拡張子と値一覧のリストを比較してビデオ、オーディオ、ピクチャ、PDF、その他未対応を判断、分類します。
以下ちょっとごちゃごちゃしていますがリストを元に分類を決定するフィールド定義の計算式です💦
If ( PatternCount ( ValueListItems ( Get(ファイル名) ; "audio" ) ; GetValue ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ; ValueCount ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ) ) ) ; "audio"; If ( PatternCount ( ValueListItems ( Get(ファイル名) ; "video" ) ; GetValue ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ; ValueCount ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ) ) ) ; "video"; If ( PatternCount ( ValueListItems ( Get(ファイル名) ; "picture" ) ; GetValue ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ; ValueCount ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ) ) ) ; "picture"; If ( GetValue ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ; ValueCount ( Substitute ( GetAsText ( MediaDB::オブジェクト ) ; "." ; ¶ ) ) ) = "pdf" ; "pdf" ; "other" ) ) ) )
要は、オブジェクトの拡張子が値一覧オーディオやビデオに含まれるかを順にIFってる式です。値一覧はValueListItems関数です。
分類が決まれば、その分類に応じて代替画像をサムネイルフィールドに送り込みます。
これまでのサムネイルフィールド定義を見直し、これらの事情を含めて計算式を書き直してみましょう。
Case ( GetAsBoolean ( MediaDB::video_thumb ) = 1 ; GetThumbnail ( MediaDB::video_thumb ; 150 ; 150 ) ; MediaDB::オブジェクト種類 = "other" ; GetThumbnail ( System::icon_def ; 100 ; 100 ); MediaDB::オブジェクト種類 = "video" ; GetThumbnail ( System::icon_movie ; 100 ; 100 ); MediaDB::オブジェクト種類 = "audio" ; GetThumbnail ( System::icon_audio ; 100 ; 100 ); GetThumbnail ( MediaDB::オブジェクト ; 150 ; 150) )
オブジェクトの種類によってサムネイル画像を代替から作るという計算式ですね。
こうして「サムネイル」という名のフィールドは小さな画像またはアイコンを格納する役割を得ました。
ここまで出来たので、応用でいくつかのスクリプトを作ってボタンに割り当てたりします。
例えば、サムネイルが「?」になっているレコードだけを検索したり、絞り込んだ「?」レコードにまとめてサムネイル再生成を施したりします。
詳しくは実際のファイルでご確認ください。
ところで、上記計算式の中に GetAsBoolean ( MediaDB::video_thumb ) という聞き捨てならない式がありますが、次はそれについてです。
ビデオファイルのポスター画像を撮影する(Macのみ)
上記Caseの計算式に
GetAsBoolean ( MediaDB::video_thumb ) = 1 ; GetThumbnail ( MediaDB::video_thumb ; 150 ; 150 ) ;
があります。ビデオファイルであった場合、video_thumb というフィールドにオブジェクトがなければ代替アイコンを作成するという一文です。video_thumb というオブジェクトフィールドを作ってるんですよ。これは、ビデオファイルのサムネイル(ポスター画像)を収めるフィールドです。
ビデオファイルはプレビューできてもサムネイルを作れません。そこで、OSのスクリーンショット機能を使って無理矢理に作ってしまおうという仕組みを作っています。OSの機能を使うので、これはMac専用です。AppleScriptに匹敵するWindowsの機能を知らないのですいません。
この件はすでに書いていますので、リンクしておきます。
AppleScriptのショートカット実行を使ってスクリーンショットを撮って保存しているだけです。
サムネイルに関しては概ね以上です。
GetThumbnailを使うことで、大きさ違いの複数サムネイルを作ったり、サムネイルに留まらず大きめのプレビュー画像を作ったりもできます。
FileMakerメディア管理 – 参照ファイルのサムネイルを作りたい でもそういうことに触れていますので参考にしてください。このVer.2 ファイルでは、複数のサムネイルやプレビューは実装していません。
インポート – 既存にないデータのみを追加
さて、サムネイル以外に「フォルダ監視」と大袈裟に言ってしまいたいインポートの仕組みを実装しました。
「インポート」コマンドを実行すると、ダイアログが出てきてインポートの種類を選んだりしますね。大雑把に追加・更新・置換の三種類から選びます。
メディア管理の観点では、フォルダごとメディアを登録したりしています。ですので、同じフォルダを再びインポート対象にしたい場合が多々あります。登録後その同じフォルダに新しい画像が追加されたりしているので、それをデータベースにも追加したいといった使用法です。
FileMakerでは、フォルダをインポートする際に既存にデータがあれば無視してないものだけを新規に追加するという機能がありません。えっ。それできないの?はい。できません。それを無理矢理実現するには面倒な手続きが必要です。それを実装しています。
簡単に言うと、仮のテーブルを作ってそこに全部インポートしたあと、メインで必要としているレコードだけを絞り込んでインポートします。
ダミーテーブルまで作ってインポートを二回やるという面倒な仕組みですが、一旦作ってしまえば、ボタン一発でフォルダチェックのようなことができます。
これについてはまた長くなったので別記事なりました。FileMaker 追加のみインポート に続きます。
作って育てるFMメディアDB – 実作編 Ver.2.2 サムネイル
ファイルはデータがない状態です。適当に画像や動画を挿入したりフォルダごとインポートしてみたりして試してください。
スクリプトやファイル内容に不備があったらこっそり教えてください。