Archive for the 'QuickTime Player 7' Category

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

QuickTime Player 7+Mac OS X 10.7で、所定の時間だけムービー録画(おそらく、内蔵のiSight/Face Time Cameraから取り込み)を行い、指定のパスにファイル保存を行うAppleScriptです。

コメント欄の質問から、試しに組んでみましたが……意外と試行錯誤が必要でした。

所定時間だけ録画する、というScriptは簡単です。しかし、録画内容を別のパスに保存するというのがなかなかやっかいです。本来のQuickTime Playerの機能にのっとって処理することを考えるなら、指定の(あらかじめ保存してある)ムービーファイルから保存形式などを読み取って、その内容に基づいてムービーを「export」することになります。

しかし、そこまでまじめに処理をやりだすと相当の長さになってしまうため、サンプルとしてはいささかおおげさです。

そこで、とりあえずQuickTime Playerの設定に基づいて「ムービー 1.mov」などといったファイル名で保存を行わせておき、そのフルパスを取得。ムービーをクローズしたのちに、一時保存したファイルを指定パスに移動させればよいだろう、と考えてこのようなものに。

録画時間の指定にdelay命令を用いていますが、あくまで説明を簡単に行うために用いているものであって、本来はidleハンドラを使ってタイマー割り込みで実装するべきです。

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

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

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

–録画時間経過待ち
delay recTime –秒単位でウェイト(ちょっとバカっぽい処理。本来はタイマー割り込みで時間待ちすべき)

tell application id "com.apple.quicktimeplayer"
  –録画停止
  
stop recording 1 –この操作で、QT7の設定に従ってムービーが保存される
  
  
delay 1 –時間待ち
  
  
tell document 1
    set originPath to original file –保存先のファイルのパスを取得しておく
    
close
  end tell
end tell

–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

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

2010/10/07 指定名称のムービーを指定開始-終了時間の間を取り出して指定名称で保存 v1

QuickTime Player 7をコントロールして、現在オープン中のムービーの一部をコピー&ペーストして別名のムービーとして保存するAppleScriptです。

ムービーの一部を切り出して別ファイルに保存するようなことはよくありますが、QuickTime Playerを操作するのは面倒です。何分何秒から何分何秒まで選択してコピーして新規ムービーにペースト…………というのは、かなり煩雑な操作。

そこで、あらかじめリストで{ファイル名、開始時刻、終了時刻}と指定しておけば、そのとおりに小分けしてくれるAppleScriptを作成してみました。本Scriptでだいたいの抜き出しを行っておいて、細かいところ(微修正)については手作業でもいいだろう、ぐらいのスタンスです。

プログラムの中にムービーのファイル名をダイレクトコーディングしていますが、このあたりをもう少し「賢い処理」に書き換えるといいのではないでしょうか。

こうして作業を行ったムービーを、他のコーデック&解像度に変換するのに、いろいろ便利なツールはないかと調べていたら、意外なところで「HandBrake」が一番速くて確実という結果に。なるほど。

スクリプト名:指定名称のムービーを指定開始-終了時間の間を取り出して指定名称で保存 v1
set aData to {{“m1″, “00:01:24″, “00:02:57″}, {“m2″, “00:03:04″, “00:05:43″}, {“m3″, “00:16:51″, “00:18:34″}, {“m4″, “00:18:40″, “00:19:15″}, {“m5″, “00:19:23″, “00:23:53″}, {“m6″, “00:26:43″, “00:27:06″}, {“m7″, “00:24:20″, “00:26:36″}, {“m8″, “00:26:43″, “00:27:06″}, {“m9″, “00:27:14″, “00:28:10″}}

set outFol to choose folder with prompt “ムービー書き出し先フォルダを選択してください”
set targetMovie to “DVD_VIDEO-2.m4v”

repeat with i in aData
  set {aName, sTime, eTime} to i
  
copyAndSaveMovie(outFol, targetMovie, aName, sTime, eTime) of me
end repeat

–指定名称のムービーを指定開始-終了時間の間を取り出して指定名称で保存
on copyAndSaveMovie(outFol, targetMovie, aName, sTime, eTime)
  
  
–QuickTime Player 7をコントロール
  
tell application id “com.apple.quicktimeplayer”
    tell document targetMovie
      set timeScale to time scale
      
set aDuration to duration
    end tell
    
    
set realTime to aDuration / timeScale
    
    
set fromTime to (retTimeBySecond(sTime) of me) * timeScale
    
set toTime to (retTimeBySecond(eTime) of me) * timeScale
    
    
tell document targetMovie
      select at fromTime to the toTime
      
copy
    end tell
    
    
set newMovie to make new document
    
paste document 1 –★重要★ この書き方以外はコンパイル(構文確認)が通らない
    
    
set savePath to (outFol as string) & aName
    
    
tell document 1
      set current time to 0
      
save self contained in file savePath
    end tell
    
  end tell
  
end copyAndSaveMovie

–時刻の文字列を秒に直して返す
on retTimeBySecond(aTime)
  set aList to parseByDelim(aTime, “:”) of me
  
set {hourStr, minuteStr, secondStr} to aList
  
  
set hourNum to (hourStr as number) * 60 * 60
  
set minuteNum to (minuteStr as number) * 60
  
set secondNum to secondStr as number
  
  
return (hourNum + minuteNum + secondNum)
  
end retTimeBySecond

on parseByDelim(aData, aDelim)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set dList to text items of aData
  
set AppleScript’s text item delimiters to curDelim
  
return dList
end parseByDelim

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

2009/09/16 QuickTime PlayerのXと7を区別して命令を発行する

Mac OS X 10.6標準装備のQuickTime Player Xと、オプションインストールのQuickTime Player 7を明確に区別してコントロールする場合の記法です。

Bundle IDでアプリケーションを指定する記法はMac OS X 10.5以降で拡張された構文であり、これによってQuickTime Player Xと7を区別して命令することが可能です。

なお、この記法はMac OS X 10.4などの古いOS上では使用できません。

スクリプト名:QuickTime PlayerのXと7を区別して命令を発行する
–Mac OS X 10.5以降で採用になったBundle IDによるアプリケーション指定を用いた、
–Mac OS X 10.6上でのQuickTime Player X/7の使い分け

–QuickTime Player Xへの命令
tell application id "com.apple.QuickTimePlayerX"
  activate
end tell

–QuickTime Player 7への命令
tell application id "com.apple.QuickTimePlayer"
  activate
end tell

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

2009/01/22 QuickTime Playerがバージョン7.6にアップデート

ソフトウェアアップデートで、QuickTimeがバージョン7.6にアップデートされました。合わせて、QuickTime Playerもバージョン7.6にアップデート。AppleScript用語辞書の内容は、前バージョンから変更されていません。

バージョン7.x系列のQuickTime Playerは、7.2.0と7.3.0で変更が加わりましたが、その後はとくにAppleScript用語辞書に変更は加えられていません。

GUIからはできるのにASからできない「複数ムービーの並行書き出し」などの機能を利用できるようにして、DualコアCPUが当たり前になった昨今、複数のCPUコアを有効に活用できるようにしてほしいものです。

2008/06/03 QuickTime Playerで録画を開始する

録音開始Scriptを作ったときに、一緒に作っておいたものです。音声ログを残しておこうという気にはなりますが、あまり動画ログを残しておこうというつもりは……。ただ、本Scriptはさまざまな用途に使えるものと思われます。

スクリプト名:QuickTime Playerで録画を開始する
tell application "QuickTime Player"
  new movie recording
  
start first recording
end tell

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

2008/06/03 QuickTime Playerで録音を開始する

「Xcodeのプロジェクトに音声ログを保存する」AppleScriptを作るときに作成しました。ソースコードにコメントを残しておくだけでなく、プロジェクト全体の様子を音声ログで残しておこうとしたものです。

作成したAppleScriptでは、メニューから呼び出してすぐに録音を開始し、録音終了(QuickTime Playerのボタンをユーザーが操作)すると、すぐさま録音した音声ファイルをXcodeプロジェクトのディレクトリにコピーするようにしました。こうして、少ない操作で音声ログを残せるようにしてみたものです。本当であれば、XcodeのプラグインとしてAppleScript Studioでプログラムを作っておくのですが、Xcode 2.5/3.0ともに起動時にXcodeプラグインの読み込みを行わないという「バグ」があるため、プラグインにはできていません。

1日も早く、こうしたつまらないバグが解消されることを希望するものです。というか、そんなトンでもないバグを残したままリリースするAppleの連中の気が知れません(ーー;;

スクリプト名:QuickTime Playerで録音を開始する
tell applicationQuickTime Player
  new audio recording
  
start first recording
end tell

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