エクスプレッションを使用したテキストプロパティの編集とアクセス

最終更新日 : 2024年10月14日

エクスプレッション制御を使用したテキストスタイルおよびテキストプロパティの編集。

エクスプレッションを使用して、任意のテキストエクスプレッションまたはモーショングラフィックステンプレートのテキストスタイル設定を制御します。 エクスプレッションを使用して、次の操作を行うことができます。

  • 複数のタイトルをリンクし、それらのスタイルを一度に更新する(タイトルをデザインする場合に便利です)。
  • 複数のテキストレイヤーをまたいでフォント、サイズ、スタイルを同期させておきます。
  • テキストプロパティのグローバル変更を行う。
  • テキストレイヤー内の個々の文字のスタイル属性を設定します。

これをテキストレイヤーに設定した後は、そのレイヤーのプロパティを参照して、コンポジション全体で容易に変更を適用できます。 After Effects のエクスプレッションでは、プロパティを使用してテキストスタイル値を読み取り(get)、関数メソッドを使用してエクスプレッションエンジン内にテキストスタイル値を書き込むこと(set)ができます。 これにより、テキストレイヤー全体でテキストスタイルをリンクしたり、モーショングラフィックステンプレートでアニメーション化または使用するためのコントロールを設定したりできます。

エクスプレッションを使用してテキストプロパティを編集する前に

  1. プロジェクト設定エクスプレッションエクスプレッションエンジンJavaScript を選択して、エクスプレッションエンジンをJavascript に設定します。
  2. テキストレイヤーのソーステキストプロパティにエクスプレッションを追加します。
  3. エクスプレッション言語ポップアップメニューで、テキストプロパティテキストプロパティ またはテキストスタイルを選択します。

使用可能なテキスト属性

スタイルオブジェクトを使用して、次のテキストスタイル属性を読み取りおよび設定できます。

  • フォント
  • フォントサイズ
  • 太字
  • 斜体
  • オールキャップス
  • スモールキャップス
  • 字送り
  • 行送り
  • 自動行送り
  • ベースラインシフト
  • 塗り(有効/無効)
  • 塗りのカラー
  • 線(有効/無効)
  • 線のカラー
  • 線幅
  • 数字セット
  • スケール
  • カーニング
  • ツメ
  • ベースライン方向
  • ベースラインオプション
エクスプレッション言語ポップアップメニューには、選択するすべてのテキストプロパティが一覧表示されます。
エクスプレッション言語ポップアップメニューには、After Effects に現在あるものを含むすべてのテキストプロパティが一覧表示されます。

テキストレイヤーのソーステキストプロパティは、エクスプレッションで JavaScript 文字列として解釈されます。 テキスト自体は sourceText で読み取ることができますが、スタイル属性を変更する場合は setText メソッドを使用してスタイルオブジェクトに設定する必要があります。 一部の例については、こちらを参照してください。

段落を含むテキストレイヤーのエクスプレッション

新しいテキスト行の開始

文字列エクスプレッションで新しい行を開始するには \r を使用します。 例えば、レイヤー上のテキストをコピーし、すべて大文字に変換してから同じレイヤー上の次の行に追加するには、次のようにエクスプレッションを記述します。

textourceText + “\r” + textourceTextoUpperCase()

使用可能な段落属性 

テキストスタイル属性に加えて、段落属性もあります。 これらは、テキストレイヤー全体にのみ適用できます。 段落属性は、After Effects でのみ使用できます。

  • 方向
  • 複数行コンポーザー
  • 1 行目インデント
  • 配置 
  • 行送りの種類
  • 左マージン
  • 右マージン
  • 後のスペース
  • 前のスペース
  • ぶら下がり(欧文)
エクスプレッション言語フライアウトメニューには、現在 After Effects ベータ版にあるものを含むすべての段落プロパティがリストされます。
エクスプレッション言語フライアウトメニューには、After Effects に含まれるすべての段落プロパティが一覧表示されます。

PostScript フォントエクスプレッションメニュー

エクスプレッションでフォントを参照する場合は、特殊な「システム名」(または同様のもの)を使用する必要があります。 エクスプレッションエラーを防ぐには、テキストフォントフォントを選択ダイアログからこの特殊な名前を挿入することをお勧めします。

  • エクスプレッション言語フライアウトメニューを開き、テキストフォントを選択します。 これによりダイアログが表示されるので、エクスプレッションに挿入する書体やフォントをドロップダウンメニューから選択できます。
フォントメニュー
エクスプレッションに挿入する書体とフォントを選択するには、エクスプレッション言語メニューを使用します。

フォントの同期

エクスプレッションエディターで参照されているだけのフォントは、プロジェクトで使用されているフォントとして記録されません。 エクスプレッションエディターで参照されるすべてのフォントが自動的に同期される、またはフォントを解決ダイアログに表示されるようにするには、レイヤーのソースが非表示の場合でも、そのレイヤー上でこのフォントをすべて使用します。

style オブジェクト

テキストレイヤーのスタイルプロパティはすべて style オブジェクトに存在します。このオブジェクトには、ソーステキストプロパティで次のようにしてアクセスします。

// Source Textプロパティへの完全なパスを使用
text.sourceText.style

// 現在のプロパティの汎用名を使用
thisProperty.style

スタイルを単独で使用することは、上記の 2 つの例のいずれかを使用したのと同じですが、複数のテキストレイヤーのスタイル属性が組み合わされる場合は紛らわしくなる可能性があります。

他のテキストレイヤーのスタイル属性も読み取ることができます。 ピックウイップを使用して、上記の最初の例の先頭に、他のテキストレイヤーへのリンクを作成します。

// 特定のテキストレイヤーのスタイルオブジェクトにアクセス

thisComp.layer("Other Layer Name").text.sourceText.style;

テキストレイヤー内の個々の文字のスタイル属性

テキストエクスプレッションを使用して、テキストレイヤー全体のスタイル属性を設定するだけでなく、レイヤー内の個々の文字のスタイル属性を設定することもできます。 この文字単位制御の利点は、文字の拡大・縮小、上付き文字の使用、別のフォントの使用などを行う際に、テキストが自動的にリフローされることです。文字パネルの部分文字列スタイルを使用する場合と同じです。

特定の単語のフォントを変更する

text.sourceText.style
.setFont("Montserrat-Light")
.setFont("Gigantic", 0, 6).setFont("Gigantic", 10, 6).setFont("Gigantic", 20)

テキストレイヤーの最初の行を太字に設定して大きくする

text.sourceText.style.setFontSize(100, 0, 30).setFauxBold(true, 0, 30)

文字の上付き文字を設定する

この文字列を使用するには、テキスト「1st and 2nd Place」を含むテキストレイヤーを追加し、ソーステキストに次を適用します。

textourceTexttyleetBaselineOption(“superscript”,1,2)etBaselineOption(“superscript”, 9, 2)

スタイルとソーステキストの組み合わせ

テキストとスタイル
スタイルとソーステキストの組み合わせ

スタイルと実際のソーステキストの両方の値を返すには、getStyleAt 関数と setText 関数を組み合わせる必要があります。 この式を記述する方法の例を 2 つ、次に示します。

// スタイルと実際のSource Textの両方の値を時間で返す(省略形)

var sourceTextProperty = thisComp.layer("MAIN TEXT").text.sourceText;

var newStyle = sourceTextProperty.getStyleAt(0,0);

newStyle.setText(sourceTextProperty);

// レイヤースタック順序の前のレイヤーのスタイルと実際のSource Textの両方の値を返す

var sourceTextProperty = thisComp.layer(index - 1).text.sourceText;

var newStyle = sourceTextProperty.getStyleAt(0,0);

newStyle.setText(sourceTextProperty);

フォントのドロップダウン
ドロップダウンメニューへのフォントまたはスタイルのリンク

ドロップダウンメニューを使用すると、テキストレイヤーを特定のフォントにロックするなど、テキストスタイルを制御できます。 これは、ブランドガイドライン、テンプレート、MoGRTS などに役立ちます。

// ドロップダウンメニューコントロールでテキストレイヤーを特定のフォントに固定

var dropDownMenu = thisComp.layer("LayerName").effect("Dropdown Menu Control")("Menu");

switch (dropDownMenu.value) {

case 1 :

text.sourceText.style.setFont("Georgia");

break;

case 2 :

text.sourceText.style.setFont("Impact");

break;

default :

text.sourceText.style.setFont("Tahoma");

}

メインテキストレイヤー

マスターテキストレイヤー
「テキストレイヤー1」からテキストプロパティを取得します。ただし、フォントサイズと塗りのカラーはオーバーライドされます。

複数のテキストレイヤーをメインのフォントコントローラーにリンクして、一度に複数のレイヤーのテキストスタイルを制御できます。 2 つのテキストレイヤーを作成し、その中の 1 つのソーステキストに次のエクスプレッションをペーストします。

// テキストレイヤーからすべてのテキストプロパティを取得

thisComp.layer("Text Layer 1").text.sourceText.style;

テキストレイヤーからスタイルを取得しつつも、set 関数で値を追加することで特定のテキストプロパティをオーバーライドできます。 塗りのカラーフォントサイズを使った 2 つの例を次に示します。

// 「Text Layer 1」からすべてのテキストプロパティを取得し、塗りカラーとフォントサイズをハードコーディングされた値で上書き

var newStyle = thisComp.layer("Text Layer 1").text.sourceText.style;

newStyle.setFillColor(hexToRgb("FF0000")).setFontSize(100);

// 「Text Layer 1」からすべてのテキストプロパティを取得し、塗りカラーとフォントサイズをレイヤーの現在のテキストプロパティで上書き

var newStyle = thisComp.layer("Text Layer 1").text.sourceText.style;

var currentFillColor = thisProperty.style.fillColor;

var currentFontSize = thisProperty.style.fontSize;

newStyle.setFillColor(currentFillColor).setFontSize(currentFontSize);

以下に、エクスプレッションを含むテキストプロパティ値にアクセスして使用する方法の例を示します。

フォント

次の例は、テキストレイヤーのフォントフォントサイズ太字斜体字送り行送りにアクセスする方法を示しています。

// テキストレイヤー自体のフォント名を返す
text.sourceText.style.font;

// 別のテキストレイヤーが使用しているフォント名を返す
var otherLayer = thisComp.layer("Other Layer Name");

otherLayer.text.sourceText.style.font;

// テキストレイヤー自体のフォントサイズの値を返す
text.sourceText.style.fontSize;

// 別のテキストレイヤーのフォントサイズの値を返す
var otherLayer = thisComp.layer("Other Layer Name");

otherLayer.text.sourceText.style.fontSize;

// レイヤーのテキストが疑似太字かどうかのブーリアン値を返す(trueまたはfalse)
text.sourceText.style.isFauxBold;

// レイヤーのテキストが疑似斜体かどうかのブーリアン値を返す(trueまたはfalse)
text.sourceText.style.isFauxItalic;

// テキストレイヤーのトラッキングの値を数値として返す
text.sourceText.style.tracking;

// テキストレイヤーの行送りの値を数値として返す
text.sourceText.style.leading;

塗り

次の例では、テキストレイヤーの塗り塗りのカラーへのアクセス方法を示しています。

// レイヤーのテキストに塗りが適用されているかどうかのブーリアン値を返す(true または false)
text.sourceText.style.applyFill;

// テキストレイヤーの塗りカラーの値を返す
// デフォルトでは、0 ~ 1.0 スケールで RGB 値の配列を返します
text.sourceText.style.fillColor;

// setApplyFill と setFillColor でテキストレイヤーの塗りカラーを設定
// setFillColor の値は 0 ~ 1.0 スケールの RGB 配列として定義されます
var newStyle = style.setApplyFill(true);

newStyle.setFillColor([1.0, 1.0, 1.0]);

// 0 ~ 1.0 RGB 配列を hexToRGB に置き換えて、カラー値を Hex 値で定義してテキストレイヤーの塗りカラーを設定
var newStyle = style.setApplyFill(true);

newStyle.setFillColor(hexToRgb("FFFFFF"));

塗りのカラーの RGB 値

// 塗りカラーの赤(R)値を返す

text.sourceText.style.fillColor[0];

メモ

テキストレイヤーの塗りのカラーの R、G、B 値を返すには、それぞれ 0、1、または 2 を角括弧で囲んで追加します。

ストローク

次の例は、テキストレイヤーのカラー線幅にアクセスする方法を示しています。

// レイヤーのテキストにストロークが適用されているかどうかのブーリアン値を返す(TrueまたはFalse)
text.sourceText.style.applyStroke;

// テキストレイヤーの線カラーの値を返す
// デフォルトでは、0~1.0スケールでRGB値の配列を返します
text.sourceText.style.strokeColor;

// setApplyStrokeとsetStrokeColorでテキストレイヤーの線カラーを設定
// setStrokeColorの値は0~1.0スケールのRGB配列として定義されます
var newStyle = style.setApplyStroke(true);

newStyle.setStrokeColor([1.0, 0.0, 0.0]);

// 0~1.0RGB配列をhexToRGBに置き換えて、カラー値をHex値で定義してテキストレイヤーの線カラーを設定
var newStyle = style.setApplyStroke(true);

newStyle.setStrokeColor(hexToRgb("FF0000"));

// テキストレイヤーの線幅の値を数値として返す
text.sourceText.style.strokeWidth;

線の RGB 値

// 線カラーの緑(G)値を返す

text.sourceText.style.strokeColor[1];

メモ

テキストレイヤーの線のカラーの R、G、B 値を返すには、それぞれ 0、1、または 2 を角括弧で囲んで追加します。

getStyleAt 関数

特定の時間における特定の文字のスタイル値を返すには、この get 関数を使用します。 index には、スタイルが必要な文字のインデックスである数値を指定する必要があります。 atTime も数値を指定する必要があります。これは、スタイルがキーフレーム化され、時間的に変化する場合に、スタイルを取得するコンポジション内の時間を表します。

text.sourceText.getStyleAt(index, atTime);

メモ

text.sourceText.style を使用することは、text.sourceText.getStyleAt(0,0) を使用することと同じです。

// タイムラインの開始時の最初の文字のスタイルを取得

text.sourceText.getStyleAt(0,0);

Set 関数

個別に使用または互いに組み合わせて使用して、レイヤー全体にスタイルを適用できる追加の set 関数。 これらの関数は、それぞれソーステキストプロパティの style オブジェクトに対して呼び出されます。

// フォントをArialに設定
style.setFont("ArialMT")

// フォントサイズを80に設定
style.setFontSize(80);

// ブーリアンで疑似太字を有効にする
style.setFauxBold(true)

// ブーリアンで疑似斜体を有効にする
style.setFauxItalics(true)

// ブーリアンですべて大文字を有効にする
style.setAllCaps(true)

// ブーリアンでスモールキャップスを有効にする
style.setSmallCaps(true)

// トラッキングを数値として設定
style.setTracking(10);

// 行送りを数値として設定
style.setLeading(10);

// ブーリアンで自動行送りを有効にする
style.setAutoLeading(true);

// ベースラインシフトを数値として設定
style.setBaselineShift(10);

// ストロークの幅を数値として設定
style.setStrokeWidth(10);

// テキストレイヤーの最初の行を太字にして大きくする
text.sourceText.style.setFontSize(100, 0, 30).setFauxBold(true, 0, 30)

// 文字に上付き文字を設定する
text.sourceText.style.setBaselineOption("superscript",1,2).setBaselineOption("superscript", 9, 2)

次の例に示すように、テキストスタイルのすべての set 関数をつなげて使用すれば、毎回新しいスタイルを宣言しなくても、複数の属性を簡単に設定できます。

メモ

最後の属性が設定されるまで、セミコロンは使用されません。 属性ごとに別個の行に記述すると、チェーン全体が読みやすくなります。

// 塗りを有効にし、塗りカラーを設定、ベースラインを設定、トラッキングを設定、自動行送りを有効にする

text.sourceText.style

.setApplyFill(true)

.setFillColor(hexToRgb("FFFFFF"))

.setBaselineShift(10)

.setTracking(25)

.setAutoLeading(true);

ソーステキストに対するエクスプレッションのその他の使用法

コンポジションにテキストレイヤーを追加し、そのソーステキストプロパティにエクスプレッションを追加すると、他のレイヤーのプロパティ値が確認できて便利です。 例えば、ソーステキストプロパティに次のエクスプレッションを記述すると、すぐ次のレイヤーの不透明度プロパティの名前と値が表示されます。

var nextLayer = thisComp.layer(index + 1);
nextLayer.name + " 不透明度 = " + nextLayer.opacity.value;

以下の例では、ビデオスイッチが設定されている現時点で最上位の画像レイヤーのソースとして使用されているフッテージアイテムの名前が表示されます。

```json {"translatedText": ["// sourceFootageName を空の文字列として作成
", " var sourceFootageName = \"\";
", "
", " // コンポジション内のすべてのレイヤーをループ
", " for (var i = 1; i <= thisComp.numLayers; i++) {
", "
", " // i がこのレイヤーのインデックスと一致する場合、次のループに続行
", " if (i == index) {
", " continue;
", " }
", "
", " // ループの現在の反復でmyLayerを設定
", " var myLayer = thisComp.layer(i);
", "
", " // myLayerにビデオがない、またはプライマリでない場合、次のループ/レイヤーに続行
", " if ( !myLayer.hasVideo || !myLayer.active ) {
", " continue;
", " }
", "
", " // myLayerが現在の時刻でプライマリの場合
", " if ( myLayer.active ) {
", " try {
", " // sourceFootageNameをmyLayerの引用元名に設定
", " sourceFootageName = myLayer.source.name;
", " } catch ( err ) {
", " // myLayerに引用元がない場合、
", " // sourceFootageNameをmyLayerの名前に設定
", " sourceFootageName = myLayer.name;
", " }
", "
", " // ループを停止
", " break;
", " }
", " }
", "
", " // sourceFootageNameを表示
", " sourceFootageName;"]} ```

エクスプレッションをプリセットとして保存

エクスプレッションが追加されているソーステキストプロパティを選択します。 次に、アニメーションアニメーションプリセットを保存を選択して、他のプロジェクトでエクスプレッションを再利用します。 アニメーションプリセットは、エフェクト&プリセットパネルに保存されます。

詳しくは、エフェクトおよびアニメーションプリセットの概要を参照してください。

その他のエクスプレッション関連リソース

ここまでで、エクスプレッションの背景となる概念を理解したので、今度はコミュニティにアクセスして実例を参考にしたり、自分の作品を共有したりしてください。

AE Enhancers フォーラムには、エクスプレッションとスクリプトやアニメーションプリセットの例や情報も多数公開されています。