LINE風のやりとりをAfter Effectsで再現したい場合、吹き出しが文字数に追従するテンプレートはよくありますが、今回は吹き出し自体の微調整と送信 or 受信で鳴る音を自動化した、aep(プロジェクトファイル)テンプレートを作ってみます。
完成品のaepも無料配布致しますので、使い方から記事にまとめ、自分の学びとして残します。
時代背景
チャット風やりとりはストーリーを引き立てる演出の一つでしかないことが多いため、クリエイターは単純作業に時間を取られるべきでなく、既に形式化された表現はテンプレートで済ませ、使い所や会話の内容などクリエイティブな部分に時間を使うべきだと思います。
現にLINE会話風の編集は比較的易しいものとして単価も安く(クラウド受注サービスで10分尺が数千円)、むしろ技術よりコピペの手間暇が目立ちます。実際、編集は確認作業などを含めた実働時間換算では時給1,000円を切ってしまうこともザラです。
今回のテンプレートはよくあるチャットのフキダシの準備までの制作補助ツールなので、市場を荒らす効果もなく無償公開で問題ないと判断しました。発注側は「このテンプレートを使って下さい」という指示の簡略化とクオリティの統一化が見込め、受注側はBGMや他シーンのクリエイティブに時間を費やせると、双方にメリットがあるかと思います。
そこでAfter Effectsの機能を活用し、創意工夫で単純作業は効率化出来ることに気づき、クリエイティブ制作時間の捻出、After Effectsの可能性を知るヒントとして、テンプレートの考え方とaep配布を致します。
aepを開いて中身を解析してみたり、真似してみたり、より使いやすくカスタマイズしてみたりと自身の知見を広げる手助けになれば嬉しいです。
逆に改善点を教えて頂ける方がいれば、ブログにした甲斐が出てきます。
完成イメージ
今回のアイディアは、以前の2つのスクリプトのアイディアを融合させたものと言えます。
ブラッシュアップとしてアイコンと送信音、受信音を実装するにあたり、制作の手間をより効率化できないかと模索した結果、今回のaepテンプレート化に落ち着いたところです。
作り方:雛形を作ってみる
まずはアニメーション演出としてどんな機能が欲しいか整理します。
欲しい機能
- 文字変更だけでフキダシサイズが合う
- 送信音、受信音が鳴る
- 発言者を手軽に切り替えたい
- フキダシが拡大しながら表示する
- フキダシ間隔や色は変えたい
これらが実現できれば、制作時間を大きくブーストできそうです。
文字変更だけでフキダシサイズが合う…最低限の機能として、メッセージごとにフキダシの大きさを調整などしてられません。フキダシは文字に追従するようにします。
送信音、受信音が鳴る…完成したやりとりに効果音を合わせていく作業だけで数分、確認作業にやりとりと同じだけの時間がかかります。音は初めからメッセージ分配置しておき、送信メッセージか受信メッセージかで切り替われば楽でミスも防げます。
発言者を手軽に切り替えたい…相手のメッセージか自分のメッセージかで位置を調整していられませんので、チェックボックスで左右の配置を簡単に選びたいところです。
フキダシが拡大しながら表示する…これは好みのオプション機能ですが、メッセージはピョコンと出現アニメーションを付けたいです。実装自体は難しくなく、作ってみて要らなければアニメーションを切ればいいだけです。
フキダシ間隔や色は変えたい…これは使用シーンによって、「スマホを操作する人の横にメッセージを表示」や「全画面でのメッセージ画面に切り替える」際や、「LINE以外のチャットアプリ画面にしたい」際に流用したいからです。
元になる雛形を準備
では基準となる1メッセージを作って、カスタマイズしていくことにします。
必要なのは音、アイコン、テキスト、フキダシです。アイディアとしてはこの4レイヤーを1セットとして、コピペで増やせるテンプレートに仕上げていきます。
一番下のレイヤーから上のレイヤーへ順に作りながら仕掛けを施していき、中身を理解していきましょう。
文字変更だけでフキダシサイズが合う
この手のテンプレートのメイン機能として、テキストサイズにフキダシのサイズが追従する仕掛けをまずは解説します。
フキダシの準備
フキダシはサイズ自動調整の仕掛けを施す長方形シェイプと、位置が固定のシッポを組み合わせて表現します。
フキダシのサイズの仕掛け1
フキダシのサイズは文字に追従させたいので、レイヤーの横幅と高さを検知するエクスプレッション「sourceRectAtTime()」を今回は採用します。
テキストレイヤーの一つ下に配置したフキダシレイヤーの長方形 1>サイズに下記エクスプレッションを仕込みます。
//横幅
var x=thisComp.layer(index-1).sourceRectAtTime().width;
//高さ
var y=thisComp.layer(index-1).sourceRectAtTime().height;
[x,y];
これで「index」→レイヤー番号が「-1」、つまりひとつ上のレイヤーの、「sourceRectAtTime()」→タテヨコのpxを取得します。
「sourceRectAtTime()」は「.width」で横幅、「.height」で高さを個別に取得できますので、そのままサイズに返してやれば、テキストサイズに合わせたピッタリサイズの長方形を自動で作れます。
最終的には少しの余白(padding)と、角の丸み、位置を調整しデザインを整えます。
フォントサイズを50pxとした場合、上下左右に25pxずつ余白を追加するといい塩梅かと思います。先程のエクスプレッションに「タテヨコに50を足す」処理を追加したいところですが、その前に…最適な数値はフォントやフォントサイズで変わるので、どうせなら調整可能なようにしましょう。
細かな設定を行う「コントローラー」を作ります。
コントローラーを準備
先程のフキダシのサイズも、ある程度数を増やしたあとに余白を変えたい場合、一括で修正できると楽ですね。フォントの大きさから余白などの「後から一括変更可能にしておきたい項目」をコントローラーとして分けておきます。
この辺りは仕掛けを含めた完成形のイメージがつく様になってくると、「アレが欲しいコレが欲しい」と寄り道せずに準備できるのですが、「After Effectsで何ができなくて、どこに時間がかかるのか」という知識が必要で習得には時間がかかります。
面倒、手間、何度もやりたくないと思った作業をメモっておくと、効率化する仕掛けを考えるきっかけにもなるのでオススメです。
では後から一括変更可能にしておきたい項目です。
- 自分と相手のフキダシ左右の開き幅
- フキダシのシッポの有無
- フキダシの角丸サイズ
- フォントカラー
- フキダシカラー
- テキストとフキダシの余白
- フォントサイズ
この辺りです。特にフォントサイズはバージョンが古いとエクスプレッションで検知できないので、検知できるプロパティに手動でフォントと同じ数値を入力する方法しか思いつきませんでした。いい解決策が解る方は教えて頂けると幸いです。
レイヤー>新規>ヌルオブジェクトでヌルレイヤーを追加し、レイヤー名を「Control」にリネームします。
そして今挙げた設定項目をいじれるように、エフェクトとして準備します。
「Control」レイヤーにエフェクト>エクスプレッション制御から、「カラー制御」「スライダー制御」「チェックボックス制御」の3種類を組み合わせてカスタマイズしていきます。
下記を参考にエクスプレッション制御エフェクトを追加し、分かりやすいようにエフェクトの名前を変更していきましょう。
- 左右の開き(スライダー制御)…フキダシ左右の開き幅px
- シッポ(チェックボックス制御)…フキダシのシッポの有無
- 角丸(スライダー制御)…フキダシの角丸サイズpx
- 自分の文字色(カラー制御)…色変更用
- 自分のフキダシ色(カラー制御)…色変更用
- 相手の文字色(カラー制御)…色変更用
- 相手のフキダシ色(カラー制御)…色変更用
- フォントサイズ(スライダー制御)…フォントサイズの数値をここにも手動入力
- フキダシ左右余白(スライダー制御)…フキダシ内テキスト左右の余白
- フキダシ上余白(スライダー制御)…フキダシ内テキスト上の余白
- フキダシ下余白(スライダー制御)…フキダシ内テキスト下の余白
- フキダシ間隔(スライダー制御)…メッセージごとのタテの間隔
丁度いい余白はフォントにより変わってくると思い、左右と上、下と分けておきます。仕込み直すほうが面倒なので、要らなければ削除するとして初めから組み込んで開発を進めます。
このように初めから準備したエフェクトにリンクさせながら仕掛けを施していけば、完成後にエクスプレッションを含んだ形に直す二度手間がありません。
フキダシのサイズの仕掛け2
コントローラーである「Control」レイヤーを絡めながらフキダシサイズのエクスプレッションを改良します。
// 変数を準備
var ctrl=thisComp.layer("Control");
var tx=thisComp.layer(index-1);
var sizeX=tx.sourceRectAtTime().width;
var sizeY=tx.sourceRectAtTime().height;
// サイズ用にx,yの二次元の値を返す
[sizeX+ctrl.effect("フキダシ左右余白")(1).value,
sizeY+ctrl.effect("フォントサイズ")(1).value+ctrl.effect("フキダシ上余白")(1).value+ctrl.effect("フキダシ下余白")(1).value];
コントローラーは何度も呼び出すので、変数「ctrl」に入れてしまいます。これにより、以降の記述では「コントローラーの○○エフェクト」を「thisComp.layer(“Control”).effect(“○○”)」ではなく、「ctrl.effect(“○○”)」と記述できるようになります。
エクスプレッションは長いと式の組み立てに集中できませんので、意味が解る程度に短い変数に入れてから再利用するのが、早くてミスを防ぐコツです。
そしてサイズのx(横幅)にはコントローラーに用意した左右の余白を、y(高さ)にはフォントサイズと上と下の余白を足せば、テキストに対して丁度いいサイズのフキダシが自動で作れるようになります。
そして位置がおかしいですが、長方形シェイプは中央から上下左右に膨らむ、つまりアンカーポイントが中央にある状態なので、これも適した形に直してやります。
フキダシの位置の仕掛け
フキダシは文字方向に伸びて欲しいので、アンカーポイントをシッポのある左上に固定するため、長方形の位置にもエクスプレッションを仕込みます。
フキダシレイヤーの長方形 1>位置のエクスプレッションは下記のようになります。
[content("長方形 1").size[0]/2,content("長方形 1").size[1]/2];
これでサイズの幅、高さの半分の数値が位置に入り、結果フキダシは右か下へ伸びることになり、擬似的にアンカーポイントが左上に固定されます。
最後にシッポの位置をずらして、テキストに追従するフキダシは一先ず完成です。後で自分のメッセージか相手のメッセージかで位置と色を変える仕組みにさらに改良します。
テキストの位置の仕掛け1
テキストは常に対応するフキダシに追従する位置にいて欲しいので、親子設定を採用します。子レイヤーは常に親レイヤーの位置を[0,0]とするようになるので、自動で位置を追いかけるようになります。
メッセージは左揃えにしたいので、テキストレイヤーの「段落」は「左揃え」にします。このとき知っておくべき仕様は、横書きテキストの左揃え時、文字のアンカーポイントは1行目の左下に来ます。
このテキストを子とし、下のレイヤーのフキダシを親にして…[0,0]の位置から先程フキダシで追加した余白の半分だけ右に、フォントサイズ分(50px)下に、さらに上の余白分下に移動すればOKです。
そのため、テキストレイヤーの位置へのエクスプレッションはこうなります。
var ctrl=thisComp.layer("Control");
var left=(ctrl.effect("フキダシ左右余白")(1).value/2);
// 位置なので[x,y]と二次元の値で返す
value+[left, ctrl.effect("フォントサイズ")(1).value+ctrl.effect("フキダシ上余白")(1).value];
念の為テキストレイヤー単体の位置を微調整できるように、「value」を残しました。そのためエクスプレッションがない状態で[0,0]にしてください。でないとvalueが足されてズレます。
フキダシの中央にテキストが乗るように、「Control」レイヤーのエフェクトから調整してください。
アイコンの準備
アイコンは差し替えが簡単なように、[丸くくり抜くためのトラックマット用シェイプ>アイコン画像を配置するプリコンポジション]をコンポジションとして用意しました。
また、相手のメッセージと自分のメッセージでアイコンを切り替える必要があるため、2フレームのコンポジションにして、タイムリマップで切り替えると簡単そうです。
後ほどチェックボックスと連動したエクスプレッションを仕込むのですが、とあるテクニックを使うため0フレーム目が自分のアイコン、1フレーム目が相手のアイコンにしておきます。
本家のLINEのように、自分のアイコンがなくていい場合は、0フレーム目に何も表示されない状態にするだけです。
発言者を手軽に切り替えたい
メッセージごとに「自分のメッセージ」←→「相手のメッセージ」をチェックボックスで手軽に切り替えられるようにします。
この処理で相手のメッセージは左に、自分のメッセージを右にという配置とフキダシの色の切り替え処理を考えます。
切り替えのアイディア
テキストを打ち替えるのがメインの作業となることから、このテキストレイヤーにチェックボックスエフェクトがあると編集の効率が良さそうです。
テキストレイヤーに、エフェクト>エクスプレッション制御>チェックボックス制御を適用し、エフェクトを「自分のメッセージ?」とリネームします。
このチェックボックスがONかOFFかでフキダシの配置と色を切り替えてみましょう。
自分のメッセージならフキダシは右に、アンカーポイントがシッポ側にくる状況を維持したいので、スケールを[-100,100]と丸ごと左右反転する方式を採用します。
フキダシのスケールの仕掛け
フキダシを、対応するテキストレイヤーの「自分のメッセージ?」チェックボックスがOFFならそのまま、ONなら左右反転させるエクスプレッションは下記です。
if(thisComp.layer(index-1).effect("自分のメッセージ?")(1)==1){
[-value[0],value[1]];
} else {
value;
}
対応するテキストレイヤーは常にひとつ上に置くので、「thisComp.layer(index-1)」で指定します。
そして2行目は左右の反転なので、スケールを[-x, y]と、xをマイナスにするだけです。
フキダシの位置の仕掛け
フキダシの位置はほんのり難易度が上がります。
var x=0,y=0,posY,sizeY;
var ctrl=thisComp.layer("Control");
try {
posY=thisComp.layer(index+4).position[1];
sizeY=thisComp.layer(index+4).content("長方形 1").size[1];
} catch(e) {
posY=thisComp.layer(index+1).position[1];
sizeY=0;
}
if(thisComp.layer(index-1).effect("自分のメッセージ?")(1)==1){
x=ctrl.position[0]+ctrl.effect("左右の開き")(1).value;
} else {
x=ctrl.position[0]-ctrl.effect("左右の開き")(1).value;
}
y=posY+sizeY+ctrl.effect("フキダシ間隔")(1).value;
value+[x,y];
フキダシのヨコ位置は「Control」レイヤーのエフェクト「左右の開き」分左か右に、タテ位置は一つ前のメッセージ位置から、そのサイズ分下にズラさなくてはなりません。ヨコとタテを個別に噛み砕いてみましょう。
ヨコ位置は10行目からのif文で、「Control」レイヤーの位置を基準とし、相手のメッセージなら「左右の開き」の数値分xをマイナスし左へ。自分のメッセージなら「左右の開き」の数値分プラスし右へ配置し完成です。
タテ位置は3行目からの「try~catch」文があり複雑に見えますが、中身は単純です。レイヤーは冒頭で準備した4つセットを雛形としてコピペで増やしますので、一つ前のフキダシは常に4つ下のシェイプレイヤーです。「thisComp.layer(index+4)」でアクセスしますが、一番目のセットでは4つ下にレイヤーがありませんので、エラーとなります。
そのエラーを「予期せぬエラー」としてバグにするのではなく、「予期したエラー」として、エラー時の処理を仕込んでおけるのが「try~catch」文です。
「try~」内の処理に問題がなければ「catch(e)~」をスキップし、「try~」内でエラーが起これば、「catch(e)~」内の処理を実行します。
つまり4つ下のレイヤーからy位置と長方形 1のyサイズが「取得できれば(try)」それを使用し、「取得できなければ(catch(e))」一つ下のレイヤーのy位置と、エラーを回避した0というyサイズを使用します。
テキストのスケールの仕掛け
自分のメッセージでは親レイヤーであるフキダシを反転することから、テキストも反転してしまいます。テキスト自身も反転し直すことで、相殺します。
テキストレイヤーのスケールに下記のエクスプレッションを記述します。
if(effect("自分のメッセージ?")(1)==1){
[-value[0],value[1]];
} else {
value;
}
テキストの位置の仕掛け2
テキストの位置も発言者の切り替えにより微調整するようエクスプレッションを改良します。
var ctrl=thisComp.layer("Control");
if(effect("自分のメッセージ?")(1)==1){
var left=thisComp.layer(index+1).content("長方形 1").size[0]-(ctrl.effect("フキダシ左右余白")(1).value/2);
} else {
var left=(ctrl.effect("フキダシ左右余白")(1).value/2);
}
value+[left,ctrl.effect("フォントサイズ")(1).value+ctrl.effect("フキダシ上余白")(1).value];
変更となるのは2行目~6行目の変数「left」の定義だけです。
自分のメッセージなら、右配置のフキダシに左揃えのテキストという面倒な処理です。反転したことで右上になるフキダシのアンカーポイントから、メッセージのサイズ分だけ左に戻してやります。
テキストのサイズはフキダシが「sourceRectAtTime()」で拾っているので、長方形のxサイズ「thisComp.layer(index+1).content(“長方形 1”).size[0]」を足し(現在反転しているので+で左に動きます)ますが、これは余白含めたサイズなので「-(ctrl.effect(“フキダシ左右余白”)(1).value/2)」で余白の半分を抜きます。
これで左右切り替えでもテキストが正しくフキダシに乗るようになりました。
アイコンの位置の仕掛け
アイコンコンポジションをテキストレイヤーのすぐ上に配置し、位置に下記のエクスプレッションを記述します。
var x=0,y=0;
if(thisComp.layer(index+1).effect("自分のメッセージ?")(1)==1){
x=thisComp.layer(index+2).position[0]-40;
} else {
x=thisComp.layer(index+2).position[0]+40;
}
y=thisComp.layer(index+2).position[1];
//位置なので[x,y]の二次元の値を返す
value+[x,y];
サンプルとなる400×200pxのアイコンコンポジションでは、2つ下のレイヤー「thisComp.layer(index+2)」であるフキダシに対して、40px左右にズラすと、シッポが丁度いい位置にきます。
先程追加した発言者の切り替え処理で、2行目~6行目のif文により、フキダシの位置から40px左か右に振り分けます。
また上記では位置の微調整が必要な場合に備えて、「value」を残しましたので、アイコンの位置自体は[0,0]にしておいてください。でないとvalue(本来の位置)が足されてズレます。
アイコンのタイムリマップの仕掛け
こちらは非常に単純です。アイコンレイヤーを選択状態で、レイヤー>時間>フレームを固定を選択し、タイムリマップで停止状態にします。現れたタイムリマップに下記のエクスプレッションを記述します。
thisComp.layer(index+1).effect("自分のメッセージ?")(1)/(1/thisComp.frameDuration);
「thisComp.frameDuration」はコンポジションの1フレームが何秒かを数値で返す関数です。(29.97fpsなら0.0333667… / 24fpsなら0.041666…)
「1/thisComp.frameDuration」とすることでfpsが逆算できます。
さらに「1/(1/thisComp.frameDuration)」とすると、タイムリマップとして使えるそのコンポジションfpsでのフレーム数に変換できるので、1とか2とかのフレーム数でタイムリマップ指定しやすくなります。
“アイコンの準備”にて自分のアイコンを0フレーム目、相手のアイコンを1フレーム目にした意味がこのエクスプレッションです。
上述したとあるテクニックというのが、こちらですね。
チェックボックスエフェクトは、OFF=false、ON=trueという判定を返すのですが、false=0、true=1という数値としても扱えるのです。そのため、上記の単純なエクスプレッションで、「自分のメッセージ?」エフェクトがOFFなら0フレーム目、ONなら1フレーム目が表示されることになります。
送信音、受信音が鳴る
続いて送信音、受信音も2種類の効果音を用意し、アイコンと同様に1つのコンポジションに並べておき、タイムリマップで再生時間を振り分ければ、適した音が勝手に鳴るように設定できますね。
どんどん効率化、自動化できてきました。
送信音、受信音を準備する
効果音はLINEを想定し、「ピロン」と「ポンッ」でいいでしょう。
フリーの効果音素材サイト「効果音ラボ」様に最適な音源が見つかりましたので、今回はこちらの2種類を使用させて頂きます。
※直リンク不可ですので、該当音源のダウンロードボタンがある一覧ページを記載します。
↓決定、ボタン押下22
https://soundeffect-lab.info/sound/button/
↓コルク栓を抜く2
https://soundeffect-lab.info/sound/various/various2.html
これを1秒ずつ配置したコンポジションをSEコンポジションとして用意します。コンポジションが29.97fpsであれば、0~29フレームに相手のメッセージ音「ピロン」を配置し、30~59フレームに「ポンッ」を配置します。
この2秒のSEコンポジションをアイコンレイヤーの上に配置し、選択状態でレイヤー>時間>タイムリマップ使用可能を選択するか、ctrl+alt+T (Macはcommand+option+T)でタイムリマップを出現させます。
2秒の内1秒しか使わないので、タイムリマップ0:29にキーフレームを打ち、レイヤーのアウトポイントをここで終わらせてしまいましょう。元々ある2:00のキーフレームも削除してしまいます。
効果音のタイムリマップの仕掛け
続いてタイムリマップに下記のエクスプレッションを記述します。
value+thisComp.layer(index+2).effect("自分のメッセージ?")(1);
上述したように、チェックボックスは「0」か「1」の整数として扱えます。そしてタイムリマップでは整数は秒数に変換されます。
つまり、このエクスプレッションは「自分のメッセージ?」エフェクトがOFFなら「0:00~0.29までのキーフレーム」で、ONなら1という整数が追加されるので「1:00~1.29までのキーフレーム」に変わります。
つまり簡単に相手のメッセージには0秒から再生、自分のメッセージには1秒から再生する効果音をチェックボックスと直結できました。
フキダシが拡大しながら表示する
これも単純なものです。雛形のスケールにキーフレームアニメーションを設定してしまえば、コピペで増やす以降のフキダシ全て拡大アニメーション付きで増やしていけます。
回転も追加してみる
ちょっとこだわって回転も加えてみましょうか。その場合は自分のメッセージとして反転した際に回転方向も反転して欲しいので、回転に下記のエクスプレッションを記述するのを忘れないようにしましょう。
if(thisComp.layer(index-1).effect("自分のメッセージ?")(1)==1){
-value;
} else {
value;
}
もちろん、動きが必要なければキーフレームもエクスプレッションもいりません。
フキダシ間隔や色は変えたい
最後に、「Control」レイヤーに準備したエフェクトと、連動させたいプロパティをエクスプレッションでリンクさせていきます。
残るコントローラー用エフェクトは6項目です。
左右の開き(スライダー制御)…フキダシ左右の開き幅px- シッポ(チェックボックス制御)…フキダシのシッポの有無
- 角丸(スライダー制御)…フキダシの角丸サイズpx
- 自分の文字色(カラー制御)…色変更用
- 自分のフキダシ色(カラー制御)…色変更用
- 相手の文字色(カラー制御)…色変更用
- 相手のフキダシ色(カラー制御)…色変更用
フォントサイズ(スライダー制御)…フォントサイズの数値をここにも手動入力フキダシ左右余白(スライダー制御)…フキダシ内テキスト左右の余白フキダシ上余白(スライダー制御)…フキダシ内テキスト上の余白フキダシ下余白(スライダー制御)…フキダシ内テキスト下の余白フキダシ間隔(スライダー制御)…メッセージごとのタテの間隔
シッポの有無
エクスプレッションではシェイプ自体を表示/非表示はできないため、不透明度を0か100にして擬似的に実現します。
フキダシレイヤーのコンテンツ>シッポ用の塗りの不透明度に下記エクスプレッションを仕込みます。
thisComp.layer("Control").effect("シッポ")(1)*100;
これもチェックボックスを数値として扱い、ONなら不透明度を「1×100=100」に、OFFなら「0×100=0」にします。
フキダシの角丸サイズ
これはただ繋ぐだけです。コンテンツ>長方形 1>角丸の半径に、以下のエクスプレッションを記述します。
thisComp.layer("Control").effect("角丸")(1).value;
自分の文字色/相手の文字色
テキストの色は「文字」パネルで指定しますが、これはCC 2019以前ではエクスプレッションで参照できない箇所です。
※CC 2020では
text.sourceText.setFillColor(hexToRgb("FF0000"));
のように色をセットする新しいエクスプレッションが追加されましたが、今回のサンプルaepは互換性のためにCC 2017で保存してあります。この新しいエクスプレッションは使用しません。
そのため、一旦エクスプレッションで参照できるプロパティで色が付いている状態にして解決します。
「塗り」や「色かぶり補正」エフェクトでもいいですし、レイヤースタイルの「カラーオーバーレイ」でも構いません。要はストップウォッチが押せる状態まで持ってこられれば良いのです。
今回はテキストレイヤーのエフェクトは「自分のフキダシ?」チェックボックスがあり、作業中によく触る箇所なのでスッキリさせたいため、エフェクトではなくレイヤースタイルでいきます。
テキストを選択状態でレイヤー>レイヤースタイル>カラーオーバーレイを適用し、ここのカラーにエクスプレッションを記述しましょう。
if(effect("自分のメッセージ?")(1)==1){
thisComp.layer("Control").effect("自分の文字色")(1);
} else {
thisComp.layer("Control").effect("相手の文字色")(1);
}
これでメッセージの状態に合わせて、「Control」レイヤーで設定してある色に切り替わります。
自分のフキダシ色/相手のフキダシ色
こちらはただ繋ぐだけです。ただし今回、シッポをON/OFFさせるためにフキダシは本体とシッポの2パーツに分かれていますので、塗りが2つあることに注意して下さい。2つの塗りに同じエクスプレッションを適用します。
フキダシのシェイプレイヤー以下、コンテンツ>長方形 1に続く塗りと、コンテンツ>シッポに続く塗り両方です。
if(thisComp.layer(index-1).effect("自分のメッセージ?")(1)==1){
thisComp.layer("Control").effect("自分のフキダシ色")(1).value;
} else {
thisComp.layer("Control").effect("相手のフキダシ色")(1).value;
}
念の為「Control」レイヤーで色が変わること、シッポのON/OFFが効くことを確認しておきましょう。
完成
以上で1セット完成しました。
1セットが分かりやすいよう、上から番号を振っておくとコピペで増やした際にタイムラインが多少見やすくなります。リネームしておきましょう。
リネーム時の仕様ですが、末尾の数字はコピペで増やした際に勝手に連番で増えてしまいます。「フキダシ 1」というレイヤーを複製すると、「フキダシ 2」が作られます。
ここでは4つのレイヤーを1,2,3,4という数字があることで視認性を上げたいので、レイヤー名の頭に付けました。気にならない方は読み飛ばして下さい。
- 「1_LINE_se」…効果音コンポジション(中身2秒の1秒分タイムリマップ付き)
- 「2_icon」…アイコンコンポジション(中身2フレームで停止したタイムリマップ付き)
- 「3_Text」…メッセージ用のテキストレイヤー(チェックボックス付き)
- 「4_Balloon」フキダシ用のシェイプレイヤー
の4レイヤーが1セットです。4レイヤーまとめてコピペで増やして使います。
実際の編集をイメージして色々と試しながら、aep(プロジェクトファイル)の使い方を確認しましょう。
ダウンロード
LINE_Template.aep
LINE_AepEdition.jsx
※著作権によりサンプル用の音源をリンク切れにしています。
テンプレートの音源ファイルについて
今回は音源素材のみ、著作権のある「効果音ラボ」様の素材を使用しており、配布するテンプレートに素材を含めてしまうと再配布となってしまうため、これを同梱しておらず、リンク切れにしてあります。
そのままでも問題なく動作します。
ただし、動画のクオリティは音が半分を占めますので、クオリティを上げたい場合は、自身でより合う音を[mySE]と[otherSE]の2つのコンポジションに配置して下さい。
リンク切れファイルと同じものをお使いになりたい場合は、下記より該当音源をダウンロードしリンクを繋いでください。プロジェクトウィンドウ内のリンク切れファイルを右クリックし、フッテージの置き換え>ファイルを選択し、音ファイルを選んでリンクします。
「ピロン」という音は、
https://soundeffect-lab.info/sound/button/
より「決定、ボタン押下22」を、
「ポッ」という音は、
https://soundeffect-lab.info/sound/various/various2.html
より「コルク栓を抜く2」が好みでした。
aepの使い方
基本的には…4つのレイヤーをコピペで増やし、インポイントもまとめて表示させたい時間にズラし、テキストレイヤーを書き換え、「自分のメッセージ?」チェックボックスを適宜ON/OFFしながら増やす、の繰り返しです。
必要なら自身の演出に合わせてコントローラーで見た目を整えます。
全体をコントローラーの位置でスライド出来るので、メッセージの表示に合わせてキーフレームを打てば、長いやりとりにも対応可能です。
スクリプトで実践的な改良
自分でやりとりのメッセージを考えながら作っていくなら現時点でのプロジェクトで申し分ないかと思いますが、クラウド受注の編集案件では、エクセルやテキストでストーリーを素材として受け取ることも多いかと思います。
数十個、数百個の既に用意されたテキストをいちいちコピペするのって意味がわからないですよね。
そこで作ったスクリプトが「faceLine.jsx」なのですが…
これを今回のテンプレート用に作り直したのが同梱のスクリプト「line_AepEdition.jsx」です。アイコンと音の別コンポジション化までスクリプトで行うのは効率が悪かったので、今回作ったaepテンプレート専用スクリプトのセットにしました。
セットの専用スクリプトで激効率化
スクリプトを実行し、開いたウィンドウに、メッセージテキストを全部打ち込みます。
aepテンプレートの雛形1セットを上から順に4レイヤー選択した状態で「Export」ボタンをクリックします。
テキストの打ち込み方のルールとしては…
1.改行ごとに1フキダシに入り、次々とLINE画面を作っていきます。
2.メッセージ内で改行したい場合は、その行末に「<br>」と記述してください。複数行の1フキダシが作れます。
3.行頭に「<me>」を記述すれば、自分のメッセージを指定できます。行頭の「<me>」を検知して、該当テキストの「自分のメッセージ?」チェックボックスがONになります。
↓スクリプトへのテキスト入力方法はfaceLine.jsxと同様です。
スクリプトはいろいろと今回のaep専用ですが、スクリプト自体も開いて遊べるように暗号化しませんので、面白いアイディアがあれば改良して共有頂けると幸いです。
最後に
After Effectsは、エクスプレッション、スクリプトそれぞれの得意分野を連携させることで、今回のような効率化も実現させることができます。全てエクスプレッションで行おうとすれば、大量のテキスト読み込み効率化が実現できず、全てスクリプトで行おうとすれば、効果音やアイコンの調整が効率化できませんでした。
標準機能で何が出来て、何が出来ないのか、またエクスプレッション、スクリプトで何が出来て、何が出来ないのか、何が得意で何が苦手なのかを知っていくことで、オリジナリティある素晴らしい表現が閃くはずです。この発想力は個人が独自に持つ経験や環境から来るセンスに大きく左右されます。
同じAfter Effects技術を習得しても、活かし方は全く違うということです。この記事を受けて「ここはこんな使い方はどうか?」「スクリプトで全自動化できた」という声が出てくれば本望です。
この記事へのコメントはありません。