From 5ceca72cd8a83882ff1bbc48f295e136e801039e Mon Sep 17 00:00:00 2001 From: Amelia <101548356+AmeliaGL0w0@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:22:17 +0200 Subject: [PATCH 1/6] Fix AV1 renders for good + deleting old temp files --- RenderMod/Render/RenderManager.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/RenderMod/Render/RenderManager.cs b/RenderMod/Render/RenderManager.cs index 26a5f47..deda925 100644 --- a/RenderMod/Render/RenderManager.cs +++ b/RenderMod/Render/RenderManager.cs @@ -113,6 +113,9 @@ public static void StopRender() Process.Start("explorer.exe", $"/select,\"{finalMp4}\""); DingPlayer.shouldPlayDing = true; + //deleting temp files + File.Delete(latestVideoFile); + File.Delete(latestAudioFile); } catch (Exception ex) { @@ -155,7 +158,17 @@ internal static void SceneChange(Scene scene1, Scene scene2) { _log.Notice("Exiting gameplay scene, starting audio capture in 2 seconds"); // leaving gameplay (render end) - Task.Delay(2000).ContinueWith(t => StartAudioCapture()); + var codec = ReplayRenderSettings.VideoCodec; + if (codec == "av1") //have to delay audio capture a bit more when using av1, ffmpeg takes longer to finish doing its av1 shit + { + _log.Notice("AV1 detected, waiting 20 seconds longer"); //20 seconds longer is fine imo, especially if software encoder is in use + Task.Delay(22000).ContinueWith(t => StartAudioCapture()); + } + else + { + Task.Delay(2000).ContinueWith(t => StartAudioCapture()); + } + } break; case RenderState.Audio: From 630fa557ce98d1bf3d4ec25128355c3b81845c98 Mon Sep 17 00:00:00 2001 From: Amelia <101548356+AmeliaGL0w0@users.noreply.github.com> Date: Thu, 23 Apr 2026 14:23:01 +0200 Subject: [PATCH 2/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7bdb300..57d2baf 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ - Resolution (supports output higher than your display resolution) - Frame rate (FPS) - Camera settings (Camera2, ReeCamera, None or Default) + - Encoding (h.264, HEVC, AV1) - Output files saved to: ``` Beat Saber/Renders/Finished @@ -37,4 +38,3 @@ From there, you can: *(The mod will not run unless using `-fpfc` or the first person flying controller)* - Ensure that the replay files being played are not broken or your replay playback mod is broken, this mod does not handle the replays themselves -- Audio is currently **NOT** recorded from the game, and is instead muxed in from the beatmaps ogg/egg file From 1d69fabef68e17af5afd0fe51721b1a474244f0a Mon Sep 17 00:00:00 2001 From: "abc\\Amelia" Date: Tue, 19 May 2026 21:10:57 +0200 Subject: [PATCH 3/6] okay last time fixing av1 for good --- RenderMod/Render/EncoderHelpers.cs | 39 ++++++++++++++++++++++++------ RenderMod/Render/RenderManager.cs | 19 +++++++++------ 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/RenderMod/Render/EncoderHelpers.cs b/RenderMod/Render/EncoderHelpers.cs index 64abb9a..8ea4f6f 100644 --- a/RenderMod/Render/EncoderHelpers.cs +++ b/RenderMod/Render/EncoderHelpers.cs @@ -1,6 +1,8 @@ +using System; using IPA.Utilities; using System.Diagnostics; using System.IO; +using Debug = UnityEngine.Debug; namespace RenderMod.Render { @@ -15,6 +17,7 @@ public static string SelectBestEncoder() if (ReplayRenderSettings.VideoCodec == "hevc") { + Debug.LogError("we are using HEVC"); if (IsEncoderUsable("hevc_nvenc", encodersOutput)) return "hevc_nvenc"; @@ -23,12 +26,14 @@ public static string SelectBestEncoder() if (IsEncoderUsable("hevc_qsv", encodersOutput)) return "hevc_qsv"; - + + Debug.LogError("all encoders failed, falling back to software encoder"); return "libx265"; } if (ReplayRenderSettings.VideoCodec == "av1") { + Debug.LogError("we are using AV1"); if (IsEncoderUsable("av1_nvenc", encodersOutput)) return "av1_nvenc"; @@ -38,8 +43,10 @@ public static string SelectBestEncoder() if (IsEncoderUsable("av1_qsv", encodersOutput)) return "av1_qsv"; + Debug.LogError("all encoders failed, falling back to software encoder"); return "libaom-av1"; } + Debug.LogError("we are using H.264"); if (IsEncoderUsable("h264_nvenc", encodersOutput)) return "h264_nvenc"; @@ -48,7 +55,8 @@ public static string SelectBestEncoder() if (IsEncoderUsable("h264_qsv", encodersOutput)) return "h264_qsv"; - + + Debug.LogError("all encoders failed, falling back to software encoder"); return "libx264"; } @@ -77,12 +85,15 @@ private static string GetEncodersOutput() return string.Empty; } } - + private static bool IsEncoderUsable(string encoder, string encodersOutput) { if (!encodersOutput.Contains(encoder)) + { + Debug.LogError($"{encoder} is unavailable!"); return false; - + } + Debug.LogError($"trying {encoder}"); return TestEncoder(encoder); } @@ -95,7 +106,7 @@ public static bool TestEncoder(string encoder) proc.StartInfo.Arguments = $"-hide_banner -loglevel error " + $"-f lavfi -i testsrc=size=1280x720:rate=30 " + - $"-c:v {encoder} -t 1 -f null -"; + $"-vf format=yuv420p -c:v {encoder} -t 1 -f null -"; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.UseShellExecute = false; @@ -130,7 +141,11 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) switch (ReplayRenderSettings.Preset) { case QualityPreset.Low: - if (encoder.Contains("nvenc")) + if (encoder.Contains("av1_nvenc")) + { + presetArgs = $"-preset fast -rc vbr {bitrateArg}"; + } + else if (encoder.Contains("nvenc")) { presetArgs = $"-preset fast -rc vbr_hq -cq 28 {bitrateArg}"; } @@ -153,7 +168,11 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) break; case QualityPreset.Medium: - if (encoder.Contains("nvenc")) + if (encoder.Contains("av1_nvenc")) + { + presetArgs = $"-preset medium -rc vbr {bitrateArg}"; + } + else if (encoder.Contains("nvenc")) { presetArgs = $"-preset medium -rc vbr_hq -cq 23 {bitrateArg}"; } @@ -176,7 +195,11 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) break; case QualityPreset.High: - if (encoder.Contains("nvenc")) + if (encoder.Contains("av1_nvenc")) + { + presetArgs = $"-preset slow -rc vbr -tune hq {bitrateArg}"; + } + else if (encoder.Contains("nvenc")) { presetArgs = $"-preset slow -rc vbr_hq -cq 18 {bitrateArg}"; } diff --git a/RenderMod/Render/RenderManager.cs b/RenderMod/Render/RenderManager.cs index deda925..a1c7cef 100644 --- a/RenderMod/Render/RenderManager.cs +++ b/RenderMod/Render/RenderManager.cs @@ -47,12 +47,12 @@ public static void StartAudioCapture() currentState = RenderState.Audio; if (beatleaderRender) { - _log.Notice("Starting video render for BeatLeader replay"); + _log.Notice("Starting audio render for BeatLeader replay"); BeatLeaderWarningPatch.TargetMethod()?.Invoke(BeatLeaderWarningPatch.instance, null); } else { - _log.Notice("Starting video render for ScoreSaber replay"); + _log.Notice("Starting audio render for ScoreSaber replay"); ScoreSaberWarningPatch.TargetMethod()?.Invoke(ScoreSaberWarningPatch.instance, null); } } @@ -105,11 +105,13 @@ public static void StopRender() try { + _log.Notice($"Muxing raw video stream to mp4..."); FFmpegPipe.RemuxRawStreamToMp4(latestVideoFile, tempVideoMp4, ReplayRenderSettings.FPS); _log.Notice($"Raw video stream remuxed to MP4: {tempVideoMp4}"); - + + _log.Notice($"Muxing audio and video into a final mp4 file..."); FFmpegPipe.AddAudioToMp4(tempVideoMp4, latestAudioFile, finalMp4, ReplayRenderSettings.AudioBitrateKbps); - _log.Notice($"Final muxed MP4 created: {finalMp4}"); + _log.Notice($"Final muxed MP4 created: {finalMp4}");//f Process.Start("explorer.exe", $"/select,\"{finalMp4}\""); DingPlayer.shouldPlayDing = true; @@ -154,15 +156,18 @@ internal static void SceneChange(Scene scene1, Scene scene2) case RenderState.None: break; case RenderState.Video: + if (scene2.name.ToLower() != "gamecore") { + var ffm = new Process(); + ffm.WaitForExit(); _log.Notice("Exiting gameplay scene, starting audio capture in 2 seconds"); // leaving gameplay (render end) var codec = ReplayRenderSettings.VideoCodec; if (codec == "av1") //have to delay audio capture a bit more when using av1, ffmpeg takes longer to finish doing its av1 shit { - _log.Notice("AV1 detected, waiting 20 seconds longer"); //20 seconds longer is fine imo, especially if software encoder is in use - Task.Delay(22000).ContinueWith(t => StartAudioCapture()); + _log.Notice("AV1 detected, waiting 15 seconds instead of 2..."); + Task.Delay(15000).ContinueWith(t => StartAudioCapture()); //ideally wait for ffmpeg exit and then delay by 2 seconds, fml } else { @@ -190,4 +195,4 @@ internal static void SceneChange(Scene scene1, Scene scene2) } } } -} +} \ No newline at end of file From 265c116ad19dce33c6eb399f1fac567b1b9a14e6 Mon Sep 17 00:00:00 2001 From: "abc\\Amelia" Date: Tue, 19 May 2026 21:15:34 +0200 Subject: [PATCH 4/6] Revert "okay last time fixing av1 for good" This reverts commit 1d69fabef68e17af5afd0fe51721b1a474244f0a. --- RenderMod/Render/EncoderHelpers.cs | 39 ++++++------------------------ RenderMod/Render/RenderManager.cs | 19 ++++++--------- 2 files changed, 15 insertions(+), 43 deletions(-) diff --git a/RenderMod/Render/EncoderHelpers.cs b/RenderMod/Render/EncoderHelpers.cs index 8ea4f6f..64abb9a 100644 --- a/RenderMod/Render/EncoderHelpers.cs +++ b/RenderMod/Render/EncoderHelpers.cs @@ -1,8 +1,6 @@ -using System; using IPA.Utilities; using System.Diagnostics; using System.IO; -using Debug = UnityEngine.Debug; namespace RenderMod.Render { @@ -17,7 +15,6 @@ public static string SelectBestEncoder() if (ReplayRenderSettings.VideoCodec == "hevc") { - Debug.LogError("we are using HEVC"); if (IsEncoderUsable("hevc_nvenc", encodersOutput)) return "hevc_nvenc"; @@ -26,14 +23,12 @@ public static string SelectBestEncoder() if (IsEncoderUsable("hevc_qsv", encodersOutput)) return "hevc_qsv"; - - Debug.LogError("all encoders failed, falling back to software encoder"); + return "libx265"; } if (ReplayRenderSettings.VideoCodec == "av1") { - Debug.LogError("we are using AV1"); if (IsEncoderUsable("av1_nvenc", encodersOutput)) return "av1_nvenc"; @@ -43,10 +38,8 @@ public static string SelectBestEncoder() if (IsEncoderUsable("av1_qsv", encodersOutput)) return "av1_qsv"; - Debug.LogError("all encoders failed, falling back to software encoder"); return "libaom-av1"; } - Debug.LogError("we are using H.264"); if (IsEncoderUsable("h264_nvenc", encodersOutput)) return "h264_nvenc"; @@ -55,8 +48,7 @@ public static string SelectBestEncoder() if (IsEncoderUsable("h264_qsv", encodersOutput)) return "h264_qsv"; - - Debug.LogError("all encoders failed, falling back to software encoder"); + return "libx264"; } @@ -85,15 +77,12 @@ private static string GetEncodersOutput() return string.Empty; } } - + private static bool IsEncoderUsable(string encoder, string encodersOutput) { if (!encodersOutput.Contains(encoder)) - { - Debug.LogError($"{encoder} is unavailable!"); return false; - } - Debug.LogError($"trying {encoder}"); + return TestEncoder(encoder); } @@ -106,7 +95,7 @@ public static bool TestEncoder(string encoder) proc.StartInfo.Arguments = $"-hide_banner -loglevel error " + $"-f lavfi -i testsrc=size=1280x720:rate=30 " + - $"-vf format=yuv420p -c:v {encoder} -t 1 -f null -"; + $"-c:v {encoder} -t 1 -f null -"; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.UseShellExecute = false; @@ -141,11 +130,7 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) switch (ReplayRenderSettings.Preset) { case QualityPreset.Low: - if (encoder.Contains("av1_nvenc")) - { - presetArgs = $"-preset fast -rc vbr {bitrateArg}"; - } - else if (encoder.Contains("nvenc")) + if (encoder.Contains("nvenc")) { presetArgs = $"-preset fast -rc vbr_hq -cq 28 {bitrateArg}"; } @@ -168,11 +153,7 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) break; case QualityPreset.Medium: - if (encoder.Contains("av1_nvenc")) - { - presetArgs = $"-preset medium -rc vbr {bitrateArg}"; - } - else if (encoder.Contains("nvenc")) + if (encoder.Contains("nvenc")) { presetArgs = $"-preset medium -rc vbr_hq -cq 23 {bitrateArg}"; } @@ -195,11 +176,7 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) break; case QualityPreset.High: - if (encoder.Contains("av1_nvenc")) - { - presetArgs = $"-preset slow -rc vbr -tune hq {bitrateArg}"; - } - else if (encoder.Contains("nvenc")) + if (encoder.Contains("nvenc")) { presetArgs = $"-preset slow -rc vbr_hq -cq 18 {bitrateArg}"; } diff --git a/RenderMod/Render/RenderManager.cs b/RenderMod/Render/RenderManager.cs index a1c7cef..deda925 100644 --- a/RenderMod/Render/RenderManager.cs +++ b/RenderMod/Render/RenderManager.cs @@ -47,12 +47,12 @@ public static void StartAudioCapture() currentState = RenderState.Audio; if (beatleaderRender) { - _log.Notice("Starting audio render for BeatLeader replay"); + _log.Notice("Starting video render for BeatLeader replay"); BeatLeaderWarningPatch.TargetMethod()?.Invoke(BeatLeaderWarningPatch.instance, null); } else { - _log.Notice("Starting audio render for ScoreSaber replay"); + _log.Notice("Starting video render for ScoreSaber replay"); ScoreSaberWarningPatch.TargetMethod()?.Invoke(ScoreSaberWarningPatch.instance, null); } } @@ -105,13 +105,11 @@ public static void StopRender() try { - _log.Notice($"Muxing raw video stream to mp4..."); FFmpegPipe.RemuxRawStreamToMp4(latestVideoFile, tempVideoMp4, ReplayRenderSettings.FPS); _log.Notice($"Raw video stream remuxed to MP4: {tempVideoMp4}"); - - _log.Notice($"Muxing audio and video into a final mp4 file..."); + FFmpegPipe.AddAudioToMp4(tempVideoMp4, latestAudioFile, finalMp4, ReplayRenderSettings.AudioBitrateKbps); - _log.Notice($"Final muxed MP4 created: {finalMp4}");//f + _log.Notice($"Final muxed MP4 created: {finalMp4}"); Process.Start("explorer.exe", $"/select,\"{finalMp4}\""); DingPlayer.shouldPlayDing = true; @@ -156,18 +154,15 @@ internal static void SceneChange(Scene scene1, Scene scene2) case RenderState.None: break; case RenderState.Video: - if (scene2.name.ToLower() != "gamecore") { - var ffm = new Process(); - ffm.WaitForExit(); _log.Notice("Exiting gameplay scene, starting audio capture in 2 seconds"); // leaving gameplay (render end) var codec = ReplayRenderSettings.VideoCodec; if (codec == "av1") //have to delay audio capture a bit more when using av1, ffmpeg takes longer to finish doing its av1 shit { - _log.Notice("AV1 detected, waiting 15 seconds instead of 2..."); - Task.Delay(15000).ContinueWith(t => StartAudioCapture()); //ideally wait for ffmpeg exit and then delay by 2 seconds, fml + _log.Notice("AV1 detected, waiting 20 seconds longer"); //20 seconds longer is fine imo, especially if software encoder is in use + Task.Delay(22000).ContinueWith(t => StartAudioCapture()); } else { @@ -195,4 +190,4 @@ internal static void SceneChange(Scene scene1, Scene scene2) } } } -} \ No newline at end of file +} From be601b50b3f08e27a55d991543fa01ca4d5885b3 Mon Sep 17 00:00:00 2001 From: "abc\\Amelia" Date: Tue, 19 May 2026 21:26:02 +0200 Subject: [PATCH 5/6] okAY fixing av1 for good (ignore account name idk why its like that) --- RenderMod/Render/EncoderHelpers.cs | 32 ++++++++++++++++++++++-------- RenderMod/Render/RenderManager.cs | 19 +++++++++++------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/RenderMod/Render/EncoderHelpers.cs b/RenderMod/Render/EncoderHelpers.cs index 64abb9a..d7f259e 100644 --- a/RenderMod/Render/EncoderHelpers.cs +++ b/RenderMod/Render/EncoderHelpers.cs @@ -1,6 +1,8 @@ +using System; using IPA.Utilities; using System.Diagnostics; using System.IO; +using Debug = UnityEngine.Debug; namespace RenderMod.Render { @@ -23,7 +25,7 @@ public static string SelectBestEncoder() if (IsEncoderUsable("hevc_qsv", encodersOutput)) return "hevc_qsv"; - + return "libx265"; } @@ -48,7 +50,7 @@ public static string SelectBestEncoder() if (IsEncoderUsable("h264_qsv", encodersOutput)) return "h264_qsv"; - + return "libx264"; } @@ -77,12 +79,14 @@ private static string GetEncodersOutput() return string.Empty; } } - + private static bool IsEncoderUsable(string encoder, string encodersOutput) { if (!encodersOutput.Contains(encoder)) + { + Debug.LogError($"{encoder} is unavailable!"); return false; - + } return TestEncoder(encoder); } @@ -95,7 +99,7 @@ public static bool TestEncoder(string encoder) proc.StartInfo.Arguments = $"-hide_banner -loglevel error " + $"-f lavfi -i testsrc=size=1280x720:rate=30 " + - $"-c:v {encoder} -t 1 -f null -"; + $"-vf format=yuv420p -c:v {encoder} -t 1 -f null -"; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.UseShellExecute = false; @@ -130,7 +134,11 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) switch (ReplayRenderSettings.Preset) { case QualityPreset.Low: - if (encoder.Contains("nvenc")) + if (encoder.Contains("av1_nvenc")) + { + presetArgs = $"-preset fast -rc vbr {bitrateArg}"; + } + else if (encoder.Contains("nvenc")) { presetArgs = $"-preset fast -rc vbr_hq -cq 28 {bitrateArg}"; } @@ -153,7 +161,11 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) break; case QualityPreset.Medium: - if (encoder.Contains("nvenc")) + if (encoder.Contains("av1_nvenc")) + { + presetArgs = $"-preset medium -rc vbr {bitrateArg}"; + } + else if (encoder.Contains("nvenc")) { presetArgs = $"-preset medium -rc vbr_hq -cq 23 {bitrateArg}"; } @@ -176,7 +188,11 @@ public static (string encoder, string args) BuildEncoderArgs(string encoder) break; case QualityPreset.High: - if (encoder.Contains("nvenc")) + if (encoder.Contains("av1_nvenc")) + { + presetArgs = $"-preset slow -rc vbr -tune hq {bitrateArg}"; + } + else if (encoder.Contains("nvenc")) { presetArgs = $"-preset slow -rc vbr_hq -cq 18 {bitrateArg}"; } diff --git a/RenderMod/Render/RenderManager.cs b/RenderMod/Render/RenderManager.cs index deda925..a1c7cef 100644 --- a/RenderMod/Render/RenderManager.cs +++ b/RenderMod/Render/RenderManager.cs @@ -47,12 +47,12 @@ public static void StartAudioCapture() currentState = RenderState.Audio; if (beatleaderRender) { - _log.Notice("Starting video render for BeatLeader replay"); + _log.Notice("Starting audio render for BeatLeader replay"); BeatLeaderWarningPatch.TargetMethod()?.Invoke(BeatLeaderWarningPatch.instance, null); } else { - _log.Notice("Starting video render for ScoreSaber replay"); + _log.Notice("Starting audio render for ScoreSaber replay"); ScoreSaberWarningPatch.TargetMethod()?.Invoke(ScoreSaberWarningPatch.instance, null); } } @@ -105,11 +105,13 @@ public static void StopRender() try { + _log.Notice($"Muxing raw video stream to mp4..."); FFmpegPipe.RemuxRawStreamToMp4(latestVideoFile, tempVideoMp4, ReplayRenderSettings.FPS); _log.Notice($"Raw video stream remuxed to MP4: {tempVideoMp4}"); - + + _log.Notice($"Muxing audio and video into a final mp4 file..."); FFmpegPipe.AddAudioToMp4(tempVideoMp4, latestAudioFile, finalMp4, ReplayRenderSettings.AudioBitrateKbps); - _log.Notice($"Final muxed MP4 created: {finalMp4}"); + _log.Notice($"Final muxed MP4 created: {finalMp4}");//f Process.Start("explorer.exe", $"/select,\"{finalMp4}\""); DingPlayer.shouldPlayDing = true; @@ -154,15 +156,18 @@ internal static void SceneChange(Scene scene1, Scene scene2) case RenderState.None: break; case RenderState.Video: + if (scene2.name.ToLower() != "gamecore") { + var ffm = new Process(); + ffm.WaitForExit(); _log.Notice("Exiting gameplay scene, starting audio capture in 2 seconds"); // leaving gameplay (render end) var codec = ReplayRenderSettings.VideoCodec; if (codec == "av1") //have to delay audio capture a bit more when using av1, ffmpeg takes longer to finish doing its av1 shit { - _log.Notice("AV1 detected, waiting 20 seconds longer"); //20 seconds longer is fine imo, especially if software encoder is in use - Task.Delay(22000).ContinueWith(t => StartAudioCapture()); + _log.Notice("AV1 detected, waiting 15 seconds instead of 2..."); + Task.Delay(15000).ContinueWith(t => StartAudioCapture()); //ideally wait for ffmpeg exit and then delay by 2 seconds, fml } else { @@ -190,4 +195,4 @@ internal static void SceneChange(Scene scene1, Scene scene2) } } } -} +} \ No newline at end of file From 156d01fc97264a346e16044dd68239099ce0fccc Mon Sep 17 00:00:00 2001 From: Amelia <101548356+ameliagl0w0@users.noreply.github.com> Date: Thu, 21 May 2026 19:31:45 +0200 Subject: [PATCH 6/6] fml --- RenderMod/Render/RenderManager.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/RenderMod/Render/RenderManager.cs b/RenderMod/Render/RenderManager.cs index a1c7cef..01f16df 100644 --- a/RenderMod/Render/RenderManager.cs +++ b/RenderMod/Render/RenderManager.cs @@ -111,7 +111,7 @@ public static void StopRender() _log.Notice($"Muxing audio and video into a final mp4 file..."); FFmpegPipe.AddAudioToMp4(tempVideoMp4, latestAudioFile, finalMp4, ReplayRenderSettings.AudioBitrateKbps); - _log.Notice($"Final muxed MP4 created: {finalMp4}");//f + _log.Notice($"Final muxed MP4 created: {finalMp4}"); Process.Start("explorer.exe", $"/select,\"{finalMp4}\""); DingPlayer.shouldPlayDing = true; @@ -159,8 +159,6 @@ internal static void SceneChange(Scene scene1, Scene scene2) if (scene2.name.ToLower() != "gamecore") { - var ffm = new Process(); - ffm.WaitForExit(); _log.Notice("Exiting gameplay scene, starting audio capture in 2 seconds"); // leaving gameplay (render end) var codec = ReplayRenderSettings.VideoCodec;