ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OBS Studio 如何使用 Studio Mode 在 Program 与 Preview 场景间切换?

OBS Studio 如何使用 Studio Mode 在 Program 与 Preview 场景间切换? OBS Studio 如何使用 Studio Mode 在 Program 与 Preview 场景间切换【免费下载链接】obs-studioOBS Studio - Free and open source software for live streaming and screen recording项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio做直播或录像时经常需要在当前画面继续播出的同时先把下一个场景准备好确认无误后再切出去。OBS Studio 的 Studio Mode 就是为这个流程设计的它把预览区域拆成 Program实际输出和 Preview待切换场景两块画面你只需在 Scene 面板选好 Preview 场景再点一下 Transition就用当前过渡效果把 Preview 场景切到 Program 上。本文基于 OBS Studio 仓库中的界面代码与前端 API 文档说明完整的启用、切换与验证流程。开启 Studio ModeOBS Studio 主窗口底部的控制栏里有一个 Studio Mode 切换按钮控件名modeSwitch定义在 OBSBasicControls.ui。点击它发出StudioModeButtonClicked信号OBSBasicControls.cpp最终调用 OBSBasic_StudioMode.cpp 中的TogglePreviewProgramMode()按当前状态开/关 Studio Mode。开启后主界面会发生以下变化均出自SetPreviewProgramMode()OBSBasic_StudioMode.cpp之前开启的预览显示Preview 窗格会被拆分为上下两块Program 窗格显示实际输出内容原来的预览区域变为 Preview 窗格两块之间出现 Transition 按钮、Quick Transitions 区域和 T-bar 滑块CreateProgramOptions()Program 窗格上方出现标题标签文本来自 en-US.ini 中的StudioMode.ProgramSceneLabel若开启了场景名标签会分别显示Program: 场景名和Preview: 场景名StudioMode.ProgramSceneName/StudioMode.PreviewSceneName如果此前预览显示被隐藏开启 Studio Mode 时会先自动启用预览显示Program 窗格渲染的是主输出纹理RenderProgram()调用obs_render_main_texture_src_color_only()即 Program 窗格里看到的就是实际推流/录制的内容。判断是否开启成功的三个依据控制栏的 Studio Mode 按钮进入高亮状态UpdateStudioModeState()会给按钮加上state-active样式OBSBasicControls.cppOBS 日志写入Switched to Preview/Program mode标签显示为Program: xxx/Preview: xxx。其中“Show preview/program labels”配置项StudioModeLabels在 OBSApp.cpp 中默认开启可在 设置 → 常规 页面通过 “Show preview/program labels” 复选框开关OBSBasicSettings.cpp同页还有 “Enable portrait/vertical layout”StudioPortraitLayout用于把布局改为纵向排列。选定初始 Program 场景并设置 Preview 场景开启 Studio Mode 时当前场景会被设为 Program 场景代码中把当前场景的副本/引用交给输出侧的obs_get_output_source(0)过渡源。因此推荐的操作顺序是先在 Scenes dock 里准备好多于一个的场景单击选中你希望首先播出/输出的场景使其成为当前场景点击控制栏的 Studio Mode 按钮开启该模式——此时 Program 与 Preview 显示的是同一个场景两块画面内容一致再在 Scenes dock 中单击选中另一个场景。此时 Preview 窗格随之变化而 Program 输出不受影响可以先把下一场景调好。场景列表在 Scenes dock 中的顺序与前端 APIobs_frontend_get_scene_names()返回的顺序一致见 reference-frontend-api.rst。另外常规设置中的 “Transition to scene when double-clicked”TransitionOnDoubleClick选项开启后双击场景会直接执行切换en-US.ini。执行 Preview 到 Program 的切换点击 Transition 按钮Program 与 Preview 窗格之间的 “Transition” 按钮是最直接的切换方式。其处理逻辑在 OBSBasic_Transitions.cppvoid OBSBasic::TransitionClicked() { if (previewProgramMode) { TransitionToScene(GetCurrentScene()); } }即仅在 Studio Mode 激活时生效把当前场景也就是 Preview 场景通过TransitionToScene()切到 Program。切换时使用你在底部过渡选择器中设定的场景过渡和时长相关文本见 en-US.ini 中的 “Scene Transitions”“Duration”。用 T-bar 手动控制过渡不想一次性触发完整过渡时可以拖动 Transition 按钮下方的 T-bar 滑块。滑块范围是 0–1023UI 中T_BAR_PRECISION为 1024拖动时过渡按比例推进松开鼠标后TBarReleased决定过渡落点。前端 API 也暴露了同样的能力reference-frontend-api.rstobs_frontend_set_tbar_position(int position)设置 T-bar 位置范围 0-1023obs_frontend_release_tbar()模拟鼠标松开确定过渡状态。快捷切换可选Quick Transitions 区域右侧的 “” 按钮可以从过渡菜单中添加快捷过渡按钮右侧三点菜单提供 “Duplicate Scene”“Edit Properties”“Swap Scenes” 等选项CreateProgramOptions()中onAdd/onConfig两处逻辑。直播中常用同一组场景反复来回切换时可以用它减少点击次数。切换后的验证画面验证Preview 窗格变为切换前的 Program 内容或你下一次选中的场景Program 窗格显示新的输出内容标签文本Program: xxx/Preview: xxx随之更新。日志验证场景切换会写入日志TransitionToScene()中以User switched to scene 场景名或Switched to scene 场景名记录OBSBasic_Transitions.cpp可在 OBS 日志Tools 菜单的日志查看入口中核对。输出验证Program 窗格渲染的是主输出纹理推流/录制的实际内容以 Program 窗格为准而不是 Preview。用快捷键或前端 API 控制可选快捷键OBSBasic_Hotkeys.cpp 注册了一对前端热键名称取自 en-US.ini 的 “Enable Studio Mode”OBSBasic.EnablePreviewProgram和 “Disable Studio Mode”OBSBasic.DisablePreviewProgram。在 工具 → 快捷键 中为它们分配按键后即可不碰鼠标开关 Studio Mode。前端 API / 脚本对插件或脚本Lua/Python入口见 scripting.rst 中 Tools → Scriptsreference-frontend-api.rst 定义了完整接口// 查询/开关 Studio Mode bool obs_frontend_preview_program_mode_active(void); void obs_frontend_set_preview_program_mode(bool enable); // Studio Mode 激活时把当前 Preview 场景切到 Program void obs_frontend_preview_program_trigger_transition(void); // 读写 Preview 场景非 Studio Mode 下 get 返回 NULL / set 无效 obs_source_t *obs_frontend_get_current_preview_scene(void); void obs_frontend_set_current_preview_scene(obs_source_t *scene); // Studio Program 投影 void obs_frontend_open_projector(const char *type, int monitor, const char *geometry, const char *name); // type 传 StudioProgram 可把 Program 画面投到指定显示器monitor 传 -1 为独立窗口配套事件同一文档OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED/OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED用户开关 Studio Mode 时触发、OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGEDStudio Mode 下 Preview 场景变化时触发。这些事件可以用obs_frontend_add_event_callback()订阅作为脚本侧的切换状态判断依据。Program 投影与截图右键 Program 窗格会弹出菜单OBSBasic_StudioMode.cpp把 Program 画面投到某块显示器或独立窗口对应ProjectorType::StudioProgram以及 “Save Program Screenshot” 对 Program 画面截图en-US.ini。关闭 Studio Mode 时的行为再次点击 Studio Mode 按钮或obs_frontend_set_preview_program_mode(false)退出该模式时SetPreviewProgramMode(false)会把当前场景直接设为原 Program 场景并执行TransitionToScene()——也就是说输出内容保持在最后切换上去的 Program 场景上不会回退OBSBasic_StudioMode.cpp。程序日志写入Switched to regular Preview modeProgram 窗格、Transition 按钮和 T-bar 一并移除界面回到普通 Preview 布局若此前预览显示本来是被隐藏的也会随之关闭。小结与限制切换的最小操作路径Scenes dock 选中待播场景 → 开启 Studio Mode → 选中要切出的场景Preview→ 点 Transition验证看 Program 窗格画面、Program:/Preview:标签和日志中的Switched to scene ...记录。obs_frontend_set_current_preview_scene()在 Studio Mode 未激活时是空操作obs_frontend_preview_program_trigger_transition()同理脚本里应先确认obs_frontend_preview_program_mode_active()返回true。本文涉及的行为均以当前仓库源码为准UI 逻辑在 frontend/widgets/OBSBasic_StudioMode.cppAPI 文档在 docs/sphinx/reference-frontend-api.rst。仓库文档未给出切换时长的默认值等数值相关时长以你自己在过渡选择器中的设定为准。【免费下载链接】obs-studioOBS Studio - Free and open source software for live streaming and screen recording项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表