Archive for the 'QuickTime Player X' Category

2017/10/26 オープン中のムービーのファイルにラベルを付ける

QuickTime Playerでオープン中のファイルにラベルを付けるAppleScriptです。

QuickTimeムービーを取捨選別しているような場合に、オープン中のムービーだけにラベルをつけることで、作業を効率化しようというものです。

QuickTime Playerだけではなく、他のアプリケーションでも同様の処理は有用であるため、試してみるといいんじゃないでしょうか。

qt1.png
▲QuickTime Playerでオープン中のムービー

qt2.png
▲Script実行前

qt3.png
▲Script実行後

AppleScript名:オープン中のムービーのファイルにラベルを付ける
– Created 2017-10-26 by Takaaki Naganoya
– 2017 Piyomaru Software
–http://piyocast.com/as/archives/4925
tell application “QuickTime Player”
  set aDocList to every document
end tell

repeat with i in aDocList
  
  
tell application “QuickTime Player”
    tell i
      set aProp to properties
      
set aFile to (file of aProp) as alias
    end tell
  end tell
  
  
tell application “Finder”
    set label index of aFile to 5
  end tell
  
end repeat

★Click Here to Open This Script 

2017/03/19 QuickTime Player+macOS Sierraでのファイル保存

macOS 10.12上でQuickTime PlayerをAppleScriptからコントロールして、デスクトップ上にムービーを保存しようとすると、エラーが出て実行できません。

mov1.png

mov2.png

AppleScriptを実行すると、まずQuickTime Player側で「権限がない」云々というエラーが表示され、QuickTime Player側のエラーダイアログをクリックすると、スクリプトエディタ側でエラーが表示されます。

Appleにバグレポートしておきましたが、Apple的にはバグではなく「仕様」だと見なされている可能性があります。

デスクトップにムービーを保存することはできませんでしたが、ためしてみたら「ムービー」フォルダに保存することはできました

こういう「仕様」を説明もなしに決定されるのは迷惑ですし、きちんとリリースノートなどで説明してほしいものです。

AppleScript名:QTPlayerのバグ再現
set a to (choose file name) as string

tell application “QuickTime Player”
  tell document 1
    save in file a
  end tell
end tell

★Click Here to Open This Script 

AppleScript名:QTPlayerのバグ再現2
set a to (choose file name)

tell application “QuickTime Player”
  tell document 1
    save in a
  end tell
end tell

★Click Here to Open This Script 

2014/10/06 最前面のQuickTimeムービーの現在のコマをコピーしてPhotoshopでJPEG保存

オープン中のQuickTimeムービーの現在のコマを静止画としてコピーして、PhotoshopでWeb用のJPEG(サイズが小さい)として書き出すAppleScriptです。

QuickTimeムービーの見どころだけをかいつまんでJPEGに書き出していたのですが、画面キャプチャをとったりなんだりで、3ステップぐらい手作業が必要だったので、いっぱつで実行できるようにAppleScriptを書いてみました。

各所にdelayを入れて時間待ちしているところがミソです。入れないとAppleScriptの実行が速すぎて、コピーなどの動作が完了しなかったためです。

また、QuickTime Player(X)の機能がおっそろしく少ないので、仕方なくGUI Scriptingを併用(現在のコマの内容をコピーする)しています。実行には、GUI Scriptingを許可しておく必要があります。

4d31d0bd-9459-478a-8fd5-f941a13f5453.jpg
▲ムービーから1コマだけ抜き出してPhotoshopでWeb用JPEG(サイズが小さい)に書き出した結果

スクリプト名:最前面のQuickTimeムービーの現在のコマをコピーしてPhotoshopでJPEG保存
set dPath to path to desktop
set dPathStr to dPath as string
set fPath to dPathStr & (do shell script “uuidgen”) & “.jpg”

–QuickTime書類の縦横ドットサイズを取得
tell application “QuickTime Player”
  
  
–ムービーを開いていないかチェック
  
set dCount to count every document
  
if dCount < 1 then
    display dialog “ムービーを開いた状態で実行してください” with icon 2 with title “エラー:書き出し対象のムービーが存在しません” buttons {“OK”} default button 1
    
return
  end if
  
  
tell document 1
    set {xWidth, yHeight} to natural dimensions
  end tell
  
end tell

–QuickTime Playerの書類の現在の位置の内容(静止画)をコピー
activate application “QuickTime Player”

delay 0.1

tell application “System Events”
  tell process “QuickTime Player”
    click menu item 5 of menu 1 of menu bar item 4 of menu bar 1 –編集>コピー
  end tell
end tell

delay 0.1

–Photoshopで新規書類を作成してペースト
tell application id “com.adobe.photoshop”
  activate
  
  
delay 0.1
  
  
make new document with properties {width:xWidth, height:yHeight}
  
paste
  
  
delay 0.1
  
  
–Resize & Save
  
tell current document
    
    
set aH to height
    
set aW to width
    
    
set aH1 to aH * 0.25
    
set aW1 to aW * 0.25
    
    
–resize image width aW1 height aH1
    
    
export in file fPath as save for web
    
    
close without saving
    
  end tell
  
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2014/09/09 各画面でムービーを全画面再生 v2

複数のQuickTimeムービーを、Macに接続した複数の外部モニターで各画面に全画面表示させつつ同時再生させるAppleScriptの試作品(実用性を追求したものではなく、趣味のプログラム)です。

あらかじめQuickTime Playerでムービーを開いておくと、Macに接続している各モニタの座標にムービーのウィンドウを移動させたうえで、各ムービー同時に全画面再生を行います。

r0016652.JPG

Macに複数のディスプレイが接続されている場合に、それらがどういった並びになっているのかは、AppleScriptからは分かりにくい状態です。そのため、すべての画面が横一列に近い状態で並んでいる場合のみを想定します(他の場合にはエラー)。

system_profiler経由で接続されているディスプレイの解像度一覧を取得し、横幅の総和を求めます。

別途、Finder経由でデスクトップの大きさを取得し(Finder経由では各モニタの解像度は分からない)、system_profiler経由で取得した横幅の総和と比較。これらが同じ場合(重複なく横に並んでいる場合)には処理を実施します。

disparrange.png
▲OK 各ディスプレイ上でのフルスクリーン再生を許容する場合のディスプレイの並び例

bad_disp_arrange.png
▲NG 各ディスプレイ上でのフルスクリーン再生を許容しない場合のディスプレイの並び例

各QuickTimeムービーのウィンドウを、各モニタに移動させ、各ムービー冒頭からフルスクリーンで再生を行います。

ところどころ、いまひとつな部分はありますが……想定していた機能はすべて(無理矢理)詰め込みました。本当は、ディスプレイの名称と座標をセットにしたリストを作りたかったのですが……これに、意外と苦戦。「とりあえずできればいい」程度に割り切りを行ったので形になりました。

スクリプト名:各画面でムービーを全画面再生 v2
–各ディスプレイの解像度を取得する
set aRes to retDisplayResolution() of me
–> {{1920, 1200}, {1920, 1200}, {1920, 1080}}
set monNum to length of aRes
–> 3

tell application “QuickTime Player”
  set dCount to count every document
end tell

–Error検出
if monNum < dCount then
  display dialog “ムービーをフル画面再生させるモニターの数が不足しています。”
  
return
end if

–トータルのデスクトップの大きさを取得
tell application “Finder”
  set {dX1, dY1, dX2, dY2} to get bounds of window of desktop
  
–> {-1920, 0, 3840, 1200}
end tell

–デスクトップの横方向のサイズを求める
set dX11 to absNum(dX1) of me
set dX21 to absNum(dX2) of me
set dXtotal to dX11 + dX21

–デスクトップの縦方向のサイズを求める
set dY11 to absNum(dY1) of me
set dY21 to absNum(dY2) of me
set dYtotal to dY11 + dY21

–モニター解像度を縦、横ともに合計する
set eX to 0
set eY to 0
repeat with i in aRes
  copy i to {aX, aY}
  
set eX to eX + aX
  
set eY to eY + aY
end repeat

—モニター配置パターンは、横に並んでいる場合のみを考慮するものとする(よわ、、、)
if eX is not equal to dXtotal then
  display dialog “モニタが想定どおりに並んでいないため、処理を終了します”
  
return
end if

–QuickTime Playerの各ウィンドウの移動
set mCount to 1
set startX to dX1

repeat with i in aRes
  copy i to {iX, iY}
  
  
–ウィンドウ移動
  
set eRes to changeBoundsOfQTX(startX, 32, mCount) of me
  
if eRes = false then
    display dialog “QuickTime Playerのウィンドウ操作でエラー”
    
return
  end if
  
  
set startX to startX + (absNum(iX) of me)
  
set mCount to mCount + 1
  
end repeat

–オープン中の全ムービーの同時、フル画面表示再生
tell application “QuickTime Player”
  activate
  
set current time of every document to 0
  
present every document
end tell

delay 2 –ムービー再生ウィンドウの全画面化UIアニメーションが終わるまで時間待ち

tell application “QuickTime Player”
  play every document
end tell

–指定のQuickTime Playerのウィンドウを指定の座標に移動
on changeBoundsOfQTX(aStartX, aStartY, aNum)
  tell application “QuickTime Player”
    set maxW to count every window
    
if aNum > maxW then return false –Error
    
    
tell window aNum
      set {mX1, mY1, mX2, mY2} to bounds
    end tell
    
    
set mXdiff to (mX2 - mX1)
    
set mYdiff to (mY2 - mY1)
    
    
tell window aNum
      set bounds to {aStartX, aStartY, aStartX + mXdiff, aStartY + mYdiff}
    end tell
  end tell
  
  
return true –OK
  
end changeBoundsOfQTX

–モニタ解像度を取得。複数モニタ接続時にはリストで列挙
on retDisplayResolution()
  
  
set sRes to do shell script “/usr/sbin/system_profiler SPDisplaysDataType | grep Resolution”
  
  
set sList to paragraphs of sRes
  
set resList to {}
  
  
repeat with i in sList
    set j to contents of i
    
set x1 to word 2 of j as number
    
set y1 to word 4 of j as number
    
set the end of resList to {x1, y1}
  end repeat
  
  
return resList
  
end retDisplayResolution

–絶対値を求める
on absNum(q)
  if q is less than 0 then set q to -q
  
return q
end absNum

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2014/09/09 各画面でムービーを全画面再生

複数のQuickTimeムービーを、Macに接続した複数の外部モニターで各画面に全画面表示させつつ同時再生させるAppleScriptの試作品です。

同じオンライン対戦ゲーム(戦場の絆ポータブル)の内容をプレイヤーごとに視点を変えたムービーを(PSPエミュレータPPSSPP上でリプレイ再生させながらQuickTimeプレイヤーで画面キャプチャしつつ)作り、1つのディスプレイ上で同時再生させて見ていました。

c04dd845-6381-4b59-beb5-92f7157bd02b.jpg

ただ、せっかく外部モニタが3台つながっているので、3つのムービーを各ディスプレイに全画面表示させ同時に再生させようと考え、ちょっとAppleScriptを書いて試してみました。

r0016647.JPG

現状では、このAppleScriptだけでは動作は完結していません。

disparrange.png

ここでは、3つのムービーを各ディスプレイに1個ずつウィンドウを(手で)移動させる操作が必要で……すべてAppleScriptで動作を完結させるためには、接続されている各ディスプレイの解像度と位置関係をAppleScript側から把握する必要があります。

そこはまだ作っていないので、必要があれば調べる……といったところでしょうか。

スクリプト名:各画面でムービーを全画面再生
tell application “QuickTime Player”
  activate
  
set current time of every document to 0
  
present every document
  
play every document
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2012/04/29 QuickTime Xで録画して任意のファイル名で保存

QuickTime Xで録画して任意のファイル名で保存するAppleScriptです。

QuickTime Player 7+Mac OS X 10.7で動作するScriptを見て海外の友人が「QuickTime Player Xは機能が少ないよな〜」などとぼやいていたので、この程度ならできるだろうと考えてQuickTime Player X用に書き換えてみました。

相変わらず、時間計測にお手軽にdelayコマンドを使っていますが、録画開始時のGUIアニメーションで2秒近くロスがあります。このため、指定録画時間に2秒追加しています。

スクリプト名:QuickTime Xで録画
property recTime : 10 –録画時間(秒で指定する)

set aFilepath to choose file name with prompt "ムービーを保存するファイル名を入力"
set outFilepathPOSIX to POSIX path of aFilepath

tell application id "com.apple.QuickTimePlayerX"
  –確実に処理を行うためにムービーをすべてクローズ
  
close every document without saving
  
  
–録画開始
  
set recMov to (new movie recording)
  
tell recMov to start
end tell

–録画時間経過待ち
delay (recTime + 2) –秒単位でウェイト(UI系の動作により2秒程度ロスが発生するもよう)

tell application id "com.apple.QuickTimePlayerX"
  –録画停止
  
tell recMov to stop –この操作で、QT7の設定に従ってムービーが保存される
  
  
delay 1 –時間待ち
  
  
tell document 1
    –properties
    
set aProp to properties
    
close
  end tell
end tell

set originPath to file of aProp

–QT Player 7が自動保存したファイルを移動&リネーム
–ただし、自動保存したファイルのパスと移動先の衝突判定は省略
set movieOriginalFile to POSIX path of originPath
set sText to "mv " & quoted form of movieOriginalFile & " " & quoted form of outFilepathPOSIX
do shell script sText

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2011/06/07 QuickTimeムービーの縦横ドット数を取得する

現在オープン中のQuickTimeムービーの縦横ドット数を取得するAppleScriptです。

スクリプト名:QuickTimeムービーの縦横ドット数を取得する
tell application "QuickTime Player"
  tell document 1
    set {aWidth, aHeight} to natural dimensions
  end tell
end tell
–>{640, 480}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2011/04/03 QuickTime Player Xで録音を開始する

QuickTime Player Xで録音を開始するAppleScriptです。

AppleScriptObjCでRadikoの番組を予約録音するアプリケーションを自分用にやっつけで作ったときに、録音をQuickTime Player Xで行わせようとして作成したものです。

以前に試して作っておいたはずなのですが、いざ引っ張り出したら動かず……あわてて作り直した次第です。

スクリプト名:QuickTime Player Xで録音を開始する
tell application id “com.apple.QuickTimePlayerX”
  set recSound to (new audio recording)
  
  
tell recSound
    start
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に