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:
@@ -319,10 +319,7 @@ async fn trace_video(
|
|||||||
.unwrap());
|
.unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
// === DEBUG MODE: with overlays ===
|
// === DEBUG MODE: text overlay without bounding boxes ===
|
||||||
let total_frames = (duration * fps).round() as i32;
|
|
||||||
let pad_frames = (padding * fps) as i32;
|
|
||||||
|
|
||||||
// Query identity info for this trace
|
// Query identity info for this trace
|
||||||
let identities_table = schema::table_name("identities");
|
let identities_table = schema::table_name("identities");
|
||||||
let identity_name: String = sqlx::query_scalar(&format!(
|
let identity_name: String = sqlx::query_scalar(&format!(
|
||||||
@@ -344,38 +341,28 @@ async fn trace_video(
|
|||||||
.unwrap_or(None)
|
.unwrap_or(None)
|
||||||
.unwrap_or(0);
|
.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 frame_offset = first_frame as i64 - (padding * fps) as i64;
|
||||||
let info_lines = format!(
|
let trace_start = rows[0].0;
|
||||||
"drawtext=text='Trace: {} Cut: {} {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=12",
|
let fps_str = &fps.to_string();
|
||||||
trace_id, cut_id, identity_name
|
|
||||||
|
// 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() {
|
// Per-frame info (frame number, time)
|
||||||
let start_off = frame - first_frame + pad_frames;
|
let frame_info = format!(
|
||||||
let end_off = if i + 1 < rows.len() {
|
"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",
|
||||||
rows[i + 1].0 - first_frame + pad_frames
|
frame_offset, frame_offset, fps_str
|
||||||
} 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
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
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 filter_file = std::env::temp_dir().join(format!("vf_{}.txt", uuid::Uuid::new_v4()));
|
||||||
let _ = std::fs::write(&filter_file, &filter_text);
|
let _ = std::fs::write(&filter_file, &filter_text);
|
||||||
let filter_path = filter_file.to_str().unwrap_or("");
|
let filter_path = filter_file.to_str().unwrap_or("");
|
||||||
|
|||||||
Reference in New Issue
Block a user