Summary
Add support for the Hybrid MOV recording format (mov_output), which was introduced in OBS Studio 32.0.0 (commit 5f2a4e97, 2024-12-29).
OBS Studio currently supports the following native (in-process) muxer output types for crash-resilient recording:
| Format |
Output type |
Since |
| Hybrid MP4 |
mp4_output |
OBS 30.2.0 |
| Hybrid MOV |
mov_output |
OBS 32.0.0 |
Branch Output already supports hybrid_mp4 via mp4_output, but does not yet offer hybrid_mov via mov_output.
Motivation
Both Hybrid MP4 and Hybrid MOV write fragmented MP4/MOV in-process (no external obs-ffmpeg-mux.exe subprocess). This provides significantly better crash resilience compared to the current fragmented_mp4 / fragmented_mov formats, which rely on ffmpeg_muxer and an external mux process.
When OBS crashes while recording:
ffmpeg_muxer (fragmented_mp4/mov): The external mux process may or may not finalize the file depending on timing — recordings can be lost.
mp4_output / mov_output (hybrid_mp4/mov): Fragments are written directly to disk from the OBS process. The file remains playable up to the last completed fragment.
A user has reported losing Branch Output recordings on crash while using fragmented_mp4, even though OBS's own recording (also using ffmpeg_muxer) survived.
Proposed Changes
1. Recording output type selection (plugin-stream-recording.cpp)
Current:
const char *outputId = !strcmp(recFormat, "hybrid_mp4") ? "mp4_output" : "ffmpeg_muxer";
Proposed:
const char *outputId = "ffmpeg_muxer";
if (!strcmp(recFormat, "hybrid_mp4"))
outputId = "mp4_output";
else if (!strcmp(recFormat, "hybrid_mov"))
outputId = "mov_output";
2. UI format list (plugin-ui.cpp)
Add hybrid_mov to the recording format list:
obs_property_list_add_string(fileFormatList, obs_module_text("hMOV"), "hybrid_mov");
Consider also adding it to the replay buffer format list.
3. File extension mapping (utils.cpp)
Add hybrid_mov → .mov mapping.
4. Locale strings
Add hMOV key to all locale files.
5. Runtime compatibility
Since mov_output is only available in OBS ≥ 32.0.0, consider:
- Runtime check: attempt
obs_output_create("mov_output", ...) and handle failure gracefully, OR
- Only show the
hybrid_mov option in the UI when the output type is available (via obs_get_output_type_info("mov_output") or similar)
Reference
- OBS commit (Hybrid MOV):
5f2a4e976f9556799fbecdcbaf07ddf163350b5c
- OBS commit (Hybrid MP4 / native muxer):
df2a75fe4b7512ed7ce11f098f999a03c49e00dd
- OBS
mp4_output / mov_output definitions: plugins/obs-outputs/mp4-output.c
Summary
Add support for the Hybrid MOV recording format (
mov_output), which was introduced in OBS Studio 32.0.0 (commit5f2a4e97, 2024-12-29).OBS Studio currently supports the following native (in-process) muxer output types for crash-resilient recording:
mp4_outputmov_outputBranch Output already supports
hybrid_mp4viamp4_output, but does not yet offerhybrid_movviamov_output.Motivation
Both Hybrid MP4 and Hybrid MOV write fragmented MP4/MOV in-process (no external
obs-ffmpeg-mux.exesubprocess). This provides significantly better crash resilience compared to the currentfragmented_mp4/fragmented_movformats, which rely onffmpeg_muxerand an external mux process.When OBS crashes while recording:
ffmpeg_muxer(fragmented_mp4/mov): The external mux process may or may not finalize the file depending on timing — recordings can be lost.mp4_output/mov_output(hybrid_mp4/mov): Fragments are written directly to disk from the OBS process. The file remains playable up to the last completed fragment.A user has reported losing Branch Output recordings on crash while using
fragmented_mp4, even though OBS's own recording (also usingffmpeg_muxer) survived.Proposed Changes
1. Recording output type selection (
plugin-stream-recording.cpp)Current:
Proposed:
2. UI format list (
plugin-ui.cpp)Add
hybrid_movto the recording format list:Consider also adding it to the replay buffer format list.
3. File extension mapping (
utils.cpp)Add
hybrid_mov→.movmapping.4. Locale strings
Add
hMOVkey to all locale files.5. Runtime compatibility
Since
mov_outputis only available in OBS ≥ 32.0.0, consider:obs_output_create("mov_output", ...)and handle failure gracefully, ORhybrid_movoption in the UI when the output type is available (viaobs_get_output_type_info("mov_output")or similar)Reference
5f2a4e976f9556799fbecdcbaf07ddf163350b5cdf2a75fe4b7512ed7ce11f098f999a03c49e00ddmp4_output/mov_outputdefinitions:plugins/obs-outputs/mp4-output.c