mirror of
https://github.com/modelscope/FunASR.git
synced 2026-10-12 02:19:18 +00:00
fix(subtitle): preserve more VAD context by default
Signed-off-by: zhifu gao <[email protected]>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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++"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user