タイムシートの枚数を組み込む

作画作業でも時間表記は必要です。

 

だからと言って、前回書いたのと同じく、タイムコードを1スタートにするのはトラブルの元なので避けねばなりません。

 

何よりも、ぶっちゃけ、タイムコードで1スタートにしているのは、経験の幅が狭い状態を晒しているようなものなので、かっこ悪いです。

 

タイムコードはタイムコード。タイムシートはタイムシート。コマ番号はコマ番号。

 

別に扱えば良いです。

 

 

 

前回紹介したテキストレイヤーとエクスプレッションによる各種時間表記を、アニメの作画用途に改造しましょう。

 

アニメーターでAfter Effectsを併用している人は少ないとは思いますが、未来のアニメーターはコンポジットにも関わって、あらゆる作画要素をコントロールしたほうが良いですから(表現面でもコスト面でも)、After EffectsのTIPSとして紹介します。

 

After Effects内部の小数点付き秒数を、まずはタイムコードに変換します。ついでに、fpsも取得しておきます。

 

fps=1/thisComp.frameDuration;

tc=timeToTimecode(t = time + thisComp.displayStartTime, fps, true);

 

秒数は、単純に秒の小数点を切り下げた数字で取得します。

 

sec=String(Number(Math.floor(time)+1000)).slice(1);

 

1秒間のコマ番号は、タイムコードのフレーム番号から、取得して1を足すだけです。せっかくタイムコードを変数「tc」に格納したので、利用するわけです。JavaScriptの「暗黙の型変換」ではなく、お行儀よくString()やNumber()で明示的に、文字と数を相互に変換しています。

 

koma=String(Number(tc.split(":")[3])+101).slice(1);

 

1を足すのに、101を足しているのは、表示上の桁数を揃えるためです。01は数値では1になるので、先頭の0を保つために、「101という文字の2文字目以降を取得」するのです。

 

"101".slice(1);

 →"01"

 

After Effectsの時間をフレームにするには、小数点付き秒数から地道に算出する方法もありますし、タイムコードの各桁から算出する方法もありますが、After Effectsビルトインの「timeToFrames()」が手っ取り早いです。

 

komaNumber=String(Number(timeToFrames(t = time + thisComp.displayStartTime, fps, true))+100001).slice(1);

 

 

さらに、どうせなので、何枚目のタイムシートでも読みやすく表記をプラスしましょう。

 

10+9コマって、2枚目の6秒シートの何秒何コマ目でしょう? 2枚目の6秒シートの通し番号の何コマ目でしょう?

 

まずタイムシートには、3秒シートや6秒シートがありますので、タイムシートの長さを定義します。

 

sheetLength=144;

 

144はお馴染みの数字ですね。6秒シートです。

 

この「sheetLength」で、タイムシートの秒と通しのコマを割れば良いです。

 

currentSec=Number(sec)%(sheetLength/fps);

currentKomaNumber=String(Number(komaNumber)%sheetLength+10000).slice(1);

 

さらに現在のタイムシートが何枚目かも計算しておきましょう。シートは「0枚目」と言う呼び方はしないので、二桁に揃えつつ1を足しておきます。

 

currentSheetNumber=String(Math.floor(time/(sheetLength/fps))+101).slice(1);

 

以上で、時間の情報取得は終了です。

 

あとはまとめて表示‥‥ですが、情報量が多いので、改行を混ぜましょう。

 

tc+"¥r"+sec+"+"+koma+" | "+currentSec+"+"+koma+"["+currentSheetNumber+"]¥r"+komaNumber+" | "+currentKomaNumber+"["+currentSheetNumber+"]";

 

 

以上を、テキストレイヤーのソーステキストのエクスプレッションに書き込みます。

 

//基本設定

sheetLength=144;

fps=1/thisComp.frameDuration;

 

//基本情報

tc=timeToTimecode(t = time + thisComp.displayStartTime, fps, true);

sec=String(Number(Math.floor(time)+1000)).slice(1);

koma=String(Number(tc.split(":")[3])+101).slice(1);

komaNumber=String(Number(timeToFrames(t = time + thisComp.displayStartTime, fps, true))+100001).slice(1);

 

//タイムシートの複数枚に対応

currentSec=Number(sec)%(sheetLength/fps);

currentKomaNumber=String(Number(komaNumber)%sheetLength+10000).slice(1);

currentSheetNumber=String(Math.floor(time/(sheetLength/fps))+101).slice(1);

 

//結果表示

"TC "+tc+"¥r"+sec+"+"+koma+" | "+currentSec+"+"+koma+"["+currentSheetNumber+"]¥r"+komaNumber+" | "+currentKomaNumber+"["+currentSheetNumber+"]";

 

以下のように映像に表示されます。

 

 

 

タイムコードはいつもの0スタートの「00:00:00:00」表示。

 

タイムシートの表記は、カット全体の000+00書式(999秒まで対応)と通し番号の00000書式(99999コマまで対応)の他に、タイムシート何枚目の「何秒何コマか」「通し番号何コマ目か」を表示します。

 

まあ、ありえないでしょうけど、シートは99枚まで対応してます。‥‥表示が2桁なので。

 

これで、全体の時間位置と、タイムシート何枚目の時間位置も表示されます。

 

上の映像をみれば、左側は秒数が6秒後もどんどん加算されますが、右側は0秒に表示リセットされます。

 

こうした仕組みが、ユーザのスクリプト(エクスプレッション)でいくらでも自作できるのは、After Effectsの強みです。

 

クリスタにもこうした機能=エクスプレッションやスクリプトがあれば良いのにネ。

 

 

 

 



calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 
<< July 2020 >>

selected entries

categories

archives

profile

search this site.

others

mobile

qrcode

powered

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