ファイルメーカーでメディア管理システムを作る話、最後のオマケは「僕にもできた動画サムネイルかんたん作成術」です。
オマケ:サムネイルを無理矢理作成
引き続きAppleScriptを併用したMacだけのお話で失礼します。
画像と違ってムービーファイルにはサムネイルが付きません。自分で作るしかありません。動画ファイルから静止画を作成するアプリなんてのもあるみたいですね。一般のイメージ管理ソフトを使用すると動画を登録した際にサムネイルを作ってくれます。そういうアプリケーションのライブラリ内を探れば生成されたthumbnailファイルを見つけることもできます。それを流用するという手もあります。
でもそれも面倒くさい!やってらんない。もっと楽ちん快適にムービーのサムネイルを作れないかと、少し考えました。思いつきました。
スクリーンショット
一番簡単なのはプレビューしながらスクリーンショットを撮ることです。ムービーを再生して、適当にエリア指定のスクリーンショットを撮ると保存されます。これをサムネイルとして取り込みます。
いやいや、いやいや、まだ面倒です。ファイル化したスクリーンショットファイルをまたわざわざ取り込むなんていちいちやってられません。ドラッグすらめんどいです。スクリーンショットをファイルではなくクリップボードにコピーして、FileMakerメディア管理システムのサムネイルフィールドにぽいっとペーストする。これが最短、理想の道です。よしこれで行こう。
クリップボードにスクリーンショット
前回の記事で書いたようにAppleScriptではキーストロークが使えました。スクリプトの書き方が判らなくてもショートカットを登録すればいろんな事ができます。エリアスクリーンショットをクリップボードにコピーするキーストロークをまずは走らせましょう。
Macのデフォルトでは確か command+shift+4 がエリアスクリーンショット、これに control を足すとエリアのスクリーンショットをクリップボードにコピーしてくれます。
tell application "System Events" key code 21 using {control down, command down} end tell
エリア選択したスクリーンショットをクリップボードに格納するAppleScriptの例ですが・・・。でもこれコントロール+コマンド+4になってます。私ショートカットをカスタマイズしていました。そのまま載せんなよ。すいません。普通はこれに shift down が加わります。コピペ非推奨。
「4」のキーコードは「21」ですが、「キーコード」などで検索していただきますとキーボードとコードの一覧なんかを書いてくれているページがいろいろヒットします。ありがとうございます。
特定ファイルに対して処理を行うわけではないので、FileMakerではそのままスクリプトステップに加えてボタンに仕込んでクリックすれば発動するようにしています。コマンド+シフト+コントロール+4 などというアクロバティックなショートカットを行うより、FileMakerの書類上でボタンをポンと押すのが想像以上に楽ちんです。
試しましょう。ムービープレビューが含まれるレイアウトにボタンを置いてスクリプトを割り当てます。ブラウズモードでムービーを再生、いいところでボタンクリック。カーソルが十字に変わって準備完了、プレビュー画面内でドラッグしてやればカシャッとスクリーンショットが撮れてクリップボードに格納されました。いいですね。
プレビューしながらかんたん便利にスクリーンショットをコピーできました。
次にやることはコピーされたスクリーンショットを目的のサムネイルフィールドにペーストすることです。スクリプトステップ「貼り付け」を書き足します。よしできた。簡単すぎます〜。
・・・と、しかしこれでは駄目なんです。テストすればわかりますが、スクリーンショットを撮り終えるまで貼り付けステップを待ってくれないのです。すでにあるクリップボード内容が速攻でサムネイルフィールドにペーストされてしまいました。そりゃそうなりますわな。ここはスクリーンショットを撮り終えるまでスクリプトを一時停止して待機させなければなりません。
スクリプト一時停止はファイルメーカーで最も嫌いな措置です。ポーズボタンもキー操作も厭なので時間で待機します。1秒か?3秒か?もたもたできないすね。かといって10秒?待ってられないですね。いずれにしてもスクリプト一時停止で秒数を指定することは困難です。使い勝手も甚だ悪いです。クリップボードに格納されたら次のステップみたいな条件指定できませんし。何とかしてコピーし終えてからペーストするまでステップを待ってほしい。どうすればいいでしょうか。いい手はないでしょうか。考えます。思いつきました。それはこうです!
Loop使っちゃえ
スクリプトの最初から少し見直します。
まず最初にどうでもいいテキスト情報、例えばそのレコードのファイル名でもいいですね。それを「コピー」します。次のステップはサムネイルフィールドにペーストします。同時に、変数例えば$itemに同じものを仕込みます。
この段階で、クリップボードにファイル名、サムネイルフィールドにもファイル名、変数$itemにもファイル名が格納されました。
次のスクリプトステップでAppleScriptを実行させます。エリアスクリーンショット開始です。
さて次です。次のステップはLoopです。
Loop
貼り付け[ サムネイル ]
If [ サムネイル = $item ]
スクリプト一時停止[ 1秒 ]
endif
Exit Loop If [ サムネイル ≠ $item ]
end Loop
クリップボードの内容が毎秒サムネイルフィールドにペーストされ続け、変数とサムネイルの内容が等しいことを確認し続けます。
Exit Loop If はループを抜ける条件です。変数とサムネイルフィールドの内容が異なっていればループは終わります。
スクリーンショットを撮ってクリップボードに格納されれば、次のタイミングでサムネイルフィールドに画像がペーストされます。変数$itemとサムネイルフィールドの内容が異なりましたから、そこでループは止まります。
どうですこれ。力技過ぎますか。ブラウズや編集していて、おっとこの動画にサムネイルが欲しいな、カシャ。と、軽い気持ちでサムネイル生成できてとっても快適です。
こんなやり方がベストかどうかわかりませんが、そうやって動画サムネイルは日々少しずつ充実していってます。
大量の動画ファイルのサムネイルを一気に取り込みたいときは全く別のアプローチを思いつけばいいでしょう。最初に言ったように、一般の写真管理ソフトが生成するサムネイル画像を上手に使うのもいい手かもしれません。
このスクリプトステップは動画のスクリーンショットを撮るだけのためにあるわけではありません。実はいろんな曲面でこの仕組みを使った処理を行っています。例えばウェブサイトからちょっとしたものをスクリーンショットしておくとか、いろいろ使い道があります。これの発展系についてはまたいつか何か書くかもしれません。
ということで、ファイルメーカーで作るメディア管理システムについての続編記事でした。誰かのヒントになり得るのか、あまりの稚拙さに達人から小馬鹿にされてお仕舞いなのか、それは書いた本人にはわからない。
FileMakerでメディア管理を作る話