graph TD ASR[ASR 输出] --> TE[转写错误] TE --> CP[计算机术语如 sorting, overlap] TE --> TL[工具名如 DeepSeek, OpenCode] TE --> CN[中文同音字如 封神 → 函数] TE --> FG[语气词如 呃, 啊, 哦] style ASR fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style CP fill:#ffcdd2,stroke:#c62828,color:#2e3440,stroke-width:3px style TL fill:#ffe0b2,stroke:#e65100,color:#2e3440,stroke-width:3px style CN fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px style FG fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px
graph LR IN["🎬 input.mp41116s"] --> SP["分割-c copy"] SP --> C1["片段 1372s"] SP --> C2["片段 2372s"] SP --> C3["片段 3372s"] C1 --> DA1["🔇 静音检测(FFmpeg silencedetect)"] C2 --> DA2["🔇 静音检测"] C3 --> DA3["🔇 静音检测"] DA1 --> T1["修剪后 1330s"] DA2 --> T2["修剪后 2307s"] DA3 --> T3["修剪后 3265s"] T1 --> CN["合并-c copy"] T2 --> CN T3 --> CN CN --> OUT["🎬 output.mp4902s (-19%)"] style IN fill:#ffcdd2,stroke:#c62828,color:#2e3440,stroke-width:3px style OUT fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px style SP fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style CN fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style DA1 fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px style DA2 fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px style DA3 fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px
graph TD VID["🎬 输入视频"] --> AUD["🎵 提取音频16kHz WAV"] AUD --> WH["🧠 Whisperword_timestamps=True"] WH --> WL[("单词列表(text, start, end)")] WL --> FD["语气词检测词级匹配"] FD --> RM["语气词区间待删除"] RM --> IV["反转→保留区间"] IV --> FF["🎬 FFmpegfilter_complextrim + concat"] FF --> OUT["🎬 干净视频"] style VID fill:#ffcdd2,stroke:#c62828,color:#2e3440,stroke-width:3px style WH fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style FD fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px style FF fill:#ffe0b2,stroke:#e65100,color:#2e3440,stroke-width:3px style OUT fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px
graph LR RAW["🎬 原始1116s"] --> SRT["📝 修复 SRT字幕修复"] SRT --> SIL["🔇 静音去除remove-silent-gaps"] SIL --> FIL["🗣️ 语气词去除remove-filler-zh"] FIL --> FINAL["🎬 最终777s (-30%)"] style RAW fill:#ffcdd2,stroke:#c62828,color:#2e3440,stroke-width:3px style SRT fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style SIL fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px style FIL fill:#ffe0b2,stroke:#e65100,color:#2e3440,stroke-width:3px style FINAL fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px
gantt title 视频时长对比 dateFormat X axisFormat %s section 时长 原始 :a1, 0, 1116 静音去除后 :a2, 0, 902 语气词去除后 :a3, 0, 777 section 节省 静音节省 :b1, 902, 1116 语气词节省 :b2, 777, 902
graph TD SK["⚙️ OpenCode Skills"] --> SRT["📝 fix-srtSRT 转写修复"] SK --> VAL["✅ validate-srtSRT 验证器"] SK --> SG["🔇 remove-silent-gaps分割 + 静音去除"] SK --> FZ["🗣️ remove-filler-zh中文语气词去除"] SG --> DA["🔧 remove-dead-air(依赖)"] style SK fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style SRT fill:#ffcdd2,stroke:#c62828,color:#2e3440,stroke-width:3px style VAL fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px style SG fill:#f3e5f5,stroke:#7b1fa2,color:#2e3440,stroke-width:3px style FZ fill:#ffe0b2,stroke:#e65100,color:#2e3440,stroke-width:3px style DA fill:#eceff1,stroke:#455a64,color:#2e3440,stroke-width:3px