即席タイムリマップ。そして小数点の誤差変更‥‥。

タイムシートのセルのタイミングをAfter Effectsに反映させる際に、ほとんどの人がタイムリマップを使っていると思います。

 

そのタイムリマップのデータを生成する方法はいくつかあり、私はテキストで流し込む方法を使ってきました。

 


Adobe After Effects 8.0 Keyframe Data


    Units Per Second    24
    Source Width    1750
    Source Height    1233
    Source Pixel Aspect Ratio    1
    Comp Pixel Aspect Ratio    1

Time Remap
    Frame    seconds    
    0    0.0417084    
    3    0.0834168    
    6    0.125125    
    9    0.166834    
    12    0.208542    
    72.0723    3.003    


End of Keyframe Data

 

もちろん、このテキストを手で入力するわけではなく、何らかのエディタでシート打ちをして、その内容から変換するプログラムを作って対処しています。

 

が、しかし。

 

そのプログラムが手元にない場合は、何らかの方法でちゃちゃっと対応したい時があり、まさに昨日今日がその時でした。

 

 

 

私はTSXというAppを自作し、15年以上の長きに渡って対応してきましたが、今回のコロナのテレワークに合わせて久々に内容更新と再コンパイルしたTSXを、家のiMacに忘れてきてしまいました。

 

忘れて手元になければ、使えないですネ。

 

なので、前々から考えていた、マーカーのコメント欄を利用してタイムリマップを反映させるエクスプレッションを作りました。

 

 

 

まずコメント欄には、「1行を1コマ」に見立てた、セルのタイミングを書き込みます。「0」は空セル、「1」〜「8」は放電・スパークの絵です。スパークのタイミングなので、明滅したりと賑やかです。

 

1

2

3

4

 

5

 

6

0

6

0

 

7

0

7

0

8

0

8

0

 

1

2

0

5

6

0

7

0

8

 

 

ハッキリ申しまして、行番号のないコメント欄に直にタイミングを書き込むのは、やりにくさ極まれりです。行番号が表示されるエディタで一旦書き込んでから、コピペしてコメント欄に書き込んだほうがミスが防げます。

 

当該のセルのレイヤーにマーカーを適用し、コメント欄にセルタイミングを書き込んだのちに、エクスプレッションを適用すれば、シート打ちの状態が反映されます。

 

 

 

 

 

実際のソース文は以下。

 

offset=0.001;

fps = 1.0 / thisComp.frameDuration;

t=thisLayer.marker.key(1).comment.split("¥r");

i=timeToFrames(time,fps,true);

if(i>=t.length){i=t.length-1;}

num=t[i];

while (num=="") {i--;num=t[i];}

Number(num)/fps+offset;

 

 

とてもシンプル。なぜもっと早く作っておかなかったかな‥‥。

 

即席で作ったスクリプトなので、まだ穴があるかも知れません。

 

気になる「offset」に関しては最後に説明をば。

 

もし、上記のエクスプレッションで絵がズレるときは、offsetを0に戻せば解消されるかも知れません。

 

 

 

改行で区切られたテキストを「¥r」で分割して配列に変換するのは、よくやる手法です。

 

ただし、それだけでは、シートの流儀に合いません。何も文字がない状態は、""=null=0と判断されるからです。

 

文字がない行が全て空セルになってしまっては、使い物になりません。

 

なので、空白行だった場合は、以前のコマのセル番号を踏襲する仕組みを、while文で作っています。空白ではない行まで遡って番号を取得するわけですネ。

 

また、シートの末尾まで改行が続かなくても、最後のコマを踏襲するように、「if(i>=t.length)」で対処します。配列は0スタートなので、その辺も。

 

 

 

で、です。

 

After EffectsのCC2020ユーザを苦しめているタイムリマップのズレの問題。

 

今回エクスプレッションを作ってみてハッキリと解りました。

 

これです。

 

*After Effects CC2018のテキストレイヤーでtimeを表示。(timeは1秒を1として扱いますので、0フレ(1コマ目)は0/24、1フレ(2コマ目)は1/24の小数点で示します。)

 

*After Effects CC2020のテキストレイヤーでtimeを表示。

 

小数点の末尾の精度が変わっています。テキストレイヤーのテキストソースにエクスプレッションを適用し、「time」と4文字入れれば、各フレームの小数点が表示されます。

 

アニメ制作のコンポジットにおいて、After Effects CC2020のタイムリマップでセル番号が1つ後ろにズレるのは、この精度の変更によるもの‥‥ではないでしょうか。

 

なので、オフセット。この誤差を吸収するための小数点を最後に足せば解決できそうです。

 

私がちょっとだけテストしてみた感じだと、0.001を足せば、思った通りのセル番号と一致しました。

 

 

 

タイムリマップを適用する素材の時間軸精度が誤差によって少しだけ前後にズレることで、絵のタイミングもズレているようです。

 

なので、素材に遡って、0.001前倒しするか、タイムリマップ適用時に0.001後ろ倒しするか、スクリプトの書き方で変わってきましょう。

 

ちなみに、outPointをinPointに受け継ぐレイヤーシーケンスのスクリプトだと、後ろ側にズレて絵が出ないことを確認しております。‥‥微妙に、1/24の位置から後ろにズレてしまうようです。原撮のPSDファイルをレイヤーシーケンスで連番にする際に、注意したほうがよさげです。

 

 

 

 

たのむよ。アドビさん。

 

こんな重大な仕様変更をシレッと混ぜ込んで、何食わぬ顔でサブスクキメてないでよ。

 

極めて大きな問題なんよ。アニメ制作現場において、タイムリマップに関わる仕様変更はさ。

 

 

 

でもまあ、とりあえずは、これで凌ぎます。

 

しかし、もう随分前から、After Effectsには限界を感じているんだよね‥‥。20年以上付き合ってきたけど、近年のバージョンアップ内容は老化を隠せないですもん。

 

ただ、道具のいっぱい詰まった工具箱のように、たとえ動仕のないゼロからでも映像を作れるのは魅力。小数点の問題も、After Effectsの内部でとりあえずはユーザの工夫で回避できますしネ。

 

*こういうのはAfter Effectsだけですぐに作れます。2006年頃にお遊びで作ったクマです。After Effectsは既に2000年代中頃にはカットアウトスタンバイ!‥‥だったんですけど、日本はごく少数の人しか注目しないまま、今や2020年‥‥です。

 

 

 

CC2018にしがみついてても限界はすぐにやってきます。2020以降でトラブルを回避する方法を身につけましょう。

 

CC2020、2021‥‥と、まだ当分は付き合っていくことになりましょう。

 

 


関連する記事

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