OBS Studio 如何开启回放缓冲以保存最近几分钟的录像?
OBS Studio 如何开启回放缓冲以保存最近几分钟的录像【免费下载链接】obs-studioOBS Studio - Free and open source software for live streaming and screen recording项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studioOBS Studio 内置了回放缓冲Replay Buffer功能开启后OBS 会在内存中持续维护一段最近 N 秒的编码视频当你按保存回放时OBS 将缓冲区内的数据写入一个 MP4 文件。这个机制适合在游戏直播或屏幕录制中随时截取刚才发生的那段而不需要提前规划录制时间。本文基于 OBS Studio 仓库中的实际代码与资源文件给出从开启、配置到保存回放的完整操作路径并说明默认值、限制条件和验证方式。前提条件当前 Profile 的录像输出已配置完成Simple Output 或 Advanced Output 均可编码器可用。录像类型不能设为 Custom Output (FFmpeg)。设置界面对此有明确提示Replay Buffer cannot be used when recording type is set to Custom Output (FFmpeg). 来源en-US.ini 键Basic.Settings.Output.ReplayBuffer.UnavailableCustomFFmpeg对应代码中当customFFmpeg为真时高级设置界面的回放缓冲选项会被禁用OBSBasicSettings.cpp 第 5165 行。录像路径有效且磁盘空间充足。StartReplayBuffer()会先检查OutputPathValid()和LowDiskSpace()不满足则弹出错误并中止OBSBasic_ReplayBuffer.cpp 第 84–92 行。开启回放缓冲打开 OBS Studio 主窗口进入Settings → Output设置 → 输出。根据你选择的输出模式在对应选项卡中找到Enable Replay Buffer启用回放缓冲复选框输出模式配置键路径代码位置Simple OutputSimpleOutput/RecRBSimpleOutput.cpp 第 222 行Advanced OutputAdvOut/RecRBAdvancedOutput.cpp 第 88 行勾选后OBS 会创建一个id为replay_buffer的输出对象并绑定一个可选的热键配置键Hotkeys/ReplayBuffer。创建代码见 AdvancedOutput.cpp 第 98 行replayBuffer obs_output_create(replay_buffer, Str(ReplayBuffer), nullptr, hotkey);该输出类型由 obs-ffmpeg 插件注册定义在 obs-ffmpeg-mux.c 第 1250–1261 行struct obs_output_info replay_buffer { .id replay_buffer, .flags OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED | OBS_OUTPUT_MULTI_TRACK | OBS_OUTPUT_CAN_PAUSE, ... };配置缓冲区时长与内存上限在Settings → Output的回放缓冲区域有两个数值控件界面标签配置键默认值说明Maximum Replay Time最大回放时长max_time_sec15秒缓冲区中保留的最长时间Maximum Memory最大内存max_size_mb500MB缓冲区占用的最大内存默认值来自 obs-ffmpeg-mux.c 第 1241–1248 行static void replay_buffer_defaults(obs_data_t *s) { obs_data_set_default_int(s, max_time_sec, 15); obs_data_set_default_int(s, max_size_mb, 500); obs_data_set_default_string(s, format, %CCYY-%MM-%DD %hh-%mm-%ss); obs_data_set_default_string(s, extension, mp4); obs_data_set_default_bool(s, allow_spaces, true); }max_time_sec决定你最多可以回看多少秒的画面。如果你需要保存最近 3 分钟将 Maximum Replay Time 设为180。max_size_mb是内存上限。如果缓冲区在时间上已满但内存不足旧的包会被丢弃purge实际可回看时长会短于设定值。设置界面会根据你的编码器参数实时估算内存占用显示在 Estimated memory usage: %1 MB 提示中来源en-US.ini 键Basic.Settings.Output.ReplayBuffer.Estimate。若估算值超过推荐上限会显示警告 Warning: Estimated memory usage of %1 MiB is larger than recommended maximum of %2 MiB。此外还可以配置Replay Buffer Filename Prefix回放缓冲文件名前缀和Suffix后缀影响保存文件的命名。启动回放缓冲设置完成后有两种方式启动方式一主窗口按钮 / 系统托盘主窗口控制栏或系统托盘会出现Start Replay Buffer开始回放缓冲按钮界面标签来源en-US.ini 键Basic.Main.StartReplayBuffer。点击后进入启动流程检查是否已有源NoSourcesConfirmation检查输出路径与磁盘空间触发前端事件OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING保存当前场景集合调用outputHandler-StartReplayBuffer()真正启动输出。启动成功后按钮文字变为Stop Replay Buffer系统托盘同步更新日志中写入一行 Replay Buffer Start OBSBasic_ReplayBuffer.cpp 第 28 行、第 151 行。方式二热键如果你在 Output 设置中为 ReplayBuffer 绑定了热键按下热键会直接触发ReplayBufferActionTriggered()在启动与停止之间切换OBSBasic_ReplayBuffer.cpp 第 31–38 行。可选随推流自动启动在Settings → General中勾选Automatically start replay buffer when streaming推流时自动启动回放缓冲Keep replay buffer active when stream stops推流停止后保持回放缓冲运行配置键分别为BasicWindow/ReplayBufferWhileStreaming和BasicWindow/KeepReplayBufferStreamStops来源OBSBasicSettings.cpp 第 1318–1323 行。保存回放回放缓冲处于活动状态时点击主窗口的Save Replay按钮或通过热键即可触发保存。内部流程触发前端事件OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVING调用输出对象的saveprocobs-frontend-api.h 中obs_frontend_replay_buffer_save的实现见 OBSStudioAPI.cpp 第 300–303 行obs-ffmpeg 插件侧的save_replay_proc记录当前时间戳obs-ffmpeg-mux.c 第 917–932 行缓冲区中的全部编码包被重新排序、混流写入一个 MP4 文件。保存完成后状态栏显示Replay buffer saved to 路径en-US.ini 键Basic.StatusBar.ReplayBufferSavedTo前端事件OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED被触发默认还会自动调用 RemuxAutoRemux见 OBSBasic_ReplayBuffer.cpp 第 191 行。如何确认保存成功在 OBS 主窗口底部的状态栏查看是否出现了上述 Replay buffer saved to ... 消息。消息中的路径就是实际生成的 MP4 文件位置。你可以通过前端 APIobs_frontend_get_last_replay()获取该路径docs/sphinx/reference-frontend-api.rst 第 946–948 行。停止回放缓冲点击Stop Replay Buffer按钮或再次按热键。停止时状态栏/系统托盘显示Stopping Replay Buffer...日志写入 Replay Buffer Stop 前端事件OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED被触发若停止过程中出现错误码会弹出对应的错误对话框OBS_OUTPUT_UNSUPPORTED→ Output.RecordFail.UnsupportedOBS_OUTPUT_NO_SPACE→ Output.RecordNoSpace.Msg其他 → Output.RecordError.Msg来源OBSBasic_ReplayBuffer.cpp 第 194–230 行验证缓冲区确实在工作你可以通过前端 API 判断回放缓冲是否处于活动状态bool active obs_frontend_replay_buffer_active(); // 返回 true 表示缓冲区正在捕获数据该函数直接读取replaybuf_active全局标志OBSStudioAPI.cpp 第 310–313 行。在脚本Lua中可调用obs.obs_frontend_replay_buffer_active()进行相同判断。已知限制录像暂停时无法保存回放。如果录制处于暂停状态save_replay_proc会直接返回并写入日志Could not save buffer because the encoder is pausedobs-ffmpeg-mux.c 第 925–928 行。首次启动回放缓冲时若检测到录制已暂停OBS 会弹出警告对话框 Cannot save replays while paused并提供 Do not show again 选项OBSBasic_ReplayBuffer.cpp 第 40–66 行。Custom Output (FFmpeg) 模式下不可用。如前所述该模式下回放缓冲选项被禁用。缓冲区按关键帧丢弃旧数据。当max_time_sec或max_size_mb达到上限时replay_buffer_purge会从头丢弃包直到遇到下一个关键帧才停止obs-ffmpeg-mux.c 第 1014–1046 行。因此实际可回看时长取决于关键帧间隔可能略短于设定值。保存是异步的。混流在独立线程replay_buffer_mux_thread中执行保存期间不能再次保存if (os_atomic_load_bool(stream-muxing)) return;obs-ffmpeg-mux.c 第 1228–1229 行。可选使用 Instant Replay 脚本仓库自带一个 Lua 脚本可以在触发热键后自动保存回放并立即在媒体源中播放。脚本位于 plugins/frontend-tools/data/scripts/instant-replay.lua其script_description()说明When the Instant Replay hotkey is triggered, saves a replay with the replay buffer, and then plays it in a media source as soon as the replay is ready. Requires an active replay buffer.使用前提回放缓冲必须处于活动状态。脚本通过obs.obs_frontend_get_replay_buffer_output()获取缓冲区输出调用saveproc 保存然后轮询get_last_replayproc 获取文件路径最终将文件路径设置到一个ffmpeg_source或vlc_source类型的媒体源上进行播放。如果缓冲区未激活脚本会输出警告日志Tried to save an instant replay, but found no active replay buffer!。相关文件索引文件作用OBSBasic_ReplayBuffer.cpp主窗口中回放缓冲的启动 / 停止 / 保存 / 状态回调OBSBasicSettings.cpp设置界面上回放缓冲选项的读写与启用逻辑AdvancedOutput.cpp / SimpleOutput.cpp创建replay_buffer输出、绑定热键、绑定信号obs-ffmpeg-mux.creplay_buffer输出类型的完整实现缓冲、purge、保存、混流OBSStudioAPI.cpp前端 API 中回放缓冲相关函数的实现reference-frontend-api.rst前端 API 文档含obs_frontend_replay_buffer_*系列函数en-US.ini所有用户可见的界面文本【免费下载链接】obs-studioOBS Studio - Free and open source software for live streaming and screen recording项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考