graph TD ASR[ASR Output] --> TE[Transcription Errors] TE --> CP[CS Termse.g. sorting, overlap] TE --> TL[Toolse.g. DeepSeek, OpenCode] TE --> CN[Chinese Homophonese.g. ๅฐ็ฅ โ ๅฝๆฐ] TE --> FG[Filler Wordse.g. ๅ, ๅ, ๅฆ] 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[Split-c copy] SP --> C1["Chunk 1372s"] SP --> C2["Chunk 2372s"] SP --> C3["Chunk 3372s"] C1 --> DA1["๐ remove-dead-air(FFmpeg silencedetect)"] C2 --> DA2["๐ remove-dead-air"] C3 --> DA3["๐ remove-dead-air"] DA1 --> T1["Trimmed 1330s"] DA2 --> T2["Trimmed 2307s"] DA3 --> T3["Trimmed 3265s"] T1 --> CN["Concat-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["๐ฌ Input Video"] --> AUD["๐ต Extract Audio16kHz WAV"] AUD --> WH["๐ง Whisperword_timestamps=True"] WH --> WL[("Word List(text, start, end)")] WL --> FD["Filler Detectionword-level match"] FD --> RM["Filler Rangesto remove"] RM --> IV["Invert โ KeepRanges"] IV --> FF["๐ฌ FFmpegfilter_complextrim + concat"] FF --> OUT["๐ฌ Clean Video"] 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["๐ฌ Raw1116s"] --> SRT["๐ Fix SRTSubtitle Fixes"] SRT --> SIL["๐ Silence Removalremove-silent-gaps"] SIL --> FIL["๐ฃ๏ธ Filler Removalremove-filler-zh"] FIL --> FINAL["๐ฌ Final777s (-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 Video Duration Comparison dateFormat X axisFormat %s section Duration Original :a1, 0, 1116 After Silence :a2, 0, 902 After Fillers :a3, 0, 777 section Savings Silence Removed :b1, 902, 1116 Fillers Removed :b2, 777, 902
graph TD SK["โ๏ธ OpenCode Skills"] --> SRT["๐ fix-srtSRT transcription fixer"] SK --> VAL["โ validate-srtSRT validator"] SK --> SG["๐ remove-silent-gapsSplit + dead air removal"] SK --> FZ["๐ฃ๏ธ remove-filler-zhChinese filler removal"] SG --> DA["๐ง remove-dead-air(dependency)"] 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