《コード付きで解説》AfterEffectsで時間表示を自由自在にする方法

MOVIE

私はYouTubeでタイムラプス動画を公開しているのですが、その中で経過時間を表示しています。

せっかくなので、AfterEffectsでの実現方法をメモしておこうと思います。

今回は以下の記事を参考に作成させていただきました。

参考記事:http://wordpress.jambo-ree.com/aftereffects-sports-time/

時間表示イメージ

日、時間、分、秒をそれぞれ2桁で表示します。

※今回の作成対象は数字の部分のみです。

※数字以外のパーツはPhotoShopで作成したものを画像で配置しました。

作成方法

まず、コンポジションを作成し、以下5つのレイヤーを作成したものとして説明を進めていきます。

レイヤー情報

ヌルオブジェクト

(1) hour・・・時間経過をコントロールするパラメーター。単位は時間。

テキストレイヤー

(2) text_daty・・・日数表示用(2桁)

(3) taxt_hour・・・時間表示用(2桁)

(4) text_min・・・分表示用(2桁)

(5) text_sec・・・秒表示用(2桁)

※背景レイヤー bg.png は説明に出てきませんので、必要に応じて準備してください。

(1) hour(ヌルオブジェクト)

このヌルオブジェクトでは、スライダー制御エフェクトを利用して時間経過を管理します。

① hour(ヌルオブジェクト)にスライダー制御エフェクトを適用します

スライダー制御エフェクトの適用方法は?

hourレイヤーを選択し、〔エフェクト〕-〔エクスプレッション制御〕-〔スライダー制御〕を選択

② スライダーに開始時間と終了時間を入力(今回の例では、開始時間0、終了時間を48としています)

これで再生を開始すると、スライダー値が0から48までをリニアな数字でカウントアップします。

(2) text_day(テキストレイヤー)

このテキストレイヤーでは2桁の日数を表示します。

① “text_day”レイヤーの▼を開き、テキストの▼も開く

② “ソーステキスト”のアイコンをキーボードの〔Alt〕を押しながらマウスで左クリックする

③ 以下のコードをエクスプレッションエリアに貼り付ける

("0" + (Math.floor(thisComp.layer("hour").effect("スライダー制御")("スライダー")/24))).slice(-2);
エクスプレッションの意味は?

分解して一つずつ説明していきます。

(1) hourレイヤーのスライダーの値にアクセス.。今回の単位は時間。

thisComp.layer("hour").effect("スライダー制御")("スライダー")

(2) 24で割って日数に変換

thisComp.layer("hour").effect("スライダー制御")("スライダー")/24

(3) 計算結果を整数に変換

Math.floor(thisComp.layer("hour").effect("スライダー制御")("スライダー")/24)

(4) 先頭に文字”0”を追加(1桁の数字の場合に”01”と2桁表示するために追加)

"0" + (Math.floor(thisComp.layer("hour").effect("スライダー制御")("スライダー")/24))

(5) 最後の2文字を切り抜き(2桁の場合は”010″となるので、”10″と表示するために切り抜く)

("0" + (Math.floor(thisComp.layer("hour").effect("スライダー制御")("スライダー")/24))).slice(-2)

(3)text_hour(テキストレイヤー)

こちらでは2桁の時間を表示します。text_dayと同じ手順で、エクスプレッションを追加します。

記述するエクスプレッションは、レイヤーごとに以下のコードを貼り付けます。

("0" + (Math.floor(thisComp.layer("hour").effect("スライダー制御")("スライダー")%24))).slice(-2);

「%24」は、「24で割った余り」という意味です。これで0~23で表示されます。(例えば25の時は1になります)

(4) text_min(テキストレイヤー)

こちらでは2桁の分を表示します。こちらも同様に、エクスプレッションを追加します。

("0" + (Math.floor(thisComp.layer("hour").effect("スライダー制御")("スライダー")*60%60))).slice(-2);

「*60%60」は、「60倍して、60で割った余り」という意味です。60倍は時間を分に変換。60で割った余りの計算で、0~59で表示されます。(例えば65の時は5になります)

(5) text_sec(テキストレイヤー)

こちらでは2桁の秒を表示します。こちらも同様に、エクスプレッションを追加します。

("0" + (Math.floor(thisComp.layer("hour").effect("スライダー制御")("スライダー")*60*60%60))).slice(-2);

「*60*60%60」は、「3600倍(60倍を更に60倍)して、60で割った余り」という意味です。3600倍は時間を秒に変換。60で割った余りの計算で、0~59で表示されます。(例えば70の時は10になります)

結果

0時間からはじまり、48時間までカウントアップするようになりました。48時間=2日ちょうどなので、再生終了地点では2日になります。

まとめ

今回は、時間経過の単位を”時間”にしましたが、計算式を少し変えれば、分や秒にもできます。

また、スライダー値を大きい値から小さい値にすれば、カウントダウンも簡単にできますので、応用次第ではいろいろなことができるようになると思います。

AfterEffectsで時間のカウントダウンやカウントアップをする場合の参考になれば幸いです。