Skip to content

Desuq Cafe

文档菜单

此翻译可能落后于最新的英文版本。 查看英文版

高级主题

本页介绍在通过时间轴深度驱动 OBS 时需要了解的行为:State 分段如何还原、停止时哪些状态会被恢复、性能保护机制,以及如何进行调试。

退出动作(仅限 State 类型)

对于 State 类型的动作(参见 分段类型),可配置分段结束时的行为:

  1. 不执行任何操作:动作在分段结束后持续生效。
  2. 自动反向:系统自动生成反向动作(例如,静音 → 取消静音)。
  3. 自定义退出动作:指定另一个动作来执行。

注意: 自动反向退出动作仅在启用还原且未设置显式退出动作时才会生成。反向播放会颠倒进入/退出语义:分段的”退出”动作将在反向播放时于分段起始处执行。

动画前状态恢复

启用 bRestoreStateOnTearDown 后,轨道会在播放前捕获 OBS 状态,并在以下情况下恢复:

  • 序列播放停止时。
  • 拖拽预览离开分段时。
  • 序列关闭时。

当前已恢复的内容:

  • 输出:录制(活跃、暂停)、推流、虚拟摄像头、Replay Buffer。
  • 场景:当前直播场景。
  • 场景项目:可见性、锁定状态、混合模式(通过 Continuous State tracks)。
  • 场景项目变换:位置、缩放、旋转、裁剪(通过 OBS Transform Track)。
  • 音频:输入静音状态、输入音量(dB)(通过 OBS Volume Track)、输入平衡(通过 OBS Balance Track)。
  • 转场:当前转场、转场时长(通过 OBS Transition Duration Track)。
  • 工作室模式:工作室模式是否启用、预览场景。
  • 滤镜:滤镜启用状态、滤镜设置值(通过 OBS Filter Setting Track)。
  • 来源:文本内容、浏览器 URL、图像文件、媒体文件及循环、颜色(通过 OBS Color Source Track)。
  • 媒体:游标位置(通过 OBS Media Cursor Track)。

未恢复的内容(即时动作):

  • 录制分割/章节标记、保存 Replay Buffer、推流字幕。
  • 媒体输入动作(播放/暂停/停止)、媒体游标位置。
  • 工作室模式转场触发。
  • 截图(无法撤销已拍摄的截图)。

注意: 动画前恢复使用了防抖处理(约 150ms 冷却时间,按分段而非按输入应用)。在该窗口内结束的两个分段可能会掩盖合法的状态变更。捕获操作针对的是最后缓存的 OBS 状态,而非实时查询,因此可能存在数据过时的情况。请注意,可关键帧轨道的目标(InputName/来源)位于轨道上,而非分段上。

性能特性

Sequencer 集成包含多项优化:

特性说明
动作队列33ms 节流(约 30fps),确保关键帧动画流畅,同时防止请求泛滥
去重同一帧内的重复动作会被合并
批处理请求多个动作作为单次 OBS 请求发送(每批最多 48 个)
防抖恢复150ms 冷却时间,防止拖拽预览期间频繁触发状态恢复
统一路由所有可关键帧轨道均通过动作队列路由,保证节流/批处理的一致性

编辑器通知

当动作执行失败时,编辑器中会出现弹出通知并显示错误详情。主要动作(开始/停止录制、开始/停止推流)的成功通知可按需启用。

使用案例示例

电影级录制

[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

Replay 精彩片段

[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 值列表请参见 动作参考

Sequencer 故障排除

问题解决方法
动作未触发检查轨道是否被静音。若处于拖拽预览状态,还需确认 bFireActionsWhenScrubbing 已启用。
轨道头显示红点OBS 未连接。请通过 Editor Subsystem 或 OBS Component 进行连接。
状态未恢复确保轨道上的 bRestoreStateOnTearDown 已启用
动作触发多次在快速拖拽预览时属正常现象。队列会将最小间隔节流至 33ms。
弹出通知显示错误检查 OBS 是否正在运行,以及动作参数是否有效