Zackriya-Solutions/meetily · error

FFmpeg not found. FFmpeg is required to decode .{} files. It

Error message

FFmpeg not found. FFmpeg is required to decode .{} files. It will be downloaded automatically on next launch, or install it manually.

What it means

convert_to_wav_with_ffmpeg is the fallback decoder for formats Symphonia cannot decode natively; it first resolves an ffmpeg executable via find_ffmpeg_path, which checks (in order) a binary bundled next to the app executable, PATH, $HOME/.local/bin on macOS, the current working directory, and the macOS app-bundle Resources folder. This error means none of those locations had ffmpeg when such a file was imported. The message itself tells you the app's auto-downloader will fetch ffmpeg on the next launch.

Source

Thrown at frontend/src-tauri/src/audio/decoder.rs:281

/// Check if a file extension requires ffmpeg pre-conversion
fn needs_ffmpeg_conversion(path: &Path) -> bool {
    path.extension()
        .and_then(|e| e.to_str())
        .map(|ext| FFMPEG_ONLY_EXTENSIONS.contains(&ext.to_lowercase().as_str()))
        .unwrap_or(false)
}

/// Convert an audio file to WAV using ffmpeg for formats Symphonia can't decode.
///
/// Returns a `TempPath` that auto-deletes the temporary WAV file when dropped.
/// The caller must keep the `TempPath` alive until decoding of the WAV is complete.
fn convert_to_wav_with_ffmpeg(
    input_path: &Path,
    progress_callback: Option<&ProgressCallback>,
) -> Result<tempfile::TempPath> {
    let ffmpeg_path = find_ffmpeg_path().ok_or_else(|| {
        anyhow!(
            "FFmpeg not found. FFmpeg is required to decode .{} files. \
             It will be downloaded automatically on next launch, or install it manually.",
            input_path
                .extension()
                .and_then(|e| e.to_str())
                .unwrap_or("this format")
        )
    })?;

    // Create temp file in the same directory as the input to avoid cross-device issues
    let parent_dir = input_path.parent().unwrap_or_else(|| Path::new("."));
    let temp_file = tempfile::Builder::new()
        .prefix(".meetily_decode_")
        .suffix(".wav")
        .tempfile_in(parent_dir)
        .map_err(|e| anyhow!("Failed to create temporary WAV file: {}", e))?;

    let temp_path = temp_file.into_temp_path();

View on GitHub (pinned to 0281737d87)

Solutions

  1. Install ffmpeg into PATH: `brew install ffmpeg` (macOS), `apt install ffmpeg` (Linux), `winget install ffmpeg` (Windows), then restart the app.
  2. Or simply relaunch the app — the built-in downloader fetches ffmpeg on next launch, per the message.
  3. For portable installs, place the ffmpeg binary next to the app executable (that is search priority 1).
  4. Verify with `which ffmpeg`/`where ffmpeg` and check the debug log lines ('Found bundled ffmpeg', 'ffmpeg not found in PATH') to see which locations were tried.

Example fix

// before
let temp_path = convert_to_wav_with_ffmpeg(path, progress_callback.as_ref())?;

// after — check availability first with an actionable message
if crate::audio::ffmpeg::find_ffmpeg_path().is_none() {
    return Err(anyhow!(
        "FFmpeg is not installed. Install it with `brew install ffmpeg` / `apt install ffmpeg`, or restart the app to auto-download it, then re-import this file."
    ));
}
let temp_path = convert_to_wav_with_ffmpeg(path, progress_callback.as_ref())?;
Defensive patterns

Strategy: validation

Validate before calling

// Rust, before the import decode
if requires_ffmpeg(path) && crate::audio::ffmpeg::find_ffmpeg_path().is_none() {
    return Err(anyhow!("FFmpeg is missing. Install it (`brew/apt/winget install ffmpeg`) or restart the app to auto-download, then re-import."));
}

Try / catch

match decode_audio_file(&path, None) {
    Err(e) if e.to_string().contains("FFmpeg not found") => {
        // show install instructions plus a 'relaunch to auto-download' action in the UI
    }
    other => other,
}

Prevention

When it happens

Trigger: Importing a file whose extension routes to the ffmpeg path (non-Symphonia-decodable format) while ffmpeg is absent: fresh install before the auto-download has run, ffmpeg installed in a shell whose PATH the GUI app doesn't inherit, or a portable/DMG copy without the bundled binary.

Common situations: First import after install, ffmpeg installed via Homebrew but app launched from Finder with a minimal PATH, Linux AppImage/portable deployments, or the auto-download having failed on a previous launch.

Related errors


AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16). Data as JSON: /api/errors/d34b09007c25c1f6. Report an issue: GitHub.