1
0
Эх сурвалжийг харах

frontend: Add Hybrid MOV to format list

derrod 11 сар өмнө
parent
commit
0619198c25

+ 2 - 4
frontend/OBSApp.cpp

@@ -1374,11 +1374,9 @@ string GetFormatString(const char *format, const char *prefix, const char *suffi
 string GetFormatExt(const char *container)
 {
 	string ext = container;
-	if (ext == "fragmented_mp4")
+	if (ext == "fragmented_mp4" || ext == "hybrid_mp4")
 		ext = "mp4";
-	if (ext == "hybrid_mp4")
-		ext = "mp4";
-	else if (ext == "fragmented_mov")
+	else if (ext == "fragmented_mov" || ext == "hybrid_mov")
 		ext = "mov";
 	else if (ext == "hls")
 		ext = "m3u8";

+ 2 - 1
frontend/data/locale/en-US.ini

@@ -749,7 +749,7 @@ Basic.Main.StopRecording="Stop Recording"
 Basic.Main.PauseRecording="Pause Recording"
 Basic.Main.UnpauseRecording="Unpause Recording"
 Basic.Main.SplitFile="Split Recording File"
-Basic.Main.AddChapterMarker="Add Chapter Marker (Hybrid MP4 only)"
+Basic.Main.AddChapterMarker="Add Chapter Marker (Hybrid MP4/MOV only)"
 Basic.Main.StoppingRecording="Stopping Recording..."
 Basic.Main.StopReplayBuffer="Stop Replay Buffer"
 Basic.Main.StoppingReplayBuffer="Stopping Replay Buffer..."
@@ -1015,6 +1015,7 @@ Basic.Settings.Output.Format.MOV="QuickTime (.mov)"
 Basic.Settings.Output.Format.TS="MPEG-TS (.ts)"
 Basic.Settings.Output.Format.HLS="HLS (.m3u8 + .ts)"
 Basic.Settings.Output.Format.hMP4="Hybrid MP4 [BETA] (.mp4)"
+Basic.Settings.Output.Format.hMOV="Hybrid MOV [BETA] (.mov)"
 Basic.Settings.Output.Format.fMP4="Fragmented MP4 (.mp4)"
 Basic.Settings.Output.Format.fMOV="Fragmented MOV (.mov)"
 Basic.Settings.Output.Format.TT.fragmented_mov="Fragmented MOV writes the recording in chunks and does not require the same finalization as traditional MOV files.\nThis ensures the file remains playable even if writing to disk is interrupted, for example, as a result of a BSOD or power loss.\n\nThis may not be compatible with all players and editors. Use File → Remux Recordings to convert the file into a more compatible format if necessary."

+ 2 - 0
frontend/settings/OBSBasicSettings.cpp

@@ -1055,6 +1055,7 @@ void OBSBasicSettings::LoadFormats()
 	ui->simpleOutRecFormat->addItem(FORMAT_STR("MP4"), "mp4");
 	ui->simpleOutRecFormat->addItem(FORMAT_STR("MOV"), "mov");
 	ui->simpleOutRecFormat->addItem(FORMAT_STR("hMP4"), "hybrid_mp4");
+	ui->simpleOutRecFormat->addItem(FORMAT_STR("hMOV"), "hybrid_mov");
 	ui->simpleOutRecFormat->addItem(FORMAT_STR("fMP4"), "fragmented_mp4");
 	ui->simpleOutRecFormat->addItem(FORMAT_STR("fMOV"), "fragmented_mov");
 	ui->simpleOutRecFormat->addItem(FORMAT_STR("TS"), "mpegts");
@@ -1064,6 +1065,7 @@ void OBSBasicSettings::LoadFormats()
 	ui->advOutRecFormat->addItem(FORMAT_STR("MP4"), "mp4");
 	ui->advOutRecFormat->addItem(FORMAT_STR("MOV"), "mov");
 	ui->advOutRecFormat->addItem(FORMAT_STR("hMP4"), "hybrid_mp4");
+	ui->advOutRecFormat->addItem(FORMAT_STR("hMOV"), "hybrid_mov");
 	ui->advOutRecFormat->addItem(FORMAT_STR("fMP4"), "fragmented_mp4");
 	ui->advOutRecFormat->addItem(FORMAT_STR("fMOV"), "fragmented_mov");
 	ui->advOutRecFormat->addItem(FORMAT_STR("TS"), "mpegts");

+ 7 - 3
frontend/utility/AdvancedOutput.cpp

@@ -106,9 +106,13 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_)
 			replayBufferSaved.Connect(signal, "saved", OBSReplayBufferSaved, this);
 		}
 
-		bool native_muxer = strcmp(recFormat, "hybrid_mp4") == 0;
-		fileOutput = obs_output_create(native_muxer ? "mp4_output" : "ffmpeg_muxer", "adv_file_output", nullptr,
-					       nullptr);
+		const char *mux = "ffmpeg_muxer";
+		if (strcmp(recFormat, "hybrid_mp4") == 0)
+			mux = "mp4_output";
+		else if (strcmp(recFormat, "hybrid_mov") == 0)
+			mux = "mov_output";
+
+		fileOutput = obs_output_create(mux, "adv_file_output", nullptr, nullptr);
 		if (!fileOutput)
 			throw "Failed to create recording output "
 			      "(advanced output)";

+ 12 - 0
frontend/utility/FFmpegCodec.cpp

@@ -130,6 +130,18 @@ static const unordered_map<string, unordered_set<string>> codec_compat = {
 		 "pcm_s24le",
 		 "pcm_f32le",
 	 }},
+	// Not part of FFmpeg, see obs-outputs module
+	{"hybrid_mov",
+	 {
+		 "h264",
+		 "hevc",
+		 "prores",
+		 "aac",
+		 "alac",
+		 "pcm_s16le",
+		 "pcm_s24le",
+		 "pcm_f32le",
+	 }},
 	{"mov",
 	 {
 		 "h264",

+ 7 - 3
frontend/utility/SimpleOutput.cpp

@@ -226,9 +226,13 @@ SimpleOutput::SimpleOutput(OBSBasic *main_) : BasicOutputHandler(main_)
 			replayBufferSaved.Connect(signal, "saved", OBSReplayBufferSaved, this);
 		}
 
-		bool use_native = strcmp(recFormat, "hybrid_mp4") == 0;
-		fileOutput = obs_output_create(use_native ? "mp4_output" : "ffmpeg_muxer", "simple_file_output",
-					       nullptr, nullptr);
+		const char *mux = "ffmpeg_muxer";
+		if (strcmp(recFormat, "hybrid_mp4") == 0)
+			mux = "mp4_output";
+		else if (strcmp(recFormat, "hybrid_mov") == 0)
+			mux = "mov_output";
+
+		fileOutput = obs_output_create(mux, "simple_file_output", nullptr, nullptr);
 		if (!fileOutput)
 			throw "Failed to create recording output "
 			      "(simple output)";