From 606405b94136fab7e3390fa88666d9114f0382e7 Mon Sep 17 00:00:00 2001 From: Warren Date: Fri, 8 May 2026 13:21:40 +0800 Subject: [PATCH] M4: suggest replace bitmap font with drawtext filter --- .../2026-05-08_bitmap_font_to_drawtext.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 docs_v1.0/M4_workspace/2026-05-08_bitmap_font_to_drawtext.md diff --git a/docs_v1.0/M4_workspace/2026-05-08_bitmap_font_to_drawtext.md b/docs_v1.0/M4_workspace/2026-05-08_bitmap_font_to_drawtext.md new file mode 100644 index 0000000..3402600 --- /dev/null +++ b/docs_v1.0/M4_workspace/2026-05-08_bitmap_font_to_drawtext.md @@ -0,0 +1,46 @@ +# Bitmap Font → DrawText 建議 + +## 現狀 + +`media_api.rs:307-322` 使用自製 bitmap 點陣字渲染 trace label: + +```rust +for ch in label.chars() { + let bm = bitmap_char(ch); + for (row, bits) in bm.iter().enumerate() { + for col in 0..5 { + if bits & (1 << (4 - col)) != 0 { + // 每個 pixel 一個 drawbox 命令 + parts.push(format!("drawbox=x={}:y={}:w=3:h=3:...")); + } + } + } +} +``` + +**問題**: +1. 每個字母 ∼35 個 drawbox,每個 detection ∼175 個 +2. 1109 detection → **194,000 個 drawbox 命令** → ARG_MAX / 效能問題 +3. 渲染效果像點陣字,不美觀 + +## 建議 + +M4 已安裝 `ffmpeg-full`(含 drawtext filter),改用原生文字渲染: + +```diff +- // 自製 bitmap (35 drawbox/字母) +- drawbox=x=...:w=3:h=3:t=fill:enable='between(n,...)' ++ // ffmpeg drawtext (1 filter) ++ drawtext=text='t3128':fontsize=24:fontcolor=red:x=10:y=10 +``` + +**效益**: +| 項目 | 現在 (bitmap) | 建議 (drawtext) | +|------|:-------------:|:---------------:| +| filter 數量/字 | ∼35 | 1 | +| filter 數量/trace #3128 | ∼194,000 | ∼1,109 | +| 字型品質 | 點陣 3×3 | 平滑向量字型 | +| Unicode 中文 | ❌ | ✅ (加 fontfile=) | +| ARG_MAX 風險 | ❌ 高 | ✅ 低 | + +`media_api.rs` 中的 `bitmap_char()` 函數和所有 drawbox 的 pixel loop 可以移除。