tonhowtf/omniget · error
FFmpeg not found. Install FFmpeg to download this format.
Error message
FFmpeg not found. Install FFmpeg to download this format.
What it means
This error is raised when yt-dlp's stderr indicates FFmpeg is missing: it matches 'ffmpeg' plus 'not found' or 'no such file'. yt-dlp requires FFmpeg for merging separate video/audio streams (DASH formats) and post-processing, so downloads of such formats fail without it.
Solutions
- Install FFmpeg (apt/brew/choco or download static build) and ensure it is on PATH
- Verify with `ffmpeg -version` in the same environment the app runs in
- Point the app/bundle to a valid ffmpeg binary path if configurable
- Update yt-dlp in Settings → Dependencies if the app manages dependencies
Example fix
// before
// download bestvideo+bestaudio without ffmpeg -> subprocess fails
// after
if lower.contains("ffmpeg") && (lower.contains("not found") || lower.contains("no such file")) {
return anyhow!("FFmpeg not found. Install FFmpeg to download this format.");
} Defensive patterns
Strategy: validation
Validate before calling
// ensure ffmpeg is resolvable before requesting merge formats
let ok = tokio::process::Command::new("ffmpeg").arg("-version").output().await.is_ok();
if !ok { eprintln!("FFmpeg missing; install it before downloading merged formats"); } Try / catch
match result {
Err(e) if e.to_string().contains("FFmpeg not found") => show_ffmpeg_install_dialog(),
other => other?,
} Prevention
- Bundle ffmpeg with the app or verify it at startup
- Run `ffmpeg -version` as a dependency check on first launch
- Prefer progressive formats when ffmpeg is unavailable
- Document ffmpeg as a required dependency for DASH merges
When it happens
Trigger: Selecting a format that requires merging (separate video+audio, e.g. YouTube bestvideo+bestaudio) while the ffmpeg binary is absent from PATH or the configured location.
Common situations: Fresh installs where only yt-dlp was installed, Docker/minimal images without ffmpeg, Windows users who never added ffmpeg to PATH, or a bundled ffmpeg path that changed after an app update.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/1435094c5fcd8431.
Report an issue: GitHub.
Appendix: source
Thrown at src-tauri/omniget-core/src/core/ytdlp.rs:4483
);
}
if lower.contains("video unavailable") || lower.contains("not available") {
return anyhow!("Video unavailable or removed.");
}
if lower.contains("private video") {
return anyhow!("This video is private.");
}
if lower.contains("copyright") {
return anyhow!("Video blocked due to copyright.");
}
if lower.contains("geo") && lower.contains("block") {
return anyhow!("Video restricted in your region.");
}
if lower.contains("timed out") || lower.contains("timeout") {
return anyhow!("Connection timed out. Check your internet and try again.");
}
if lower.contains("ffmpeg") && (lower.contains("not found") || lower.contains("no such file")) {
return anyhow!("FFmpeg not found. Install FFmpeg to download this format.");
}
if lower.contains("unsupported url") || lower.contains("no suitable infojson") {
return anyhow!("Unsupported URL. Check that the link is correct.");
}
if lower.contains("unable to download") && lower.contains("webpage") {
return anyhow!("Failed to access the page. Check the link and your connection.");
}
if lower.contains("is not a valid url") || lower.contains("no video formats") {
return anyhow!("No video formats found for this link.");
}
let last_error_line = stderr
.lines()
.rev()
.find(|l| {
let t = l.trim().to_lowercase();
t.starts_with("error:") || t.starts_with("error ")
})View on GitHub (pinned to 8600b91f42)