2008/7/24 (木)
RAネタ、その8a「コンポジションの尺を変更」
今回はコンポジションの長さ/尺を変えるスクリプトです。‥‥が、簡単そうに見えて、実は結構厄介なのが、コンポジションの尺の変更です。何が厄介かと言うと、‥‥まあ、やってみれば解ります。
コンポジションの尺を変える事自体は、とても簡単です。
任意のコンポジション.duration=任意の秒数;
‥‥たった、これだけです。どこにも難しい点はありません。
プロジェクト内のコンポジションの尺を全変更するのも、for構文でパパパのチョイナ(ちょっと古すぎるか‥‥)です。
main();
function main(){
var fps=24;
var modDur=getSeconds(prompt("0+0書式で入力してください","","変更後の尺を入力"),fps);
if(!modDur){return;}
var p=app.project;
for(var i=1;i<=p.numItems;i++){
var itm=p.item(i);
if(itm instanceof CompItem){itm.duration=modDur;}
}
}
function getSeconds(str,fps){
if(!str){return false;}
var arr=str.split("+");
while(arr.length<3){arr.unshift("0");}
var res=(Number(arr[0])*60)+(Number(arr[1]))+(Number(arr[2])/fps);
if(!res){alert("入力した値が不正です\r[ "+str+" ]\r上記入力にてエラーが発生しました");}
return res;
}
全てのコンポジションに尺変更を適用するスクリプトを作り、これで「完成!」と喜びたいところですが、‥‥時期尚早です。何故、尚早かと言うと、このスクリプトには、大きく欠けている部分があるからです。
上記スクリプトでうまくいくのは、「尺を短くする時だけ」です。長くした場合は、寸足らずのレイヤーだらけになります。

変更前の尺は、10+0
10+0を9+18に変更

万事うまくいった‥‥ように見えますが‥‥
今度は10+18に変更

あれまあ、寸足らずのレイヤーだらけ
作業者が手作業で全てのコンポジションの尺を変更する場合、単に「コンポジション設定」の尺を変更するだけではなく、レイヤーの長さも適宜調整して作業を完結しています。上記スクリプトには、その「適宜調整」のルーチンがポッカリ欠落している‥‥と言う訳です。
つまり、コンポジションの尺を変更すると言う事は、暗黙のうちに「レイヤーの面倒も見る」と言う事なのです。
こうした状況を前にして、「スクリプトによる操作は、人が状況を判断して、臨機応変に対処するようにはいかない」‥‥と考えてしまうのだとしたら、それは単に「観察や認識の不足」からくる大雑把な物言い‥‥と言わざる得ません。
たしかにコンピュータは人間の持つ「直感」や「感情」などを持ち合わせていません。絵コンテを高解像度でスキャンする事は出来ても、熟読し演出意図を汲み取る事はできません。お話を作ったり、美しい絵を描いたりするのは、人間がやれば良いのです。
‥‥しかし、寸足らずのレイヤーを伸ばす作業に、直感・美意識がどれだけ必要でしょうか‥‥?
少なくとも私は、レイヤーの尺/長さを調整する際に、「どこからともなくインスピレーションが湧き出て」調整しているのではなく、単に「状況をいくつかのケースにあてはめて、そのケースごとの対処をしている」だけです。まさか、レイヤーの尺調整に「神頼み」する人など、居まい‥‥。
「状況をいくつかのケースにあてはめて、そのケースごとの対処をする」‥‥ごく普通に考えて、プログラム化できそうな内容ですネ。あくまで「いくつかのケース」であって、「何千、何万、何億種類の、混沌とした組み合わせ」ではないのですから。
そこで単純に、「そうか。つまり、レイヤーのout点をコンポジションのend点に合わせれば良いんだ。」と考えがちですが、‥‥そんな簡単な話ではありません。自分自身が手作業で修正する際に、そんな安易なルーチンで、レイヤーのout点を調整しているのか、自分の脳内のルーチンを観察すれば解ってきます。
この「コンポジションの尺を変更」の話題は、結構長引きそうですので、「その8b」に続けます。バイビー。
作成者
ezura

