Timecode CHOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Timecode CHOP の SMPTE タイムコード生成を示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – SMPTE タイムコード生成と同期

Timecode CHOPは、SMPTE 規格に準拠したタイムコード(hh:mm:ss:ff)を生成・出力する CHOPです。Index 値・文字列・個別 H/M/S/F パラメータ・シーケンシャル増加の 4 モードで柔軟に生成でき、Drop Frame や Custom Length にも対応します。

主な用途 🎯

  • SMPTE 規格準拠のタイムコード生成(hh:mm:ss:ff フォーマット)
  • 映像・音声機器とのタイムコード同期(24/25/29.97/30/59.94/60 FPS 対応)
  • Drop Frame タイムコードの自動計算(29.97 等の分数 FPS 対応)
  • Index 値・文字列・個別パラメータ・シーケンシャルから複数モードで生成
  • Movie File In TOP / 外部 CHOP からのタイムコード参照と再生制御

データフロー 🔄

入力: Mode 選択(Index / String / H,M,S,F / Sequential)

Rate / Drop Frame 設定

SMPTE 規格判定(24 時間ループ / 負値許容)

内部タイムコード値計算

Custom Length / Extend Left・Right 処理

出力: hour / minute / second / frame / fps チャンネル

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Timecode Page 🎬

SMPTE .smpte 📺

SMPTE 規格準拠モードの ON/OFF

項目 内部名 説明
SMPTE .smpte オン: SMPTE 規格に準拠したタイムコードを生成。負のタイムコードは出力されず、タイムコードは 24 時間でループする。オフ: 負の値も許容され、最大 100 時間までのタイムコードを生成可能(汎用モード)。

Mode .mode 🔀

タイムコードの生成ソース

項目 内部名 説明
Specify Index .specifyindex 単一の Index 値からタイムコードを生成
Timecode String .timecodestr hh:mm:ss:ff または hh:mm:ss.ff 形式の文字列から生成
Hour, Minute, Second, Frame Parameters .timecodepar H/M/S/F の個別パラメータから生成。値はオーバーフローし、120 秒指定で 00:02:00:00 となる。小数値も可
Sequential .sequential タイムコードが時間経過に伴いシーケンシャルに増加

Rate .rate ⏯️

タイムコードの FPS(フレームレート):

  • Rate: タイムコードの FPS。最大フレーム値は rate-1 で決まる。分数値(29.97 等)を指定した場合は次の整数に丸められ、Drop Frame が有効なら drop-frame が計算される

Drop Frame .dropframe 🎞️

Drop Frame の計算方式

項目 内部名 説明
Off .off Drop-frame を追加しない
Automatic .auto Rate が分数値のとき drop-frame を自動追加。29.97 等の特殊レートは標準方式(10 分毎を除く 1 分毎に 2 フレーム追加)。それ以外は累積誤差から汎用計算

Index .index 🔢

Specify Index モードで使用する Index 値とその単位

Index .index 🔢
– タイムコード生成に使用する Index 値
– 単位は Index Unit で指定(indices / frames / seconds)

Index Unit .indexunit 📐
– Index 値の単位を指定
– 以下から選択:

  • I (indices)
  • F (frames)
  • S (seconds)

Timecode String .timecodestr 🔤

Timecode String モードで使用する文字列:

  • Timecode String: hh:mm:ss:ff または hh:mm:ss.ff 形式のタイムコード文字列

Hour / Minute / Second / Frame .hmsf

H,M,S,F Parameters モードで個別指定するタイムコード構成要素

Hour .hour 🕐
– タイムコードの時間成分

Minute .minute ⏱️
– タイムコードの分成分
– オーバーフロー可(60 を超えると上位に繰り上がる)

Second .second ⏲️
– タイムコードの秒成分

Frame .frame 🎞️
– タイムコードのフレーム成分

Sequential 制御 .sequential_control ▶️

Sequential モードでのタイムコード制御パラメータ

Initialize .init 🔄
– Sequential モードでタイムコード値を初期化

Start .start ▶️
– Sequential モードでタイムコードのシーケンシャル増加を開始

Play .play ⏯️
– 有効時は Sequential タイムコードが前進

外部参照 .external_ref 🔗

外部オブジェクト・CHOP・OP からのタイムコード参照

Timecode Object .timecodeobj 📦
– タイムコードオブジェクトへの参照

CHOP .chop 🎚️
– 以下のチャンネルの一部または全てを含む CHOP への参照:

  • negative
  • hour
  • minute
  • second
  • frame

OP .op 🎬
– タイムコード Python メンバを持つ OP への参照
– 例: MoviefileinTOP_Class

Custom Length .customlength 📏

タイムコードのカスタム長設定

項目 内部名 説明
Off .off カスタム長を使用しない。SMPTE では 23:59:59:ff-1、それ以外では 99:59:59:ff-1 がデフォルト長
By Value .value Length パラメータで指定した値をカスタム長として使用

Length .length 📐

Custom Length の長さ指定と単位

Length .length 📏
– カスタム長をサンプル・フレーム・秒のいずれかで指定

Length Units .lengthunits 📐
– カスタム長の単位を指定
– 以下から選択:

  • I (samples)
  • F (frames)
  • S (seconds)

Length Timecode Object .lengthtimecodeobj 📦
– カスタム長をタイムコードオブジェクトとして指定

Extend Left .extendleft ⬅️

下限を超えたときのタイムコードの挙動(SMPTE: 00:00:00:00 / それ以外: -99:59:59:ff+1)

項目 内部名 説明
Hold .hold 下限を超えたら値を保持。SMPTE は 00:00:00:00、それ以外は -99:59:59:ff+1 でホールド
Cycle .cycle 下限を超えたら循環。SMPTE は Length 値へ、それ以外は 00:00:00:00

Extend Right .extendright ➡️

上限(Length パラメータで定義)を超えたときのタイムコードの挙動

項目 内部名 説明
Hold .hold Length 値で値を保持
Cycle .cycle Length に到達したら 00:00:00:00 へ循環

Output Page 📤

出力チャンネル選択 .output_channels 📡

出力する CHOP チャンネルの ON/OFF。必要なチャンネルだけ有効化することで下流処理を軽量化できる

Negative Chan .negativechan
– オン: negative チャンネルを出力
– タイムコードが負のとき true。SMPTE モードでは常に false

Frame Chan .framechan 🎞️
– オン: frame チャンネルを出力

Second Chan .secondchan ⏲️
– オン: second チャンネルを出力

Minute Chan .minutechan ⏱️
– オン: minute チャンネルを出力

Hour Chan .hourchan 🕐
– オン: hour チャンネルを出力

Total Seconds Chan .totalseconds
– オン: total_seconds チャンネルを出力
– タイムコードを秒に変換した値

Total Frames Chan .totalframes 🎬
– オン: total_frames チャンネルを出力
– タイムコードをフレームに変換した値

Drop Frame Chan .dropframechan 🎞️
– オン: drop_frame チャンネルを出力
– タイムコードが drop-frame のとき true

FPS Chan .fpschan 📊
– オン: fps チャンネルを出力


Common Page 🔧

Time Slice .timeslice ⏱️

Time Slice モードの強制設定:

  • オン: チャンネルを「タイムスライス」モードに強制
  • タイムスライス: 前回のクックフレームから現在のクックフレームまでの時間

Scope .scope 🎯

影響を受けるチャンネルの絞り込み:

  • Scope 文字列: 影響を受けるチャンネルを指定する文字列
  • パターンマッチング: *[1-10] 等のパターンが使用可能

Sample Rate Match .srselect

複数の入力 CHOP のサンプルレートが異なる場合の処理方法

項目 内部名 説明
Resample At First Input’s Rate .first 最初の入力のレートで他をリサンプル
Resample At Maximum Rate .max 最高サンプルレートでリサンプル
Resample At Minimum Rate .min 最低サンプルレートでリサンプル
Error If Rates Differ .err レート不一致でエラー

Export Method .exportmethod 📤

CHOP チャンネルをパラメータに接続する方法

項目 内部名 説明
DAT Table by Index .datindex DAT テーブルのインデックスでチャンネルとパラメータを対応付け
DAT Table by Name .datname DAT テーブルの行名でチャンネルとパラメータを対応付け
Channel Name is Path:Parameter .autoname チャンネル名を `path:parameter` 形式で記述し直接対応付け

Export Root .autoexportroot 🌳

Channel Name is Path:Parameter モード時のパス基点:

  • Export Root パス: autoname モードでチャンネル名のパス部分を相対化する基点 OP のパス

Export Table .exporttable 📋

DAT Table エクスポート方式での参照 DAT:

  • Export Table DAT: datindex / datname モード時に参照する DAT のパス

Rename from .commonrenamefrom 🔤

リネーム対象チャンネルのパターン:

  • Rename from パターン: リネーム対象とするチャンネル名のパターンマッチング文字列

Rename to .commonrenameto 🔁

リネーム後の置換パターン:

  • Rename to パターン: Rename from にマッチしたチャンネルの新しい名前パターン (デフォルトはリネームなし)

実践アイデア 💡

Example 1: 映像再生のタイムコード表示 🎬

Movie File In TOP → Timecode CHOP (Mode: Sequential, Rate: 30) → Text TOP
  1. Movie File In TOP で映像を再生
  2. Timecode CHOP の Mode を「Sequential」、Rate を 30 FPS に設定
  3. Play パラメータを ON にしてタイムコードを前進
  4. 出力チャンネル(hour / minute / second / frame)を Text TOP に渡して画面に表示

Example 2: Drop Frame タイムコードでの放送向け同期 📺

Timecode CHOP (SMPTE: ON, Rate: 29.97, Drop Frame: Automatic) → Export to External Device
  1. SMPTE を ON、Rate を 29.97 に設定
  2. Drop Frame を「Automatic」にして標準方式の drop-frame 計算を有効化
  3. drop_frame / fps チャンネルを出力してタイムコード規格を明示
  4. 外部の VTR / 放送機器にタイムコードを送出して同期再生

Example 3: Movie File In TOP からのタイムコード参照 🎞️

Movie File In TOP → Timecode CHOP (Mode: HMSF, OP: moviefilein1) → CHOP Channels
  1. Movie File In TOP で映像ファイルを読み込み
  2. Timecode CHOP の OP パラメータに moviefilein1 を参照設定
  3. Movie File In TOP 内のタイムコードメンバを自動取得
  4. Total Frames / Total Seconds チャンネルでフレーム単位・秒単位の進捗を取得

Example 4: カスタム長ループでのインスタレーション制御 🔁

Timecode CHOP (Custom Length: 5分, Extend Right: Cycle) → Logic CHOP → Trigger CHOP
  1. Custom Length を「By Value」に設定し、Length を 300、Length Units を「S (seconds)」に
  2. Extend Right を「Cycle」にして 5 分経過後に自動でループ
  3. Total Seconds チャンネルを Logic CHOP で閾値判定
  4. シーン切替トリガーをインスタレーションの周期演出に利用

関連オペレータ 🔗

類似機能OP 🔍

  • Count CHOP — イベント数の計数(タイムコードではなく汎用カウンタ)
  • Beat CHOP — BPM ベースのビート同期(音楽用途のタイミング生成)

組み合わせ推奨OP 🔄

  • Movie File In TOP — 映像のタイムコードメンバ参照ソース
  • Logic CHOP — タイムコード値を閾値判定してシーン切替トリガーに
  • Trigger CHOP — 特定タイムコードでイベント発火
  • Math CHOP — Total Seconds 等のタイムコード値をスケーリング・変換
  • Switch CHOP — タイムコードに応じて再生ソースを切替

前処理・後処理CHOP 🎯


Info CHOP情報 📊

Timecode CHOPは Info CHOP による詳細情報取得に対応しています。

CHOP固有情報 🎚️

  • start: CHOPインターバルの開始(サンプル単位)
  • length: CHOPのサンプル数
  • sample_rate: フレーム毎秒のサンプルレート
  • num_channels: CHOPのチャンネル数
  • time_slice: タイムスライス有効時は1、無効時は0
  • export_sernum: Export接続の更新回数

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間(ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: Drop Frame タイムコードと整数 FPS の表示がズレる
✅ Solution:

  • Rate に 29.97 / 59.94 等の分数値を入れると Drop Frame が自動計算される(Drop Frame: Automatic)
  • 整数 FPS(30 / 60)では drop-frame が発生しないため、放送向けには分数値 + Automatic を使用
  • drop_frame チャンネルを出力して下流処理で drop-frame モードを明示判別

❌ Problem: SMPTE モードで負のタイムコードが出力されない
✅ Solution:

  • SMPTE モードは規格上負値を許容しないため、負タイムコードが必要なら SMPTE を OFF にする
  • OFF 時は最大 100 時間まで生成可能、負値も許容される(汎用モード)
  • negative チャンネルを出力して負タイムコード判定を取得

❌ Problem: タイムコード文字列が想定どおりにパースされない
✅ Solution:

  • Timecode String モードでは hh:mm:ss:ff または hh:mm:ss.ff 形式のみ受け付ける
  • 区切り文字(コロン・ピリオド)が正しいか確認、空白混入は不可
  • H,M,S,F Parameters モードに切替えて個別パラメータで確実に指定

❌ Problem: Custom Length 設定時のループ動作が想定と違う
✅ Solution:

  • Custom Length を「By Value」にし、Length と Length Units を整合させる
  • Extend Right を「Cycle」にすると Length 到達時に 00:00:00:00 へ戻る、「Hold」だと Length 値で停止
  • Extend Left の挙動も同様に Hold / Cycle で下限到達時の動作が変わる

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました