部分実装

FileとSource Layer#

Fileは外部ファイル、Source LayerはAfter Effectsのレイヤー画像を取得する入力です。取得した値は一回の評価に対する不変のスナップショットとして扱います。

Fileの選択#

通常の画像と、動画の現在時刻の画像はImageを返します。クリップ全体はVideo Data、連番はImage SequenceでVideoとして取得します。型は選択したモードから決め、拡張子だけで色空間や時間間隔を推測しません。

現在のFile UIではRead Asで次の取得方法を選び、ファイル選択欄からパスを指定します。ファイルを変更したらReloadで取得スナップショットを更新します。別のFileが共有しているパスの既定値を変更する場合は、片方の入力を独立させて編集します。

Read As 出力 現在の用途
Image Image<Color,2> 通常画像・HDR・選択したEXR Colorレイヤー
Video Image<Color,2> 現在時刻の画像。Speed・Start Frame・Repeatを指定
Video Data Video<Color,3> クリップ全体。実際のPTSによる時間Coordinate
Image Sequence Video<Color,3> 番号付き画像のフォルダーまたはmember、Frame Rate・Start Timeを指定
Bytes 内部Buffer<UInt8> JPEGやcodec等のバイト列操作。公開Value型の追加ではない
Numeric Table Grid<Float,2> CSV/TSVの数値表。列・行の有限Gridとして読む

Read Asの変更は取得するデータの意味と戻り値の型も変更します。直接の戻り値であるFileのモードを変更した場合は、その型宣言も追従します。下流の接続の型は別に検査します。Video Dataを画像処理へ渡す場合の現在時刻観測はCNL内部で行い、グラフへ補助ノードを追加しません。EXRのLayer欄は検査結果から候補を選びます。

静止画#

形式 現在の範囲 出力・解釈
PNG / JPEG / BMP / TGA / PNM 対応 Image。自動色空間変換なし
Radiance HDR 対応 FloatのHDR成分を保持したImage
OpenEXR 一部対応 選択したColorレイヤーをImageへ
TIFF / PSD 未対応 対応したと偽って読み込まない

画像のShapeはデコードしたサンプル数、DimensionはX,Y、Coordinateは元のピクセル位置です。色空間が判明しなければUnknownを保持します。Alpha Interpretationは取得契約から判明した場合のみ設定します。

画像の容量上限#

通常画像のデコード上限は各軸16384、合計32 Mi pixelsです。Float RGBAの最大容量は 512 MiBで、6000×4000のカメラJPEGも画素数の範囲内です。圧縮された画像ファイルの 取得上限は256 MiBです。一般のBuffer値の16 MiB制限とは区別します。全JPEG形式・色管理・カメラ固有の解釈を保証する上限ではありません。

EXR#

HALF/FLOATのscanline、tiledの基底レベル、multipartのColorレイヤーを読み込みます。Data WindowとDisplay Windowを別々に保持し、元の座標位置・Pixel Aspectを保持します。partとchannel prefixを含むIDを使用し、同名の別partを取り違えません。

ColorはImage、選択したScalarレイヤーはGrid<Float,2>、XYZレイヤーはGrid<Vector<Float,3>,2>として出力します。全レイヤーを同時に出す可変出力ソケットではありません。Deep、UINT、サブサンプリングされたチャンネル、選択mipは未対応として拒否します。対応状況を参照してください。

動画と連番#

VideoはX,Y,TimeのFieldです。動画のPTSなどから時間Coordinateを作り、可変レートを保持する契約です。連番は数値順・欠番・開始番号・時間間隔を確認し、フォルダを選んだだけで不明なレートを決め打ちしません。解像度や色解釈が不一致の画像は、無断で変換して一つのVideoにしません。

FileのVideoは、MP4/MOV、Matroska、AVIなどの凍結済みバイト列から現在時刻のImageを返します。Speed=1で通常再生、0でStart Frameを保持し、負で逆方向に進みます。Start Frameは実在する0始まりの整数です。Repeatをオフにすると先頭・末尾で保持し、オンでは末尾の実サンプル間隔まで含めた区間を繰り返します。フレーム補間はしません。

動画拡張子を選ぶとImage/Video系のモードからVideoへ切り替わります。Bytes/Numeric Tableの明示モードは維持します。復号時は実際の内容を検証します。H.264、HEVC、ProRes、VP8/9、MPEG-4などの組み込みdecoderを使い、実際のpresentation timestampを保持します。音声は読み飛ばし、色空間が確定していなければUnknownを保持します。クリップ全体が必要ならVideo Dataを選びます。

Video Data/Image Sequenceから別のサンプルを明示的に観測する場合は、Video FrameのSample/Timeを使えます。Sampleは0始まりの番号で、範囲外・非整数はエラーです。Timeは指定時刻以前の最新サンプルを保持します。先頭より前は先頭、末尾より後は末尾です。通常の画像処理ではこのノードを追加する必要はありません。

FileのVideoと画像処理向けの内部観測は、AE/Previewの評価時刻を既定に使います。Timeを明示すれば、対応する純粋なFloat32式で置き換えられます。小数の境界とPTSの精度差が一つ前のフレームを選ぶ原因にならないよう比較し、元のPTSは出力Imageのsource.timeに保持します。時刻と画像サイズは各エフェクトの評価環境に属し、ワークスペース全体の一つの固定値ではありません。

動画の取得は1ファイル8GiB・共有ディスク保持16GiBまでです。16MiBを超える動画は非公開のpaged snapshotへ凍結し、元ファイルを描画中に再読込しません。動画全体をFFTなどへ渡す有限データプロファイルは、復号Field512MiB、最大4096時間サンプルです。FileのVideoがVideo Frame/Output/Visualizeだけで観察される場合は、全画像の展開を省き、実際のPTSの索引と必要なフレームを使います。索引は最大1,048,576時間サンプル、既定の座標・メモリ予算以内です。解像度変更や不正な時刻を終盤まで検証するため、初回は動画全体を走査します。以後は同じ取得状態の索引を共有し、キーフレームから正確なPTSへシークします。索引のない形式は先頭から復号し、近い別フレームで代用しません。

同じフレームを繰り返し観察するときは、不変の入力サンプルを最大2枚・1ファイル当たり合計64MiBまで保持します。同一フレームへの同時要求は一回のデコード結果を共有し、一つの凍結動画に対する独立デコーダは同時に最大2個です。失敗結果はフレームキャッシュへ残さず、待機中の要求を解放します。加工後の出力キャッシュではなく、ノードの設定変更は再計算されます。Reloadは取得状態ごと索引とフレームを切り替えます。codecの可変状態はMFR間で共有しません。

一般のバイト列値・編集は16MiB、画像のencoded取得は256MiBまでです。 初回取得の高速化、全動画演算、独立した再生/スクラブUI、全EXRレイヤーの可変出力は未完成です。Image Sequenceは番号付き画像のmemberかフォルダーを選び、明示したFrame RateとStart Timeで時間配置を作ります。長尺・各codecの実AE受入は残ります。一般動画の読み込みとMPEG-4 I/P画像対の実験は別の契約です。

Source Layer#

Source Layerは配置直後からSourceとFrame Offsetを持ちます。Sourceの候補はUnbound、This Layer's Image、None / Transparentと、そのコンポジションのレイヤーです。Outputへ未接続でも編集できます。対象エフェクトごとの割当てを保存し、同名レイヤーを名前だけで識別しません。AEのレイヤーIDとプロジェクトの寿命を検証します。

Frame Offsetは取得するフレーム時刻のずれです。現在フレームと同じGPUバッファに前フレームを偽装しません。AEの事前レンダリングで正しい時刻をチェックアウトし、その結果領域を正しく報告します。UIスレッドからのAEGP情報取得と描画スレッドのSmartFX処理を、任意のスレッドで混ぜません。

複数エフェクトのうち対象が曖昧なら、勝手に先頭を選びません。読み込み・レイヤー消失・チェックアウト・時刻範囲の失敗は対象と原因を診断します。

ファイル取得の規則#

WindowsではExplorerなどからNode画面へ画像・動画ファイルをドロップすると、 そのパスを持つFileノードを作ります。一回に最大32ファイルで、未対応拡張子は 候補にしません。前面のPopupやPreview、Code、プロパティに隠れたNode画面には ドロップしません。UI上ではファイルを開かず、配置・パスの一括変更として保存します。

同じ内容の動画では、新たな凍結ファイルを取得してもPTS索引を再利用します。 キーはファイル名や更新日時ではなく、凍結した全バイトの内容IDとdecoder実装IDです。 共有するのは時刻・Shape等の不変索引だけで、ファイル本体・AE handle・可変decoderは 保持しません。索引cacheは最大8件・32MiB、独立した索引作成は同時に最大2件です。 同一内容への同時要求は一回の走査へ合流し、各要求のメモリ制限も再検査します。 File > Clear CompNodeAE Cacheは索引cacheも破棄します。 現在の取得状態では凍結したバイト列・索引・安全に貸し出したdecoderを再利用し、 時刻変更や画像処理パラメータの編集ごとに元ファイルを再コピー・再ハッシュしません。 Reload・AEP切替・キャッシュ破棄で取得状態を更新し、進行中の評価は自分の不変入力を保持します。 初回取得や、新フレームのseek/decodeのコストは残ります。 Windows Build76のFFmpegは静的リンクです。追加のFFmpeg DLLは不要で、SlangのDLLとは別です。

FileをVideoとしてOutput/Visualizeへ直接接続すると、TimeはAE現在時刻(秒)を既定にします。 内部Previewも同じTime引数で評価し、スクラブ後も先頭サンプルに固定しません。 Timeへ別のFloat式を接続すると明示的に上書きでき、切断すると既定の時刻へ戻ります。 CNLはvisualize_values_at_timeと通常の時刻引数を保存するため、Node/Codeで意味は一致します。 既存の静的Sliceや明示Video FrameのSample番号を、勝手に時刻へ読み替えることはありません。 全動画演算のTime伝搬、補間、連続再生UI、初回索引作成の高速化は別の未完了範囲です。

外部ファイルは評価開始時に固定した内容を使い、同じ評価中に変更されたファイルから部分的に読み直しません。サイズ上限、読取失敗、未対応形式、不正な内容は入力診断とします。CPUでのIO・デコードは明示的な取得処理で、GPU演算の失敗を隠す代替実行ではありません。

同じ取得状態の既定Imageは、最大64MiBの不変サンプルを一度デコードして共有します。画像の名前やAttributeを編集してもサンプルを複製しません。画素を変更した場合は別の所有データとなり、古いGPU入力やConvolveの係数FFTを流用しません。EXRのColorレイヤーも、元のCoordinate・Data Window・解釈を保持したまま物理入力へ渡します。全EXR出力の自動展開が完成したという意味ではありません。

Preview向けの入力再利用では、所有権付きの不変サンプルをGPUへ一度転送し、再評価で同じ入力を使う場合は転送と全画素比較を省きます。GPU入力保持は全体64MiB/最大8件、係数FFTの保持は128MiBの実行予算内です。出力用の割当てが入力を上書きしないよう分離し、ノード設定変更後の処理は実行し直します。出力がGPU内で完結する場合、CPUへ画像を読み戻す必要はありません。

この経路は、初回デコード、新しいフレームの取得・転送、実AEの色管理、画面到達時間まで1ms以内と保証するものではありません。GPUからJPEGなどのCPU codecへ渡す場合や、所有するCPU画像が最終出力として必要な場合は、明示的な同期・コピーを行います。

このページを編集GitHubへのアクセス権が必要です。

CompNode Guide · 日本語製品ドキュメント仕様と実装範囲は各項目で区別しています。

ドキュメントを検索

検索語を入力してください。

    ↑ ↓ で結果を移動、Enter で開く · 検索はこの端末内だけで実行されます。