M4: suggest replace bitmap font with drawtext filter

This commit is contained in:
Warren
2026-05-08 13:21:40 +08:00
parent ac59789f6e
commit 606405b941

View File

@@ -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 可以移除。