M4: response to ffmpeg evaluation - ARG_MAX is the root cause

This commit is contained in:
Warren
2026-05-08 13:06:27 +08:00
parent cfd4159b30
commit ebe8722e1f

View File

@@ -0,0 +1,41 @@
# M4 Response: FFmpeg DrawText 選型回饋
## 核心遺漏ARG_MAX overflow
M5 的選型評估沒有解決 **真正導致 500 的原因**`trace_video()` 為 trace #3128 (1109 detections) 產生的 filter_complex 字串超過 macOS 命令列長度限制 (~256KB)。
不管選 drawtext、ASS、還是 drawbox只要 filter 寫在命令列上,超過 256KB 就會炸。
## 建議修正順序
### Step 1: `-filter_complex_script`(立即見效)
把 filter 寫入 temp file 再餵給 ffmpeg避開 ARG_MAX
```diff
- .arg("-filter_complex")
- .arg(&filter_str)
+ .arg("-filter_complex_script")
+ .arg(&temp_file_path)
```
這是 3 行程式碼的修改,**任何 filter 方案都適用**。
### Step 2: 加 fontfileUnicode 中文)
```diff
- drawtext=text='Cary Grant':fontsize=24
+ drawtext=text='Cary Grant':fontsize=24:fontfile=/System/Library/Fonts/PingFang.ttc
```
### Step 3: 評估 ASS 方案(未來)
ASS 格式本身就在檔案中,沒有 ARG_MAX 問題,且原生支援中文。
## 比較
| 方案 | 解決 ARG_MAX | Unicode | 開發量 |
|------|:------------:|:-------:|:------:|
| A: drawtext + script | ✅ | ❌ 需加 fontfile | 3 行 |
| B: ASS subtitles | ✅ (檔案) | ✅ | 中 |
| A+B: drawtext script + font | ✅ | ✅ | 3 行 + fontfile |