Skip to content

Add Hybrid MOV (mov_output) recording format support #134

@hanatyan128

Description

@hanatyan128

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions