# whisper.cpp VAD: отделить речь от тишины и проверить пропуски

Источник: https://modelium.tech/zhurnal/whisper-cpp-vad/

В whisper.cpp VAD включается флагом `--vad` и требует отдельный файл модели Silero через `--vad-model`: детектор оставляет найденные речевые интервалы перед транскрибацией. Для русского аудио используйте многоязычную Whisper-модель, а не `.en`. Сравните один WAV с VAD и без него и прослушайте тихие реплики и края пауз: сокращение обрабатываемого аудио не доказывает, что слова не потерялись.

**Срез 6 октября 2026 года.** Флаги и механизм сверены с whisper.cpp `4afec37b797ab531aaf363208d79d541fbc17ff4`; репозиторий VAD-модели — `9ffd54a1e1ee413ddf265af9913beaf518d1639b`. Это инструкция по исходникам; Modelium не запускал модель и не проверял русскую запись. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3) [s7](#src-s7)

## Зачем нужен VAD в whisper.cpp?

VAD (voice activity detection) — предварительный поиск интервалов вероятной речи, а не распознавание слов. В `whisper-cli` флаг `--vad` вместе с `--vad-model` передаёт звук детектору, после чего Whisper получает только выделенные речевые интервалы. Авторы пишут, что это *может* сократить объём обработки и ускорить транскрибацию; скорость на вашем компьютере здесь не измерялась. Если тихая речь сочтена тишиной, она тоже не попадёт в распознавание. [s1](#src-s1) [s3](#src-s3)

Для VAD предлагается отдельный GGML-файл `ggml-silero-v6.2.0.bin`; он есть в закреплённом репозитории ggml-org/whisper-vad. Это **не** транскрипционная модель. Для русской речи возьмите многоязычную `ggml-base.bin`, а не английскую `ggml-base.en.bin`: документация whisper.cpp прямо различает варианты по суффиксу `.en`, а закреплённый репозиторий Whisper содержит файл `ggml-base.bin`. Выбор конкретной Whisper-модели не равен обещанию качества на вашем аудио. [s1](#src-s1) [s5](#src-s5) [s7](#src-s7) [s8](#src-s8)

## Что подготовить перед сравнением на русской записи?

Нужны рабочая сборка whisper.cpp, `ffmpeg` для приведения входа к одноканальному 16-битному WAV с частотой 16 кГц, две разные модели и запись, на которой вы сами знаете тихие слова, паузы и начало фраз. README показывает `cmake -B build` и `cmake --build build -j --config Release`, а для конвертации аудио — `ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav`. Если исходник уже WAV требуемого формата, не преобразуйте его ради галочки. [s1](#src-s1)

Из корня **закреплённого Git-коммита** можно скачать модели командами `./models/download-ggml-model.sh base` и `./models/download-vad-model.sh silero-v6.2.0`; первый скрипт использует репозиторий Whisper, второй — отдельный ggml-org/whisper-vad. Скрипты обращаются к ветке `main` модельных репозиториев: для воспроизводимого опыта зафиксируйте SHA-256 реально загруженных `.bin` и используйте эти же файлы в обоих прогонах. Это контрольная рекомендация редакции, не утверждение о совпадении скачанного файла с любой будущей версией. [s4](#src-s4) [s6](#src-s6) [s7](#src-s7) [s8](#src-s8)

Сначала пройдите [базовый гайд whisper.cpp](/zhurnal/whisper-cpp/): если модель, формат файла или выбранный backend уже не работают без VAD, включение фильтра не исправит основу. Размер файла на диске не является требованием к RAM или VRAM, а авторский пример с `base.en` на английском JFK нельзя переносить на русский. [s1](#src-s1) [s5](#src-s5)

## Как сравнить результат с VAD и без него?

На одной сборке, одном WAV и одной Whisper-модели выполните два прохода. Первый: `./build/bin/whisper-cli -m models/ggml-base.bin -f input.wav -l ru -oj -of without-vad`. Второй: `./build/bin/whisper-cli -m models/ggml-base.bin -f input.wav -l ru --vad --vad-model models/ggml-silero-v6.2.0.bin -oj -of with-vad`. Здесь `input.wav` — заменяемый путь к вашей подготовленной записи; `without-vad.json` и `with-vad.json` — ожидаемые выходные файлы по реализации `--output-json` и `--output-file`. Это **команды из синтаксиса закреплённого кода**, а не подтверждённые прогоны Modelium; проверьте `--help` своей версии перед запуском. [s1](#src-s1) [s2](#src-s2) [s4](#src-s4) [s5](#src-s5)

При успешном VAD в логе исходников ожидаются сообщения о включении фильтра, количестве выделенных речевых сегментов и длительности оставленного аудио. Код собирает интервалы, вставляет краткий зазор между ними и затем сопоставляет выходные таймкоды с оригинальной шкалой записи. **Ровные временные метки не доказывают, что VAD сохранил тихое слово**: сравнивать нужно и текст, и исходный звук. [s3](#src-s3)

## Какие настройки менять, если отрезало начало фразы?

На изученной ревизии CLI исходно задаёт `--vad-threshold 0.5`, `--vad-min-speech-duration-ms 250`, `--vad-min-silence-duration-ms 100`, `--vad-speech-pad-ms 30` и `--vad-samples-overlap 0.1` секунды. Это конкретные *исходные значения программы*, не доказанная лучшая настройка для русского. README описывает threshold как границу вероятности речи, min speech как отсечение слишком коротких интервалов, min silence как порог паузы, pad как добавление звука по краям, overlap как перекрытие соседних сегментов. [s1](#src-s1) [s2](#src-s2)

Если в варианте с VAD пропало тихое «да», имя или первое слово после паузы, прослушайте этот интервал **в оригинале**. Затем на копии опыта меняйте один параметр за раз и записывайте полный вызов и оба JSON. Можно исследовать большее `--vad-speech-pad-ms` для сохранения контекста вокруг границ или меньший `--vad-threshold` для более чувствительного выделения, но это гипотезы для локального сравнения: изменение границ может удержать шум и не гарантирует правильные слова. Возврат к проходу **без** VAD — корректный выбор, если критичный фрагмент иначе теряется. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3)

Не путайте эти значения с [VAD в faster-whisper](/zhurnal/faster-whisper-vad/): тот проект использует другой API и другие значения по умолчанию. Сравнивать можно маршрут решения задачи, но не считать его конфигурацию параметрами whisper.cpp. [s1](#src-s1) [s2](#src-s2)

## Что считать проверенным результатом и когда не включать фильтр?

Прослушайте несколько контрольных точек в исходной русской записи: короткое тихое слово, начало реплики после длинной паузы, числа и имена. Для каждой отметьте исходный момент, есть ли фрагмент в обеих версиях JSON, насколько сместился сегмент и изменился ли текст. Транскрипт **без** VAD тоже может содержать ошибку Whisper, поэтому эталон — ручное прослушивание WAV, а не первый JSON. В рабочем контуре, где пропущенное слово меняет решение или запись звонка, не автоматизируйте перенос непроверенного текста. Это предлагаемый редакционный протокол, не тест Modelium. [s2](#src-s2) [s3](#src-s3)

Если VAD не находит речи, лог не показывает сегментов или модель детектора не открывается, проверьте полный путь к двум `.bin`, входной формат, версии файлов, код возврата процесса и попробуйте обычный прогон. Если включение VAD не сократило время на вашей задаче или исказило таймкоды, не объявляйте его обязательной оптимизацией. Оставьте исходную запись и результат без фильтра для обратимого сравнения; модель Silero не является детектором качества распознанного текста. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3)

**Следующий шаг:** выполните [контрольный запуск whisper.cpp](/zhurnal/whisper-cpp/) на своей записи, затем запишите два JSON и сверьте тихие слова и временные метки с оригиналом. Связанный [обзор локального распознавания речи](/zhurnal/raspoznavanie-rechi-lokalno/) поможет выбрать другой runtime, если ваш сценарий требует иных ограничений. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3)

## Источники

1. [whisper.cpp: README, сборка, аудиоформат и VAD](https://github.com/ggml-org/whisper.cpp/blob/4afec37b797ab531aaf363208d79d541fbc17ff4/README.md) — получено 2026-10-06
2. [whisper.cpp: аргументы и вывод whisper-cli](https://github.com/ggml-org/whisper.cpp/blob/4afec37b797ab531aaf363208d79d541fbc17ff4/examples/cli/cli.cpp) — получено 2026-10-06
3. [whisper.cpp: фильтрация сегментов и восстановление таймкодов](https://github.com/ggml-org/whisper.cpp/blob/4afec37b797ab531aaf363208d79d541fbc17ff4/src/whisper.cpp) — получено 2026-10-06
4. [whisper.cpp: скрипт загрузки VAD-модели](https://github.com/ggml-org/whisper.cpp/blob/4afec37b797ab531aaf363208d79d541fbc17ff4/models/download-vad-model.sh) — получено 2026-10-06
5. [whisper.cpp: многоязычные модели и форматы](https://github.com/ggml-org/whisper.cpp/blob/4afec37b797ab531aaf363208d79d541fbc17ff4/models/README.md) — получено 2026-10-06
6. [whisper.cpp: скрипт загрузки Whisper-модели](https://github.com/ggml-org/whisper.cpp/blob/4afec37b797ab531aaf363208d79d541fbc17ff4/models/download-ggml-model.sh) — получено 2026-10-06
7. [Hugging Face: файлы ggml-org/whisper-vad на закреплённой ревизии](https://huggingface.co/api/models/ggml-org/whisper-vad/revision/9ffd54a1e1ee413ddf265af9913beaf518d1639b) — получено 2026-10-06
8. [Hugging Face: ggml-base.bin на закреплённой ревизии](https://huggingface.co/api/models/ggerganov/whisper.cpp/revision/5359861c739e955e79d9a303bcbc70fb988958b1) — получено 2026-10-06
