MathewSachin/Captura · error · FFmpegNotFoundException

FFmpeg could not be found. Please download using the in-buil

Error message

FFmpeg could not be found. Please download using the in-built downloader.

What it means

Thrown by FFmpegVideoConverter.StartAsync (src/Captura.FFmpeg/Video/FFmpegVideoConverter.cs:25) when FFmpegService.FFmpegExists is false. The video converter cannot transcode without an ffmpeg binary, so it guards entry identically to the audio/GIF converters.

Source

Thrown at src/Captura.FFmpeg/Video/FFmpegVideoConverter.cs:25

    // ReSharper disable once InconsistentNaming
    class FFmpegVideoConverter : IVideoConverter
    {
        readonly FFmpegVideoCodec _videoCodec;

        public FFmpegVideoConverter(FFmpegVideoCodec VideoCodec)
        {
            _videoCodec = VideoCodec;
        }

        public string Name => $"{_videoCodec.Name} (FFmpeg)";

        public string Extension => _videoCodec.Extension;

        public async Task StartAsync(VideoConverterArgs Args, IProgress<int> Progress)
        {
            if (!FFmpegService.FFmpegExists)
            {
                throw new FFmpegNotFoundException();
            }

            var argsBuilder = new FFmpegArgsBuilder();

            argsBuilder.AddInputFile(Args.InputFile);

            var output = argsBuilder.AddOutputFile(Args.FileName)
                .SetFrameRate(Args.FrameRate);

            _videoCodec.Apply(ServiceProvider.Get<FFmpegSettings>(), Args, output);

            //if (Args.AudioProvider != null)
            {
                _videoCodec.AudioArgsProvider(Args.AudioQuality, output);
            }

            var process = FFmpegService.StartFFmpeg(argsBuilder.GetArgs(), Args.FileName, out var log);

View on GitHub (pinned to 3fdf41529b)

Solutions

  1. Ensure ffmpeg is downloaded via the in-built downloader before conversions are exposed in the UI.
  2. Validate the FFmpeg folder setting resolves to a real ffmpeg.exe.
  3. Ship or place ffmpeg.exe in the app/lib directory as a fallback.

Example fix

// before
await new FFmpegVideoConverter(codec).StartAsync(args, progress);
// after
if (!FFmpegService.FFmpegExists)
    await DownloadFFmpeg.Run();
await new FFmpegVideoConverter(codec).StartAsync(args, progress);
Defensive patterns

Strategy: validation

Validate before calling

if (!FFmpegService.FFmpegExists) await DownloadFFmpeg.Run();
if (!FFmpegService.FFmpegExists) throw new FFmpegNotFoundException();

Try / catch

try { await new FFmpegVideoConverter(codec).StartAsync(args, progress); }
catch (FFmpegNotFoundException) { /* download then retry once */ }

Prevention

When it happens

Trigger: Starting a video conversion while FFmpegService.FFmpegExists is false (no ffmpeg.exe in folder/app/lib/PATH).

Common situations: Fresh install where the downloader has not been run; FFmpeg folder setting cleared; ffmpeg removed from PATH.

Related errors


AI-assisted analysis of MathewSachin/Captura@3fdf41529b (2026-08-13). Data as JSON: /api/errors/6c342dc408697ce2. Report an issue: GitHub.