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
- Install ffmpeg into PATH: `brew install ffmpeg` (macOS), `apt install ffmpeg` (Linux), `winget install ffmpeg` (Windows), then restart the app.
- Or simply relaunch the app — the built-in downloader fetches ffmpeg on next launch, per the message.
- For portable installs, place the ffmpeg binary next to the app executable (that is search priority 1).
- 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
- Trigger the ffmpeg auto-download on first launch, before any import can happen.
- Bundle ffmpeg with installers — next to the executable is search priority 1.
- Log which search locations failed to shorten support loops.
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
- Failed to create temporary WAV file: {}
- Invalid input path (non-UTF8)
- Failed to spawn ffmpeg process: {}
- Failed to wait for ffmpeg process: {}
- FFmpeg conversion failed with exit code: {}. The file may be
AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16).
Data as JSON: /api/errors/d34b09007c25c1f6.
Report an issue: GitHub.