高度なトピック
このページでは、タイムラインから OBS を本格的に制御する際に重要となる動作について説明します。具体的には、State セクションの復帰方法、停止時に復元される状態、パフォーマンス保護機能、デバッグ方法を取り上げます。
終了アクション(State タイプのみ)
State タイプのアクション(セクションタイプ を参照)では、セクション終了時の動作を設定できます。
- 何もしない: セクション終了後もアクションが持続します。
- 自動復帰: システムが逆のアクションを生成します(例:ミュート → ミュート解除)。
- カスタム終了アクション: 実行する別のアクションを指定します。
注意: 自動反転の終了アクションは、復帰が有効で明示的な終了アクションが設定されていない場合にのみ生成されます。逆方向再生では入場/退場のセマンティクスが反転します。逆方向では、セクションの「終了」アクションがセクション開始に相当するタイミングで実行されます。
事前アニメーション状態の復元
bRestoreStateOnTearDown が有効な場合、トラックは再生前の OBS の状態をキャプチャし、以下のタイミングで復元します。
- シーケンスの再生が停止したとき。
- セクションからスクラブで離れたとき。
- シーケンスが閉じられたとき。
現在復元される項目:
- 出力: 録画(アクティブ、一時停止)、配信、仮想カメラ、リプレイバッファ。
- シーン: 現在のプログラムシーン。
- シーンアイテム: 表示状態、ロック状態、ブレンドモード(Continuous State Track 経由)。
- シーンアイテムのトランスフォーム: 位置、スケール、回転、クロップ(OBS Transform Track 経由)。
- 音声: 入力のミュート状態、入力の音量(dB)(OBS Volume Track 経由)、入力のバランス(OBS Balance Track 経由)。
- トランジション: 現在のトランジション、トランジション時間(OBS Transition Duration Track 経由)。
- Studio Mode: Studio Mode の有効状態、プレビューシーン。
- フィルター: フィルターの有効状態、フィルター設定値(OBS Filter Setting Track 経由)。
- ソース: テキストコンテンツ、ブラウザ URL、画像ファイル、メディアファイルとループ、カラー(OBS Color Source Track 経由)。
- メディア: カーソル位置(OBS Media Cursor Track 経由)。
復元されない項目(即時アクション):
- 録画の分割/チャプター、リプレイバッファの保存、配信キャプション。
- メディア入力アクション(再生/一時停止/停止)、メディアカーソル位置。
- Studio Mode のトランジショントリガー。
- スクリーンショット(撮影した写真は元に戻せません)。
注意: 事前アニメーションの復元はデバウンスされます(約 150ms のクールダウンで、入力単位ではなくセクション単位で適用)。この時間内に終了する 2 つのセクションは、正当な状態変化を隠してしまうことがあります。キャプチャは最新のクエリではなく、最後にキャッシュされた OBS の状態に対して行われるため、情報が古い場合があります。Keyframeable Track のターゲット(
InputName/ ソース)はセクションではなくトラックに紐付いていることに注意してください。
パフォーマンス機能
シーケンサー統合にはいくつかの最適化が含まれています。
| 機能 | 説明 |
|---|---|
| アクションキューイング | 33ms のスロットリング(約 30fps)により、キーフレームアニメーションをスムーズに保ちつつスパムを防止 |
| 重複排除 | 同一フレーム内の重複アクションはマージされます |
| バッチリクエスト | 複数のアクションを単一の OBS リクエストとして送信(バッチあたり最大 48 件) |
| デバウンスされた復元 | 150ms のクールダウンにより、スクラブ中の急速な状態復元を防止 |
| 統合ルーティング | すべての Keyframeable Track がアクションキューを経由し、一貫したスロットリング/バッチ処理を実現 |
エディタ通知
アクションが失敗した場合、エディタにエラー詳細を含むトースト通知が表示されます。主要なアクション(録画の開始/停止、配信の開始/停止)については、成功通知を有効化できます。
ユースケース例
シネマティック録画
[0:00] StartRecord section
[0:05] SwitchScene("CloseUp") section
[0:15] SwitchScene("WideShot") section
[0:30] StopRecord section
ライブショーの自動化
[Intro] SwitchScene("TitleCard") + StartStream
[Main] SwitchScene("MainCamera") + UnmuteInput("Mic")
[Outro] SwitchScene("EndCard") + MuteInput("Mic")
[End] StopStream
リプレイハイライト
[Boss Defeated] SaveReplayBuffer section
[Victory Screen] SwitchScene("Victory") section
C++ アクセス
// The Sequencer system uses these key classes:
#include "Sequencer/MovieSceneOBSTrack.h"
#include "Sequencer/MovieSceneOBSSection.h"
#include "Sequencer/InhyeongOBSSequencerTypes.h"
// Action metadata is available via the registry
const FOBSSequencerActionMetadata* Meta = FOBSSequencerActionRegistry::GetMetadata(EOBSSequencerAction::SwitchScene);
if (Meta && Meta->bRequiresTargetName)
{
// This action needs a target name (scene name)
}
// Get all actions in a category
TArray<EOBSSequencerAction> RecordingActions =
FOBSSequencerActionRegistry::GetActionsForCategory(EOBSSequencerActionCategory::Recording);
EOBSSequencerAction の値の完全なリストは アクションリファレンス を参照してください。
シーケンサーのトラブルシューティング
| 問題 | 解決策 |
|---|---|
| アクションが発火しない | トラックがミュートされていないか確認してください。スクラブ中の場合は bFireActionsWhenScrubbing も確認してください。 |
| トラックヘッダーの赤いドット | OBS が接続されていません。Editor Subsystem または OBS Component 経由で接続してください。 |
| 状態が復元されない | トラックで bRestoreStateOnTearDown が有効になっているか確認してください |
| アクションが複数回発火する | 急速なスクラブ中は正常です。キューは最小 33ms でスロットリングされます。 |
| トースト通知エラー | OBS が起動していること、およびアクションのパラメーターが有効であることを確認してください |