怪しい尺を知らせるスクリプト

アニメの制作現場では、作画が2コマ3コマでタイミングを作る事がほとんどで、ゆえに、カットごとムービーの尺(デュレーション)の傾向は偏ってきます。‥‥というのは、前にも書いたとおりです。

例えば、「4秒19コマ」とか、「5秒23コマ」なんていう尺は、かなり変わった尺です。なので、コンポジットを担当している作業者は、「うわ〜、妙な尺だなあ」と記憶に残ります。

しかし、記憶に無いのに、「5秒23コマ」なんていう尺が存在した場合、「何かの不具合により1コマレンダリングできてない」などの「障害の可能性」が高くなります。

今はQTでレンダリングする事が多くなったので、あまり「23コマ」などの「間違った尺」は見かけなくなりましたが、連番レンダリングではたまに発生する障害です。レンダリングが中途でエラーで止まり、再スタートした際に、1コマ欠落するのです。

まずいことに、尺の間違いはラッシュチェック(カットごとのムービーを上映してスタッフでチェックする)では見つけにくく、編集さんに渡った時点で初めて「発覚」する事がほとんどです。

間違った尺のムービーを度々、編集さんに渡していると、「いい加減な仕事しやがって」と信用を失います。なので、事前に尺間違いがないか、ちゃんと検査してから渡すのがベストです。

厳密な検査は、やはり、確固としたデータベースと照合するのが必定ですが、レンダリング時の障害から発生した類いの尺間違いは、コマ数を調べるだけでも結構「見分けられ」ます。文頭で書いた、現場の慣習による「尺の定番」が存在するからです。

今回は、尺のコマ数をチェックするスクリプトを書いてみます。現場では、実際のファイルから読み出して尺のチェックするのですが、まずは、架空の尺のリストを用意して、「検査エンジン」がうまく動くかを試してみます。

スクリプトは以下。今回はちょっと長めですが、構造自体は簡素です。

--ここから

--架空のカットの尺のリストです。実際には、QTから取得したり、連番ファイル数から取得します。
set cutList to {{cutName:"#10-c101", duration:"3+0"}, {cutName:"#10-c104", duration:"5+12"}, {cutName:"#10-c106", duration:"2+6"}, {cutName:"#10-c123", duration:"1+18"}, {cutName:"#10-c125", duration:"0+5"}, {cutName:"#10-c155", duration:"2+18"}, {cutName:"#10-c158", duration:"6+21"}, {cutName:"#10-c160", duration:"8+0"}, {cutName:"#10-c161", duration:"5+23"}, {cutName:"#10-c183", duration:"3+12"}, {cutName:"#10-c200a", duration:"2+2"}, {cutName:"#10-c200b", duration:"4+1"}, {cutName:"#10-c202", duration:"3+12"}}


--警告をおこなうための仕組みをつくります
--matchNumbersは、コマ数の番号
--dialogはそのコマ数に対するコメント
--levelは危険度レベル(level 1 を最安全レベルとして、最も危険なレベルを6としました)
set lev1 to {matchNumbers:{0, 12}, dialog:"正常と思われます.", level:1}
set lev5 to {matchNumbers:{1, 5, 7, 13, 17, 19}, dialog:"少々危険なコマ数です. 念のため尺の再確認をお勧めします.", level:5}
set lev4 to {matchNumbers:{2, 4, 8, 10, 14, 16, 20, 22}, dialog:"2コマベースならあり得るコマ数です.", level:4}
set lev3 to {matchNumbers:{3, 9, 15, 21}, dialog:"3コマベースならあり得るコマ数です.", level:3}
set lev2 to {matchNumbers:{6, 18}, dialog:"2コマ3コマ共通のよくあるコマ数です.", level:2}
set lev6 to {matchNumbers:{11, 23}, dialog:"危険なコマ数です. 尺の確認を強くお勧めします.", level:6}
set levList to {lev1, lev2, lev3, lev4, lev5, lev6}

set aColors to {{0, 0, 0}, {0, 0, 10000}, {0, 20000, 0}, {0, 20000, 0}, {50000, 20000, 0}, {50000, 0, 0}} --警告色の設定です

set numberDB to {} --0から23のコマ番号に対する、危険度レベルを設定するために、まず空のリスト「numberDB」を作ります

repeat with num from 1 to 24
    set numberDB to numberDB & {num} --「numberDB」にまず1から24で埋めます
end repeat
repeat with lev in levList
    repeat with num in matchNumbers of lev
        set item (num + 1) of numberDB to level of lev --「numberDB」に危険度レベルを当てはめます
    end repeat
end repeat
--以上で「numberDB」=各コマ番号に対する危険度レベルリストが完成しました

--いよいよ、尺をチェックして結果をテキストエディットに表示します
tell application "TextEdit" to set doc to make new document --新規書類をテキストエディットで作ります
my writeTextEdit(doc, "尺の端数をチェックしてみました!" & return & return, {0, 0, 0}) --1行目のコメントを書き込みます

repeat with dur in cutList --カットリストを順々に処理します
   
    set durationInfo to my calcFrames2(duration of dur, 24) --カットリストの尺情報を尺の分析ルーチンに投げて、結果を受け取ります
    set dispFr to (characters 2 thru -1 of ((10000 + (frames of durationInfo)) as Unicode text)) as Unicode text --フレーム総数を4ケタ表示にします(テキストエディット上できれいに表示させるため)
    set basicText to cutName of dur & tab & (displayText of durationInfo) & tab & dispFr & tab --書き込む基本情報を生成します
   
    if frames of durationInfo < 12 then --もし尺が12コマ未満だった場合
        my writeTextEdit(doc, basicText & "尺が短過ぎるかも知れません. 念のため尺の再確認をお勧めします." & return, item 6 of aColors) --‥‥のように書き込みます。警告色は「item 6 of aColors」〜つまり最危険度の色です
    else
        set myLevel to item ((framesCount of durationInfo) + 1) of numberDB --コマ番号を「numberDB」に照らし合わせて、当該の危険度レベルを得ます
        my writeTextEdit(doc, basicText & (dialog of item myLevel of levList) & return, item myLevel of aColors) --危険度別のコメントを書き込みます。テキスト色も危険度レベルに合わせた色にします。
    end if
   
end repeat

tell application "TextEdit"
    set bounds of window 1 to {20, 20, 720, 520} --最前面のウィンドウ(つまり結果を書き込んだ書類)のウィンドウ位置と大きさを見やすいように調整します
    activate --テキストエディットを最前面に表示します
end tell
--テキストエディットの表示を確認してください
--以上でメイン部分は終了です。


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


--テキストエディットに文字を書き込むルーチンです
on writeTextEdit(_doc, _text, _color)
    tell application "TextEdit" to make new paragraph at the end of _doc with data _text with properties {font:"HiraKakuProN-W3", color:_color, size:14}
end writeTextEdit

--ここまで


AppleScript初心の場合は、読み切れないかも知れませんが、詳細な解説はいずれ。


上記スクリプトを実行すると、以下のような検査結果がテキストエディットを用いて表示されます。危険度が増すほどに、テキスト色が赤に近づいていきます。




架空ではなく、本番の作業では、上記のようには色とりどりにはならないでしょう。大体、黒か緑の文字で埋まるはずです。その中にあって、たまに赤い文字が1行あると、その行だけが異様に目立って、ユーザ(例えば撮影監督)に知らせてくれます。

コンピュータはあくまで「判断をユーザに求めてくる」だけです。意図された「5+23」なのか、意図しない「5+23」なのかは、人間が判断します。タイムシートが「5+23」だったら、「うん、そうなんだよ。中途半端な尺なんだよなぁ」と自分の中で念押しできます。

スクリプトのプログラム文を読むと、コマ番号に対する危険度レベルとコメントを設定しているのが解ります。その「からくり」通りに、スクリプトは尺を判断し、テキストエディットでユーザに告知します。

これは、「作業の内容」や「作業の慣習」をもとに、当該の様々な「値」を、プログラムで処理して判断する、初歩的なスクリプトです。こうした事をどんどん積み重ねていけば、コンピュータは、まるで介護犬のように、ユーザに色々と「尽くして」くれる存在になります。

少なくとも、私はこのようなプログラムを作業に取り入れたおかげで、格段にミスを減らし、格段に「映像表現に専心」できるようになりました。

映像作りは1枚絵を描くのに比べて、煩雑で事務的な作業が多過ぎます。‥‥で、それは減らせません。必要な雑務なのです。だったら、その雑務を「どう処理するか」を考えれば良いのです。

映像を作りたいのなら、思いのままに映像を作れるよう、環境を整えるのが「当たり前の事」です。雑務に自分の時間を搾取されっぱなしに放置しておくと、いつまでたっても本腰を入れて取り組めないのですヨ。


calendar

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< August 2017 >>

selected entries

categories

archives

profile

search this site.

others

mobile

qrcode

powered

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