diff --git a/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs b/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs index 0013af29a..b16cca28f 100644 --- a/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs +++ b/ShareX.ScreenCaptureLib/Screencast/FFmpegHelper.cs @@ -101,39 +101,13 @@ public bool EncodeVideo(string input, string output) return Run(Options.FFmpeg.FFmpegPath, Options.GetFFmpegCommands()); } - public bool EncodeGIF(string input, string output, string tempFolder) + public bool EncodeGIF(string input, string output) { - bool result; - - string palettePath = Path.Combine(tempFolder, "FFmpeg-palette.png"); - - try - { - // https://ffmpeg.org/ffmpeg-filters.html#palettegen-1 - result = Run(Options.FFmpeg.FFmpegPath, string.Format("-y -i \"{0}\" -vf \"palettegen=stats_mode={2}\" \"{1}\"", input, palettePath, Options.FFmpeg.GIFStatsMode)); - - if (result) - { - if (File.Exists(palettePath)) - { - // https://ffmpeg.org/ffmpeg-filters.html#paletteuse - result = Run(Options.FFmpeg.FFmpegPath, string.Format("-y -i \"{0}\" -i \"{1}\" -lavfi \"paletteuse=dither={3}\" \"{2}\"", input, palettePath, output, Options.FFmpeg.GIFDither)); - } - else - { - result = false; - } - } - } - finally - { - if (File.Exists(palettePath)) - { - File.Delete(palettePath); - } - } - - return result; + // https://ffmpeg.org/ffmpeg-filters.html#palettegen-1 + // https://ffmpeg.org/ffmpeg-filters.html#paletteuse + return Run(Options.FFmpeg.FFmpegPath, + $"-y -i \"{input}\" -lavfi \"palettegen=stats_mode={Options.FFmpeg.GIFStatsMode}[palette]," + + $"[0:v][palette]paletteuse=dither={Options.FFmpeg.GIFDither}\" \"{output}\""); } private bool Run(string path, string args = null) diff --git a/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs b/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs index 1452d87d1..883fd0db0 100644 --- a/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs +++ b/ShareX.ScreenCaptureLib/Screencast/ScreenRecorder.cs @@ -233,16 +233,13 @@ public void SaveAsGIF(string path, GIFQuality quality) public bool FFmpegEncodeVideo(string input, string output) { Helpers.CreateDirectoryFromFilePath(output); - bool result = ffmpegCli.EncodeVideo(input, output); - //DebugHelper.WriteLine("Video encoding result:\nInput file size: {0}\nOutput file size: {1}", new FileInfo(input).Length.ToSizeString(), new FileInfo(output).Length.ToSizeString()); - return result; + return ffmpegCli.EncodeVideo(input, output); } - public bool FFmpegEncodeAsGIF(string sourceFilePath, string targetFilePath, string tempFolder) + public bool FFmpegEncodeAsGIF(string input, string output) { - Helpers.CreateDirectoryFromFilePath(targetFilePath); - Helpers.CreateDirectoryFromDirectoryPath(tempFolder); - return ffmpegCli.EncodeGIF(sourceFilePath, targetFilePath, tempFolder); + Helpers.CreateDirectoryFromFilePath(output); + return ffmpegCli.EncodeGIF(input, output); } protected void OnRecordingStarted() diff --git a/ShareX/ScreenRecordManager.cs b/ShareX/ScreenRecordManager.cs index 47e0dc723..38ddc575e 100644 --- a/ShareX/ScreenRecordManager.cs +++ b/ShareX/ScreenRecordManager.cs @@ -303,7 +303,7 @@ private static string ProcessTwoPassEncoding(string input, TaskSettings taskSett { if (taskSettings.CaptureSettings.FFmpegOptions.VideoCodec == FFmpegVideoCodec.gif) { - screenRecorder.FFmpegEncodeAsGIF(input, output, Program.ToolsFolder); + screenRecorder.FFmpegEncodeAsGIF(input, output); } else {