diff --git a/ShareX.MediaLib/FFmpegCLIManager.cs b/ShareX.MediaLib/FFmpegCLIManager.cs index c4ce20cbf..4dc7daf4e 100644 --- a/ShareX.MediaLib/FFmpegCLIManager.cs +++ b/ShareX.MediaLib/FFmpegCLIManager.cs @@ -29,6 +29,8 @@ using System.Diagnostics; using System.Drawing; using System.Globalization; +using System.IO; +using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -274,5 +276,35 @@ public DirectShowDevices GetDirectShowDevices() return devices; } + + public void ConcatenateVideos(string[] inputFiles, string outputFile, bool autoDeleteInputFiles = false) + { + string listFile = outputFile + ".txt"; + string contents = string.Join(Environment.NewLine, inputFiles.Select(inputFile => $"file '{inputFile}'")); + File.WriteAllText(listFile, contents); + + try + { + bool result = Run($"-hide_banner -f concat -safe 0 -i \"{listFile}\" -c copy \"{outputFile}\""); + + if (result && autoDeleteInputFiles) + { + foreach (string inputFile in inputFiles) + { + if (!inputFile.Equals(outputFile, StringComparison.OrdinalIgnoreCase) && File.Exists(inputFile)) + { + File.Delete(inputFile); + } + } + } + } + finally + { + if (File.Exists(listFile)) + { + File.Delete(listFile); + } + } + } } } \ No newline at end of file