fix: trace debug mode — text overlay only, no bounding boxes

Debug overlay now shows:
  File UUID: {uuid}
  Trace {id}: start_frame={n}  Identity: {name}
  Cut: {id}
  Frame: {n}  Time: {t}s
This commit is contained in:
Accusys
2026-05-14 15:07:28 +08:00
parent 1497b53e82
commit c51d6f6f2d

View File

@@ -319,10 +319,7 @@ async fn trace_video(
.unwrap());
}
// === DEBUG MODE: with overlays ===
let total_frames = (duration * fps).round() as i32;
let pad_frames = (padding * fps) as i32;
// === DEBUG MODE: text overlay without bounding boxes ===
// Query identity info for this trace
let identities_table = schema::table_name("identities");
let identity_name: String = sqlx::query_scalar(&format!(
@@ -344,38 +341,28 @@ async fn trace_video(
.unwrap_or(None)
.unwrap_or(0);
let mut parts: Vec<String> = Vec::new();
// Top-left info block
let frame_offset = first_frame as i64 - (padding * fps) as i64;
let info_lines = format!(
"drawtext=text='Trace: {} Cut: {} {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=12",
trace_id, cut_id, identity_name
let trace_start = rows[0].0;
let fps_str = &fps.to_string();
// Static trace info (shown throughout)
let info_block = format!(
"drawtext=text='File UUID: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=12", file_uuid
);
let trace_block = format!(
"drawtext=text='Trace {}: start_frame={} Identity: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=34", trace_id, trace_start, identity_name
);
let cut_block = format!(
"drawtext=text='Cut: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=56", cut_id
);
parts.push(info_lines);
parts.push(format!(
"drawtext=text='Frame: %{{eif:n+{}:d}} UUID: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=34",
frame_offset, file_uuid
));
for (i, (frame, x, y, w, h)) in rows.iter().enumerate() {
let start_off = frame - first_frame + pad_frames;
let end_off = if i + 1 < rows.len() {
rows[i + 1].0 - first_frame + pad_frames
} else {
total_frames
};
parts.push(format!(
"drawbox=x={}:y={}:w={}:h={}:color=red@0.8:thickness=8:enable='between(n,{},{})'",
x, y, w, h, start_off, end_off - 1
));
parts.push(format!(
"drawtext=text='{}':x={}:y={}:fontsize=20:fontcolor=white:box=1:boxcolor=red@0.8:enable='between(n,{},{})'",
trace_id, x + 4, y + 4, start_off, end_off - 1
));
}
// Per-frame info (frame number, time)
let frame_info = format!(
"drawtext=text='Frame: %{{eif:n+{}:d}} Time: %{{eif:(n+{})*100/{}:d}}s':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=78",
frame_offset, frame_offset, fps_str
);
let filter_text = parts.join(",");
let filter_text = format!("{}, {}, {}, {}", info_block, trace_block, cut_block, frame_info);
let filter_file = std::env::temp_dir().join(format!("vf_{}.txt", uuid::Uuid::new_v4()));
let _ = std::fs::write(&filter_file, &filter_text);
let filter_path = filter_file.to_str().unwrap_or("");