After Effectsにどっぷり浸かってしまった私は、サイト用の連番画像や簡単なイラスト、20分程度までならカット編集までAfterEffectsで制作する体になってしまったのです。
例に漏れず絵コンテもAfter Effectsで作り始めてしまい、提出段階で、カットの入れ替え、差し込みといった処理をもっと簡単に行える方法はないかと、エクスプレッションでの効率化を思いつきました。
After Effectsで制作をする場合、絵コンテ段階からAfter Effectsを使えれば、そのまま制作へ移行でき作業効率化できるケースがあります。
このような場合に役立つ、After Effectsでの絵コンテ制作のアイディアを探ってみます。
完成品のaepも配布しますので、使い方から記事にまとめ、自分の学びとして残します。
より良い改善点を見つけた方がいれば、とってもうれしいです。
ルールと欲しい機能の案出し
絵コンテはページのデザインこそ数あれど、その形式は決まっています。
- タイトル
- シーン、カット番号
- 画
- 説明テキスト
- 1コマの時間
- ページ番号
最低限これがあれば絵コンテとして成立します。そして記入するルールが決まったテンプレートです。
ルールが明確な繰り返し処理ほど、プログラムが得意なことはありません。自動化したいルールを整理します。
- シーン、カット番号は連番数字
- シーン変わりでカット番号が繰り上がる
- 画は制作に流用したいのでフルHDで準備
- シーン切り替わりで以降のコマは改ページしたい
- 説明テキストや1カットの時間などは画とセット
1ページのデザインを作れば、あとは繰り返しです。絵コンテを作ったらAfter Effectsから連番pngで保存できますので、そのpngをpdfにまとめることも簡単です。
After Effectsで絵コンテ制作が完結すれば、インポートの必要なく制作に進めます。エクスプレッションを使用してAfter Effects内で絵コンテを作るプロジェクトファイルを作ってみましょう。
雛形の準備
まずは1ページ分、とりあえずレイアウトを組むので、必要なパーツをリスト化します。
シーン、カット番号
シーン番号、カット番号はどちらも連番となるので、テキストレイヤーで準備しておきます。シーン切り替えによるカット番号のリセットですが、配置したテキストレイヤーにエクスプレッションで仕掛けを作れば、手打ちしなくて済みそうです。
画は制作に流用したいのでフルHDで準備
こちらはフルHDをプリコンポーズしたコンポジションを配置することで、ダブルクリックでフルサイズの画を編集できます。
ただコンポジションが1コマずつ別だと、絵コンテとして入れ替えが発生した際の修正効率が落ちます。入れ替わった後のコマ全てのコンポジションをスライドして入れ替えていては効率化の意味がありません。
1フレーム1コマの「画面」コンポジションを配置し、タイムリマップで表示するコマを指定できれば、入れ替えが簡単になるかと思います。
シーン切り替わりで以降のコマはスキップ(改ページ)したい
シーンが切り替わる際は、わかりやすいように改ページするケースが多いです。ただし、シーン切り替わり以外にも、1コマしか使わなかったページの余白に備考を追記することも多いので、一律改ページでなく非表示のコマを選べるというのが、都合が良さそうです。
説明テキストと1コマの時間は画とセット
説明テキストとそのコマ(カット)の時間は、画とセットで繰り上げ、繰り下げとなるので、タイムリマップで画を並べるのであれば、説明テキストもタイムリマップで追いかけなくてはなりません。そのため「内容」コンポジションとして1フレーム1コマとして配置します。
また、コマに対しての補足をするものなので、対応した画を見ながら記入する必要があります。「内容」コンポジションの中で「画面」コンポジションのプレビューが必要です。これはそのまま「画面」コンポジションを小さく表示してしまいましょう。
親コンポジションでは、このプレビュー用の「画面」コンポジションは見えてはいけないので、ガイドレイヤーにしておきます。
1ページ分のレイアウトを作る
これで仕掛けを施す大筋となる部品がわかりましたので、レイアウトを1ページ分作ってみます。これに画と文字のコンポジションを配置し、残りのページは複製で増やします。
絵コンテはA4にしますので、まずはA4サイズのコンポジションを用意します。A4は210x294mmですが、After Effectsのコンポジションはpxで指定しなくてはなりません。
PhotoshopでA4サイズのカンバスサイズを調べると、印刷用の300dpiでは2480x3508pxでした。大きなコンポジションってそれだけで抵抗感ありますね…。
今回はこんなレイアウトにしたいと思います。
並べる画は制作時に再利用するためフルHDで、補足説明文は好きな倍率で雛形に合う縦横比で問題ありませんので、コンポジションを作ります。
仕組みとしては、「画面」コンポジションは1フレーム1コマずつ配置すれば、絵コンテ上はキレイに並ぶように手動で配置し、どのフレームが表示されるかをタイムリマップとエクスプレッションで自動化します。
また、せっかくテンプレートなのでスキップしたコマは単純な非表示ではなく、「画面」コンポジション内の0フレーム目が表示されるようにし、自身でスキップ用のコマをデザインできるようにします。そのため1フレーム目以降を1コマ目以降に対応させます。
そして「内容」コンポジションは「画面」を見ながら記入したいので、下の画像のように「画面」コンポジションをそのままワイプで配置する方式を取ります。※これは親コンポジションにまで表示されてはマズいのでガイドレイヤーにしましょう。
後はレイアウトに合うよう、サイズを調整した「画面」「内容」コンポジションを並べます。その他最終的に必要な「タイトル」「シーン/カット」「日付」用のテキストレイヤーも並べておきます。配置は手動です。
ここまで来たら、あとは必要な箇所に必要な画、補足文が並ぶよう、タイムリマップにエクスプレッションを仕込みます。
エクスプレッションを作っていく
さあ、いよいよエクスプレッションを作っていきましょう。
自動化するプログラムを作り、使いやすい絵コンテに改造していきます。
カットのスキップ用チェックボックス
シーン切り替えによる改ページやページを跨ぐと分かりづらい流れがある場合などにコマをスキップする機能を追加します。チェックボックスでスキップのON/OFFが選べると直感的ではないでしょうか。
下記のように「4コマ目はシーン2に変わるので次のページにしたい」といった場合に、その度に「画面」コンポジションを上下にスライドしなくて済むよう、クリックで表示される画の順番が変更されるようにします。
スキップ用のトリガーとして「画面」コンポジションにスキップのON/OFFボタンを追加します。エフェクト>エクスプレッション制御>チェックボックス制御を追加し、「スキップ」とリネームしました。
シーン繰り上がり処理の案
シーン、カット用の数字も自動化しないと、結構な手間が残ります。今回はシーン切り替え箇所の指定にヌルオブジェクトを使用する案を考えました。名前に「[s]」が付いたレイヤーをトリガーとして、シーン数に+1、カット数が1に戻るようにエクスプレッションを仕込んでいきます。
画面のタイムリマップのエクスプレッション
「画面」コンポジションが何コマ目を表示するかは、エクスプレッションでタイムリマップの秒数が判定されるようにします。
メインとなる処理は、「一つ前のコマ+1フレーム」が表示され続ければいいのですが、スキップ処理と、1コマ目からのレイヤーの数が変わるシーン繰り上げ処理を入れるため下記のようなエクスプレッションでいかがでしょうか。1つずつ解説します。
var num=1;
var count=index-thisComp.layer("画面_01").index;
for(var i=0;i<count;i++){
if((thisComp.layer(thisComp.layer("画面_01").index+i).name.indexOf("[s]")==-1)&&(thisComp.layer(thisComp.layer("画面_01").index+i).effect("スキップ")(1)==0)){
num++;
}
}
if(effect("スキップ")(1)==1){num=0};
num/(1/thisComp.frameDuration);
1行目の変数「num」は最終的に何コマ目を表示するかのカウント用の数字です。
2行目の変数「count」には自分が何コマ目かが入ります。レイヤーインデックスをもとに「自身のレイヤー番号-1コマ目のレイヤー番号」(index-thisComp.layer(“画面_01”).index)で求められます。
3行目~7行目のfor文で1コマ目から自身のレイヤーまで(i<countまで)、1コマずつシーン切り上げ用レイヤーがないか(~.name.indexOf(“[s]”)==-1)、スキップチェックボックスがOFFのコマがあるか(~.effect(“スキップ”)(1)==0)チェックさせます。どちらでもなければ変数「num」に1足します(num++)。
「.indexOf(“△”)」は文字列検索をする関数です。先頭を0文字目として、”△”が何文字目にあるか数字で返します。マッチしなければ「-1」が返るので、これをif文の条件分岐に使います。
ここまでで「num」には自身が何コマ目を表示するレイヤーなのかが計算できましたので、最後に自分がスキップされるコマでないことを確認します。自分がスキップされるコマなら、「if(effect(“スキップ”)(1)==1){num=0};」で0フレーム目を表示、スキップされるコマでなければ7行目までの計算で出した「num」で順当なコマを表示します。
これで「スキップ」チェックボックスをONにすると、そのコマは非表示(0フレーム目)、その一つ下のコマに前のコマが繰り下がります。
スキップされたコマのタイムリマップは0フレーム目が表示されるので、0フレーム目は白紙や斜線、バツにすることで、擬似的にスキップに見える寸法です。
内容のタイムリマップのエクスプレッション
「内容」コンポジションが何コマ目を表示するかは、対応する「画面」コンポジションのタイムリマップと一致させます。
こちらもスキップ処理と、1コマ目からのレイヤーの数が変わるシーン切り上げ上げ処理を入れるため下記のようなエクスプレッションにしました。
var count=index-thisComp.layer("内容_01").index;
for(i=0;i<=count;i++){
if(thisComp.layer(thisComp.layer("画面_01").index+i).name.indexOf("[s]")!=-1){
count++;
}
}
thisComp.layer(thisComp.layer("画面_01").index+i-1).timeRemap
1行目の変数「count」には自分が何コマ目かが入ります。レイヤーインデックスをもとに「自身のレイヤー番号-1コマ目のレイヤー番号」(index-thisComp.layer(“内容_01”).index)で求められます。
2行目~6行目のfor文で1コマ目から自身のレイヤーが対応する「画面」コンポジションのレイヤーまで(i<countまで)、1コマずつシーン切り上げ用レイヤーがあるか(~.name.indexOf(“[s]”)!=-1)チェックします。
ここにシーン切り上げ用レイヤーが1入るごとに対応する「画面」コンポジションまでのレイヤーが1つ増えますので、チェックする最大値「count」を1足してfor文の繰り返しを延ばします。
シーン切り上げ用レイヤーの数、for文を延ばしたことで、「i」は自身が何コマ目を表示するレイヤーなのか+1までカウントアップされていますので、「thisComp.layer(thisComp.layer(“画面_01”).index+i-1).timeRemap」で該当の「画面」レイヤーのタイムリマップと同じ値を自身のタイムリマップに返します。
※for文が抜けた後の最終行で、対応するコマのタイムリマップを確認(thisComp.layer(thisComp.layer(“画面_01”).index+i-1).timeRemap)するため、2行目のfor文が「画面」コンポジション用のエクスプレッションと違い「i< = count」となることに注意して下さい。「=」を抜かすと「i」が1足りなくなり、1番目のカット数レイヤーでは一つ前のタイムリマップが見つからないためエラーとなります。
では「画面」レイヤーと「内容」レイヤーのタイムリマップが同期してスキップされるか確認しましょう。
出来ました。なんかこう…スカッとしますね!
シーン、カット番号のエクスプレッション
基本となる処理として、「一つ前のカット番号+1」が表示され続ければいいのですが、例に漏れずこちらもスキップ処理とシーン切り上げ処理が絡みますので、下記のようなエクスプレッションアイディアを試してみます。
今回シーン切り上げは手打ちなどの手間を限りなく省きたいので、「[s]」で始まるレイヤー名をトリガーとしました。シーン1-カット2の下に「[s]」で始まるレイヤーを置けば、その下のコマはシーン2-カット1となります。
var sceneNum=1,cutNum=0;
var count=index-thisComp.layer("カット数_01").index;
for(i=0;i<=count;i++){
if(thisComp.layer(thisComp.layer("画面_01").index+i).name.indexOf("[s]")!=-1){
sceneNum++;
cutNum=0;
count++;
}else{
if(thisComp.layer(thisComp.layer("画面_01").index+i).effect("スキップ")(1)==0){
cutNum++;
}
}
}
if(thisComp.layer(thisComp.layer("画面_01").index+i-1).timeRemap==0){
"";
}else{
sceneNum+"-"+cutNum;
}
1行目はシーン番号とカット番号用の変数宣言です。「sceneNum」「cutNum」ですが、シーン番号は1から始まるので初めから1を入れておきます(sceneNum=1,)。
2行目は「画面」コンポジションのタイムリマップと同様です。変数「count」には自分が何コマ目用の数字かが入ります。レイヤーインデックスをもとに「自身のレイヤー番号-1コマ目のレイヤー番号」(index-thisComp.layer(“カット数_01”).index)で求められます。
3行目~13行目のfor文で1コマ目から自身のレイヤーまで(i<=countまで)、1コマずつシーン切り上げ用レイヤーがあるか( ~.name.indexOf(“[s]”)!=-1 )、スキップチェックボックスがOFFのコマがあるか(~.effect(“スキップ”)(1)==0)チェックさせます。
※for文が抜けた後の14行目で、対応するコマがスキップ状態(thisComp.layer(thisComp.layer(“画面_01”).index+i-1).timeRemap==0)かを確認するため、3行目のfor文が「画面」コンポジション用のエクスプレッションと違い「i< = count」となることに注意して下さい。「=」を抜かすと「i」が1足りなくなり、1番目のカット数レイヤーでは一つ前のタイムリマップが見つからないためエラーとなります。
4行目からは“自身が上から何番目の「画面」レイヤーに対応するのか”に変換し、if文で条件を分岐させます。1コマ目から順にチェックし、シーン切り上げ用レイヤーがあればシーンが繰り上がりますので「sceneNum」に1を足し、カット数がリセットとなるので「cutNum」を0に、また、シーン切り上げ用レイヤーが1入るごとに対応する「画面」コンポジションまでのレイヤーが1つ増えますので、チェックする最大値「count」を1足してfor文の繰り返しを延ばします。
シーン切り上げ用のレイヤーがなければ、8行目のelseに入り、さらに「スキップされないレイヤーが見つかる度に(~.effect(“スキップ”)(1)==0)」カット数がカウントアップされます(cutNum++;)。
最後に「画面」コンポジション用のエクスプレッション同様に、対応する「画面」コンポジションがスキップされるか、タイムリマップが0かを見ても判断できますので、「if(thisComp.layer(thisComp.layer(“画面_01”).index+i-1).timeRemap==0){」でチェックし、スキップのコマであれば文字列なし「””」に、スキップのコマでなければ「シーン番号-カット番号」を表示します。
※「for(i=0;i<=count;i++){」では、for文を抜けた段階でiが最大値を1越えた状態になっていますので、for文後に「i」を最大値として使用する場合は「-1」とします。
では動きを確認してみましょう。
まずはカット数が「画面」のスキップに追従するかどうかです。
楽しい!オーケーです。
次にシーン切り上げの自動化処理です。
これで、ヌルレイヤーの移動だけで、連番の打ち直し作業から解放されました。
2ページ目以降はコピペで増やす
仕込んだエクスプレッションは連続で動き続けるので、レイアウトそのままで以降のページもコピペで増やして問題ありません。
タイトルと日付、ページ番号は全ページ共通ですので、1フレームだけでなく延ばしておきましょう。
また、ここまでくると毎回必要なページをコピペで増やすことすら手間ですので、普段作る絵コンテのページ数分はaepとして仕込んでおいてしまいましょう。
サンプルaepでは10ページ分入れておきます。足りない場合は増やして下さい。
また、ベースとなる動作は仕込み終わっているため、配置を変えるだけで好きなデザインに変更可能です。
こちらも3パターン同梱しています。
- A…上記説明で作ったパターン
- B…シーン数は切り上げ時のみ表示するパターン
- C…B+内容と音声の区切り線がないパターン
「画面」やページNo.を非表示にして手書き用に印刷して使っても良いでしょう。私は画を手書きする場合でも、スキャン後これに読み込んで順序の整理やテキストはデジタルで打つことがほとんどになりそうです。
完成
これでAfter Effects上で絵コンテを作成できるようになりました。ニッチなキワモノツールかと思いきや、使ってみると分かりますが想像をはるかに超えた便利ツールになりましたね。
使い方でも後述しますが、コマの追加、削除には「前方選択」ができると便利です。
途中にコマを追加する場合や、途中のコマを削除する場合、どちらも「画面」「内容」コンポジション内ではそのコマ以降全てを1フレーム繰り上げ、繰り下げしなくてはなりません。
対した手間ではないと思うでしょうが、絵コンテ制作前に構成が固まっていても、カットの追加、削除は出てくるものです。
これが意外と積み重なるため、とんでもない手間になるのです。After Effectsでは前方選択ツールがありませんので、限りなく似た操作が出来るスクリプトを公開しています。是非取り入れてみて下さい。飛びますよ。
ダウンロード
storyboard.aep
selectForword.jsx
使い方
[コンテ用紙]フォルダ内にA,B,Cパターンの絵コンテテンプレートが入っています。[コンテ用紙_]フォルダに編集用の「_01画面」「_02内容」コンポジションが入っていますが、絵コンテ上から配置してある「画面」「内容」コンポジションをダブルクリックして編集に入るのが直感的でしょう。
「画面」コンポジションにはイラストやイメージ画像を入れるなり、ある程度デザインも作り込むなり、1フレームに1コマずつ次々と入れていきます。
0フレーム目はスキップに使うので白紙にしておくのを忘れずに。
ちなみにフレームの移動は[Windows:ctrl/Mac:command + → or ←]です。Shiftも同時に押すと10フレーム移動です。
次に「内容」コンポジションで、対応するコマに補足文と音声、そのコマの時間を記述していきます。プロっぽい記述方法としては、音声は画面内の被写体が話す声は[ON]「○○~」、画面外の被写体の声は[OFF]「○○~」とし、時間は「フレーム数」もしくは「秒+フレーム」と書きます。
ただし共有する方が分かれば、”ナレーション「○○~」”なんて書いても問題ないでしょう。
最後に、シーン、カット番号を整えます。見やすいように「画面」の「スキップ」チェックボックスで適宜スキップなどしながら、雛形上で全ページ確認、調整しましょう。
コマの追加、削除
コマを追加、削除したい場合は、1フレーム1コマで並んでいますので、追加したいフレーム以降の画、補足文のレイヤーをまとめて前後にズラします。
レイヤーをまとめて選択するには、下記のスクリプトが便利です。現在の時間以降のレイヤーを全選択できます。
問題なければ、レンダリングするフレーム(ワークエリア)を指定します。現在の時間をワークエリアの開始点にするには[b]、現在の時間をワークエリアの終了点にするには[n]です。
連番pngで書き出し…
Adobe Acrobatを立ち上げ、pngをまとめてドラッグ&ドロップすると、一つのpdfにまとめられます。
Acrobatは持っていないという方も、pngをアップロードすると変換されたpdfがダウンロードできるオンライン変換サービス(PNGtoPDF)や、アップロードに抵抗がある場合、Windows用では印刷時に仮想プリンターを介してpdfを吐き出せるフリーソフト(Bullzip PDF Printer)などが一応ありますので、信頼性など気にしなければ手立てはあります。
ページ数が少なければpngで添付しても怒る方はいない…のではないでしょうか。言わないだけで見づらいと感じると思いますが…。
絵コンテがオーケーとなれば、「画面」コンポジションのレイヤー群を本番用のコンポジションに適宜持ってくれば、制作時間をブーストできます。
最後に
創意工夫で、使い慣れたAfter Effectsを絵コンテ制作ツールにすることができました。
シェイプレイヤーのリピーターや、仮の素材へのエフェクトなど、After Effects上で作る予定のものは初めからAfter Effectsで作れるのでおすすめです。
実写案件でも紙やPhotoshop、Illustratorで描いたイラストを読み込み、ちょっとテロップを付けてみたりエフェクトを足してみたり、補足説明とカット番号が効率良く作れる点だけでも、有用なツールになるかと思います。
この記事へのコメントはありません。