尺とフレーム数、全部入り

前回書いた「尺からフレーム数への変換」は、実際に使ってみると実用性に乏しい事がわかります。制作作業では、フレーム数から尺への変換が必要な場合もありますし、After Effectsのテキストレイヤーに流し込む際に、秒とコマの情報を別々に欲しい場合もあります。

そんな時は、自作のルーチンを強化して、機能アップを図れば良いのです。

ユーザが「00+00」「00+00+00」の書式で入力した場合と、「0000」のフレーム数を入力した場合の、2つの場面に対応できるルーチンに改良します。

「どうやってみわけんの?桁数?」「IFで分岐?」‥‥とか考えがちですが、実は何も見分けなくても、前回書いたルーチンは「フレーム数の入力に対応」しています。

前回のルーチンは、

  • 6+0
  • 0+144
  • 144
  • 3+72

‥‥のどれでも、正しく処理します。これはAfter Effectsもそうで、人間が繰り上がりを計算しなくても、自動で繰り上げを計算するようプログラムされているのです。「1+18」のカット尺にボールド8コマを足した「1+26」と入れても、ちゃんと「2+2」に変換してくれます。

要は、ベタなフレーム数を計算した後、改めて「00+00」の書式を生成するルーチンに仕立てておけば、「行儀の悪い」入力でも「清書」した値を返してくれます。

また、ルーチンが返す値も単に「フレーム数」だけでなく、様々な情報を返すように強化します。AppleScriptでは「ラベル付きリスト」とか呼ばれるデータで、今回作ったルーチンは以下の値をまとめて返してくれます。

  • フレーム数
  • 尺の汎用的な書式
  • 尺のコマ数(フレーム数)を2ケタ表示にして括弧で囲んだ表示書式
  • 日(普通はいらないよね、こんな単位)
  • 時間
  • フレーム
  • 秒の表示(端数を除いた総秒数)
  • フレームの表示(2ケタ)
  • 計算に用いたFPS

ルーチンを利用する際、上記の中から、ニーズに適合するものを取り出して使います。

で、せっかくなので、単にルーチンを走らせるだけでなく、対話式のプチ「尺とフレームの変換計算」アプリケーションに仕立て上げます。

以下がAppleScriptのスクリプト文です。

--ここから

set res to text returned of (display dialog "尺またはフレーム数を入力してください" default answer "")

if length of res = 0 then
    beep
    display dialog "入力欄が空です." with icon stop buttons {"中止"} default button 1
    return
end if

set res2 to my calcFrames2(res, 24)

if res2 is false then
    beep
    display dialog "入力した文字に問題があります." with icon stop buttons {"中止"} default answer res
    return
end if

display dialog "計算結果は以下の通りです" with icon note buttons {"OK"} default answer "尺:" & durationText of res2 & "
表示書式:" & displayText of res2 & "
フレーム数:" & frames of res2


on calcFrames2(_durText, _fps)
    set delim to AppleScript's text item delimiters
    set AppleScript's text item delimiters to "+" as Unicode text
    set textitems to text items of (_durText as Unicode text)
    set AppleScript's text item delimiters to delim
   
    if length of textitems > 5 then return false
   
    set timescale to {1, _fps, _fps * 60, _fps * 60 * 60, _fps * 60 * 60 * _fps}
   
    set fc to 0
    repeat with i from 1 to length of textitems
        set textitem to item -i of textitems
        try
            set fc to fc + (textitem as integer) * (item i of timescale)
        on error
            return false
        end try
    end repeat
   
    set arr to {}
    set modfc to fc
    repeat with i from 1 to ((length of timescale) - 1)
        set arr to arr & modfc div (item -i of timescale)
        set modfc to modfc mod (item -i of timescale)
    end repeat
   
    set sec to (fc div (item 2 of timescale)) as Unicode text
    set frDisp to (characters 2 thru -1 of ((100 + modfc) as text)) as Unicode text
   
    return {frames:fc, durationText:(sec & "+" & (modfc as text)) as Unicode text, displayText:("(" & sec & "+" & frDisp & ")") as Unicode text, daysCount:item 1 of arr, hoursCount:item 2 of arr, minutesCount:item 3 of arr, secondsCount:item 4 of arr, framesCount:modfc, secondsText:sec, framesText:frDisp, fps:_fps}
end calcFrames2


--ここまで

上記スクリプトを「アプリケーション形式」で書き出すと、いつでも尺の変換計算を確認できるプチAppができます。実行してみると、



ここに何か、尺を入力します。例えば6秒ジャストの尺を色々な書式で入力してみましょう。



結果は、



‥‥とちゃんと正確に計算しております。さらに違う書式で‥‥



‥‥とか、



‥‥などでも、やはり以下の通り、正確に計算して返します。



別の尺でも、



ちゃんと変換します。



さらには、こんな表記もイケちゃいます。



1時間0分0秒0コマ。もちろん結果は、



‥‥ですネ。3600秒は1時間ですから、バッチリ、処理できてます。


仮に、尺以外の入力をした時は、



以下のようにエラー警告をおこないます。




‥‥とまあ、こんな感じで、尺の変換ルーチンに「display dialog」のGUIをくっつけて、1つの小さなアプリケーションにする事もできます。

尺の変換ルーチンは、それそのものは何らUIを持ちませんから(というか、そのように作ったので)、対話式のアプリにしたい場合は、AppleScriptの他の機能と組み合わせてアプリを作ります。After Effectsのレンダーオートメーションと連携して、コンポジションの尺や、テキストレイヤーの内容を書き換える事も可能ですネ。

次回は、尺の変換の体勢も整ったので、「尺が怪しくないか、判断してユーザに知らせる」スクリプトを作ってみます。以下のような「素敵なお知らせ」をMacがテキストエディットを使って知らせてくれます。



AppleScriptはdisplay dialogだけでなく、テキストエディットを用いて告知板にしたり、HTMLファイルを書き出してFireFoxやSafariで表示する事もできますから、ユーザへの「お知らせ方法」の手段はそれなりに豊富です。

ではまた。


calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< October 2017 >>

selected entries

categories

archives

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM