リンクをクリップボードにコピー
コピー完了
コンポジションのデュレーションをテキストのソーステキストでのエクスプレッションにて表示させる方法はありますでしょうか。
理想としては0+0のような表記で数字の値が変わっていくものだと理想通りです。
コンポジション設定によりデュレーションを変えるとテキストもそれに反映されて変わるといった具合にやりたいです。
リンクをクリップボードにコピー
コピー完了
0+0は、何を表しているのでしょうか?
例として、秒数+フレームにすると下記コードで表示できます。
const d = thisComp.duration;
const s = Math.floor(d);
const f = timeToFrames(d - s)
s + "+" + f
但し、このエクスプレッションでは、デュレーションのフレーム数が00以外の場合、1フレーム異なる値を表示することがあります。
リンクをクリップボードにコピー
コピー完了
<追記>
フレーム数の計算方法を変えた別案でもインターレースの場合、1フレーム増えてしまいます。
十分検証してインターレースが全て1フレーム増えている様なら、3行目に -1 をインターレースの時だけ追加することで対処できるかもしれません。
プログレッシブ
const d = timeToFrames(thisComp.duration);
const s = Math.floor(thisComp.duration);
const f = d - timeToFrames(s);
s + "+" + f
インターレース:
const d = timeToFrames(thisComp.duration);
const s = Math.floor(thisComp.duration);
const f = d - timeToFrames(s) -1;
s + "+" + f
リンクをクリップボードにコピー
コピー完了
<追記>
下記リンクの「Time Conversion のメソッド(エクスプレッションのリファレンス)」を参考にして、インターレースに対応した方法で変換すればコンポジションのデュレーションを表示できます。
但し、0+0の表記は、タイムコードではフィルムを使用した撮影になるので表示は異なります。
After Effects でのエクスプレッション言語
インターレース:
const d = thisComp.duration;
timeToNTSCTimecode(d)
リンクをクリップボードにコピー
コピー完了
アニメなどの秒+コマ表記なら一旦フレーム数にしてfpsで割って商と余りを加工するといった方法がありますが
timeToFeetAndFramesを使ったほうが簡単かもです。
全体尺の場合
var fps = 1/thisComp.frameDuration;
timeToFeetAndFrames(t=thisComp.duration, fps=fps, feetPerFrames=Math.ceil(fps), isDuration=true).replace(/^0{1,2}/,'')
現在の時間の場合
var fps = 1/thisComp.frameDuration;
timeToFeetAndFrames(t=time, fps=fps, feetPerFrames=Math.ceil(fps)).replace(/^0{1,2}/,'')
フィートフレーム表記は0000+00のようになるので先頭の0を2文字まで消すようにしています。
ただしプロジェクト設定の時間の表示形式がフレームで、フレーム数が1から開始になっている必要があり、コンポジション設定でも確認できますが、一般的にはこの設定になっていると思いますので大丈夫かと思います。