fix(subtitle): preserve more VAD context by default

Signed-off-by: zhifu gao <[email protected]>
This commit is contained in:
zhifu gao
2026-09-06 09:28:10 +00:00
parent 66008d4c79
commit 483ca541ea
3 changed files with 17 additions and 1 deletions
+8
View File
@@ -22,6 +22,9 @@ python generate_subtitle.py audio.wav --device cpu
# Preserve raw model sentence boundaries
python generate_subtitle.py audio.wav --segment-mode sentence
# Use shorter VAD segments when memory is limited
python generate_subtitle.py audio.wav --max-single-segment-time 30000
```
## Output Example (SRT)
@@ -44,6 +47,7 @@ python generate_subtitle.py audio.wav --segment-mode sentence
| `--segment-mode` | readable | Cue grouping: readable or raw sentence boundaries |
| `--model` | SenseVoiceSmall | ASR model |
| `--device` | cuda | Device: cuda or cpu |
| `--max-single-segment-time` | 60000 | Maximum VAD segment length in milliseconds; reduce it when memory is limited |
| `--spk` | off | Add speaker labels |
| `--lang` | auto | Language hint |
| `-o` | input.srt | Output path |
@@ -52,6 +56,10 @@ Readable mode joins only adjacent short or continuation cues within bounded
gap, duration, length, and speaker limits. It does not rewrite recognized text
or punctuation.
The default 60-second VAD limit gives subtitle generation more context at
speech boundaries. For memory-constrained machines, lower it explicitly (for
example, `--max-single-segment-time 30000`).
## Install
```bash
+8 -1
View File
@@ -73,6 +73,13 @@ def main():
)
parser.add_argument("--model", default="iic/SenseVoiceSmall")
parser.add_argument("--device", default="cuda")
parser.add_argument(
"--max-single-segment-time",
type=int,
default=60000,
metavar="MS",
help="Maximum VAD segment length in milliseconds (default: 60000)",
)
parser.add_argument("--spk", action="store_true", help="Include speaker labels")
parser.add_argument("--lang", default="auto")
args = parser.parse_args()
@@ -88,7 +95,7 @@ def main():
from funasr import AutoModel
kwargs = {"model": args.model, "vad_model": "fsmn-vad", "punc_model": "ct-punc",
"vad_kwargs": {"max_single_segment_time": 30000},
"vad_kwargs": {"max_single_segment_time": args.max_single_segment_time},
"device": args.device, "disable_update": True}
if args.spk:
kwargs["spk_model"] = "cam++"
+1
View File
@@ -68,6 +68,7 @@ def test_generate_subtitle_requests_sentence_timestamps_and_writes_segmented_srt
module.main()
assert captured["model_kwargs"]["punc_model"] == "ct-punc"
assert captured["model_kwargs"]["vad_kwargs"] == {"max_single_segment_time": 60000}
assert captured["generate_kwargs"]["language"] == "zh"
assert captured["generate_kwargs"]["sentence_timestamp"] is True
assert captured["generate_kwargs"]["output_timestamp"] is True