Mac Blue-ray Playerで表示中のディスクの映像を1コマキャプチャして、その画像をオープン中のKeynote書類の末尾に追記するAppleScriptです。
Mac Blue-ray Playerには表示中の映像を静止画像のスナップショットを作成する機能があり、保存先のフォルダは「環境設定」で指定できるようになっています。
本ScriptはmacOS標準搭載のScript Menuに入れて実行することを想定しています。また、自分はMac Blue-ray PlayerでBru-rayディスクではなくDVDを再生することが多く、本検証もDVDディスクで行なっています(たぶんBlu-rayでも大丈夫です)。
キャプチャ先のKeynote書類をあらかじめ作成してオープンしておきます。次に、Mac Blue-ray Playerでディスクを再生して、キャプチャしたい場所で一時停止し、本Scriptをメニューから呼び出して実行すると、Playerの表示内容をキャプチャして、Keynote書類の末尾に新規スライドを追加し、そこにキャプチャした画像をインポートします。
Mac Blue-ray Playerは発売直後(2011年)に購入し、そのままアップデートして利用していたのですが、発売後7年以上経過した現在ではサポートが終了。
アプリケーションを作る側の人間から言わせれば、ひんぱんにオンラインアップデートを行い、6年以上も同一製品ラインナップを維持してきたというのは(品質について批判もないことはないですが)、素直に尊敬に値します。
話が横道に入ってしまいましたが、Mac Blue-ray Playerは現在では「Mac Blu-ray Player Pro」「Mac Blu-ray Player Standard」そして無料版の「Free Mac Media Player」へと別れたようです。
「Free Mac Media Player」は機能面からMac Blue-ray Playerとほぼ同じものに見えます。AppleScript用語辞書もMac Blue-ray Playerと同じものであり、Mac Blue-ray Player用のAppleScriptはFree Mac Media Playerでも使えます(tell application名を直すだけです)。
実際に、本Scriptを「Free Mac Media Player」向けに書き換えて実行できることを確認しています。
AppleScript名:Mac Blue-ray Playerで表示中の内容をKeynoteに追記 |
— Created 2018-07-02 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" property |NSURL| : a reference to current application’s |NSURL| property NSPredicate : a reference to current application’s NSPredicate property NSFileManager : a reference to current application’s NSFileManager property NSUserDefaults : a reference to current application’s NSUserDefaults property NSDirectoryEnumerationSkipsHiddenFiles : a reference to current application’s NSDirectoryEnumerationSkipsHiddenFiles set aExtension to "png" — Mac Blue-ray Player’s Snapshot file name extension set aKeyword to "スナップショット" –Mac Blue-ray Player’s Snapshot file name’s pre-fix (@Japanese User environment), maybe this is localized string –Mac Blueray Playerの設定からスナップショットの設定値を取得する set theID to "com.macblurayplayer.Mac Blu-ray Player" set theTargKey to "Preferences.snapshotSavePath" set vRes to defaultsReadFromPlistEntry(theID, theTargKey) of me –Mac Blueray Playerの環境設定に「~」(チルダ)が入っていた場合に備えて展開 set pathString to current application’s NSString’s stringWithString:vRes set sourceFolder to pathString’s stringByExpandingTildeInPath() –処理前にスナップショットのファイルを削除 set file1Res to getFilePathListByExtAndKeyword(sourceFolder, aExtension, aKeyword) of me –ファイル一覧取得 trashItemsByList(file1Res) of me –削除 –Mac Blueray Playerで表示している内容を設定中のフォルダに「スナップショット -YYYY-MM-DD at hh_mm_ss AM-9999999999.png」のファイル名で保存 tell application "Blu-ray Player" snapshot –こんだけ end tell –処理前にスナップショットのファイルを削除 set file2Res to getFilePathListByExtAndKeyword(sourceFolder, aExtension, aKeyword) of me –ファイル一覧取得 if file2Res = file1Res or file2Res = {} then return –No Snap –Add Snapshot images to Keynote repeat with i in file2Res set tmpFile to POSIX file i set tmpAlias to tmpFile as alias tell application "Keynote" tell front document set endSlide to make new slide at end set blankMaster to master slide "空白" –"Blank" in Japanese. This string is *localized* tell endSlide set base slide to blankMaster set thisImage to make new image with properties {file:tmpAlias} end tell end tell end tell –ファイル削除(ゴミ箱に移動) trashItemAt(tmpAlias) of me end repeat –指定フォルダ内のファイルを、拡張子と先頭キーワードで抽出 on getFilePathListByExtAndKeyword(aFol, aExt, aKeyword) set aFM to NSFileManager’s defaultManager() set aURL to |NSURL|’s fileURLWithPath:aFol set urlArray to aFM’s contentsOfDirectoryAtURL:aURL includingPropertiesForKeys:{} options:(NSDirectoryEnumerationSkipsHiddenFiles) |error|:(missing value) set thePred to NSPredicate’s predicateWithFormat:"pathExtension == [c]%@ && lastPathComponent BEGINSWITH %@" argumentArray:{aExt, aKeyword} set anArray to (urlArray’s filteredArrayUsingPredicate:thePred) if anArray = missing value then return {} return (anArray’s valueForKeyPath:"path") as list end getFilePathListByExtAndKeyword –ファイル削除(ゴミ箱に移動) POSIX path listで指定 on trashItemsByList(posixPathList) repeat with i in posixPathList set fRes to trashItemAt(i) of me if fRes = false then error "Error deleting a path:" & (i as string) end repeat end trashItemsByList –ファイル削除(ゴミ箱に移動) on trashItemAt(anAlias) set theNSFileManager to NSFileManager’s defaultManager() set anNSURL to |NSURL|’s fileURLWithPath:(POSIX path of anAlias) set theResult to theNSFileManager’s trashItemAtURL:anNSURL resultingItemURL:(missing value) |error|:(missing value) return (theResult as integer = 1) as boolean end trashItemAt –指定IDのplistから指定キーの内容を取り出す on defaultsReadFromPlistEntry(theID, theTargKey) set storedDefaults to (NSUserDefaults’s standardUserDefaults()’s persistentDomainForName:theID) set keyList to storedDefaults’s allKeys() as list if theTargKey is not in keyList then return false set aRes to (storedDefaults’s valueForKeyPath:theTargKey) as list of string or string — as anything return aRes end defaultsReadFromPlistEntry |