{"record":{"id":"5cdf8b59cfae607f","repo":"tonhowtf/omniget","slug":"ffmpeg-nao-iniciou-burn","errorCode":null,"errorMessage":"ffmpeg nao iniciou: {}","messagePattern":"ffmpeg nao iniciou: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-tauri/src/platforms/bilibili/danmaku/burn.rs","lineNumber":372,"sourceCode":"    tail: &[String],\n) -> Result<()> {\n    let mut cmd = omniget_core::core::process::command(ffmpeg);\n    cmd.args([\"-y\", \"-hide_banner\", \"-loglevel\", \"error\"])\n        .args(cut)\n        .arg(\"-i\")\n        .arg(input)\n        .args([\"-vf\", filters])\n        .args(common);\n    if let Some((n, log)) = pass {\n        cmd.args([\"-pass\", &n.to_string()])\n            .arg(\"-passlogfile\")\n            .arg(log);\n    }\n    let out = cmd\n        .args(tail)\n        .output()\n        .await\n        .map_err(|e| anyhow!(\"ffmpeg nao iniciou: {}\", e))?;\n    if !out.status.success() {\n        let stderr = String::from_utf8_lossy(&out.stderr);\n        return Err(anyhow!(\"{}\", friendly_ffmpeg(stderr.trim())));\n    }\n    Ok(())\n}\n\n/// O erro cru do libass não diz nada para quem não conhece FFmpeg.\nfn friendly_ffmpeg(stderr: &str) -> String {\n    if stderr.contains(\"fontselect\") || stderr.contains(\"Glyph\") {\n        return format!(\n            \"a fonte do ASS não está instalada — aponte a pasta de fontes. ({})\",\n            stderr\n        );\n    }\n    if stderr.is_empty() {\n        return \"o ffmpeg falhou sem dizer por quê\".to_string();\n    }","sourceCodeStart":354,"sourceCodeEnd":390,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/src/platforms/bilibili/danmaku/burn.rs#L354-L390","documentation":"run_ffmpeg spawns the ffmpeg binary with .output().await and maps a spawn failure to 'ffmpeg nao iniciou: <e>'. This is not an ffmpeg encoding error — it means the process could not be started at all (binary missing, not executable, or spawn syscall failed). Non-zero exits are handled separately via friendly_ffmpeg.","triggerScenarios":"ensure_ffmpeg resolved a path that no longer exists; ffmpeg is not installed / not on PATH; the binary lacks the executable bit; OS-level spawn failure (resource limits, invalid UTF-8 args).","commonSituations":"Fresh container/machine without ffmpeg; dependency cache deleted between runs; downloading ffmpeg failed earlier and ensure_ffmpeg returned a stale path.","solutions":["Run ensure_ffmpeg() (as run() does) and confirm it succeeds before invoking ffmpeg directly","Verify with `ffmpeg -version` that the binary is installed and executable","Reinstall or re-download the ffmpeg dependency if the cached binary was deleted","Check PATH and the resolved dependency path for the current environment"],"exampleFix":"// before\nlet ffmpeg = \"/usr/local/bin/ffmpeg\"; // may not exist\n// after\nlet ffmpeg = ensure_ffmpeg().await?; // resolves/installs and validates the binary","handlingStrategy":"fallback","validationCode":"async fn ffmpeg_ready() -> bool {\n    ensure_ffmpeg().await.is_ok()\n}","typeGuard":null,"tryCatchPattern":"match burn::run(&opts, &progress).await {\n    Err(e) if e.to_string().starts_with(\"ffmpeg nao iniciou\") => {\n        ensure_ffmpeg().await?; // reinstall/resolve then retry once\n        burn::run(&opts, &progress).await\n    }\n    other => other,\n}","preventionTips":["Always call ensure_ffmpeg() at startup and fail fast if unavailable","Verify `ffmpeg -version` works in CI/deployment images","Don't hard-code ffmpeg paths; use the dependency resolver"],"tags":["ffmpeg","spawn","missing-binary","dependency"],"backgroundTag":"command-not-found","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}