From 0cf9ca56d405f0f7f172ff53e7f08e5a1a5bdbc4 Mon Sep 17 00:00:00 2001 From: Accusys Date: Fri, 8 May 2026 13:08:23 +0800 Subject: [PATCH] Fix ARG_MAX overflow: use filter_complex_script instead of -vf - trace_video filter string can exceed macOS 256KB limit - Write filter to temp file, pass with -filter_complex_script --- src/api/media_api.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/api/media_api.rs b/src/api/media_api.rs index 62e471e..59a6209 100644 --- a/src/api/media_api.rs +++ b/src/api/media_api.rs @@ -330,15 +330,21 @@ async fn trace_video( let tmp = std::env::temp_dir().join(format!("trace_{}.mp4", uuid::Uuid::new_v4())); let tmp_str = tmp.to_str().unwrap_or("").to_string(); + // Write filter to temp file to avoid ARG_MAX overflow + let filter_file = std::env::temp_dir().join(format!("vf_{}.txt", uuid::Uuid::new_v4())); + let filter_path = filter_file.to_str().unwrap_or(""); + let _ = std::fs::write(&filter_file, &vf); let status = std::process::Command::new("ffmpeg") .args([ "-ss", &seek.to_string(), "-i", &video_path, - "-t", &duration.to_string(), "-vf", &vf, + "-t", &duration.to_string(), + "-filter_complex_script", &filter_path, "-c:v", "libx264", "-preset", "ultrafast", "-crf", "28", "-an", "-movflags", "+faststart", "-y", &tmp_str, ]) .status() .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + let _ = std::fs::remove_file(&filter_file); if !status.success() { let _ = std::fs::remove_file(&tmp); return Err(StatusCode::INTERNAL_SERVER_ERROR);