{"id":19704241,"url":"https://github.com/dbklim/webrtcvad_wrapper","last_synced_at":"2025-07-19T04:03:03.522Z","repository":{"id":57760683,"uuid":"214233696","full_name":"dbklim/WebRTCVAD_Wrapper","owner":"dbklim","description":"A simple Python wrapper to simplify working with WebRTC VAD and its rougher analogue based on RMS and ZCR (useful for processing audio recordings before using them with neural networks).","archived":false,"fork":false,"pushed_at":"2022-08-22T13:59:29.000Z","size":640,"stargazers_count":9,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-30T02:39:03.531Z","etag":null,"topics":["audio","audio-processing","dsp","forced-alignment","python","silence-suppression","vad","vad-detection","voice-activity-detection","webrtc","webrtc-tools","webrtc-vad","webrtcvad-wrapper"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dbklim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-10T16:35:28.000Z","updated_at":"2022-10-22T13:48:26.000Z","dependencies_parsed_at":"2022-08-26T20:03:11.187Z","dependency_job_id":null,"html_url":"https://github.com/dbklim/WebRTCVAD_Wrapper","commit_stats":null,"previous_names":["dbklim/webrtcvad_wrapper","desklop/webrtcvad_wrapper"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dbklim/WebRTCVAD_Wrapper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2FWebRTCVAD_Wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2FWebRTCVAD_Wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2FWebRTCVAD_Wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2FWebRTCVAD_Wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dbklim","download_url":"https://codeload.github.com/dbklim/WebRTCVAD_Wrapper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbklim%2FWebRTCVAD_Wrapper/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265886992,"owners_count":23844320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","audio-processing","dsp","forced-alignment","python","silence-suppression","vad","vad-detection","voice-activity-detection","webrtc","webrtc-tools","webrtc-vad","webrtcvad-wrapper"],"created_at":"2024-11-11T21:21:29.297Z","updated_at":"2025-07-19T04:03:03.476Z","avatar_url":"https://github.com/dbklim.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WebRTCVAD Wrapper\n\nЭто простая обёртка на Python для [WebRTC](https://webrtc.org/) Voice Activity Detection (VAD). Поддерживается только Python 3.\n\n[VAD](https://en.wikipedia.org/wiki/Voice_activity_detection) - это детектор голосовой активности, который позволяет удалять тишину/извлекать фрагменты с речью (или другими звуками) из wav аудиозаписи.\n\n**WebRTCVAD_Wrapper** упрощает работу с WebRTC VAD: избавляет пользователя от необходимости самому извлекать фреймы/кадры из аудиозаписи и снимает ограничения на параметры обрабатываемой аудиозаписи.\n\nТак же он содержит **дополнительный режим работы**, который является отдельным, более **грубым и строгим алгоритмом VAD**, основанным на вычислении мощности звуковой волны (RMS, root-mean-square) и частот пересечения нуля (ZCR, zero-crossing rate). Данный режим будет полезен при подготовке аудиозаписей для обучения нейронной сети, так как он **часто игнорирует вообще всё, кроме гласных и звонких согласных звуков в речи** (или просто громких звуков). Его можно использовать, например, в нейронной сети, предназначенной для:\n\n- классификации пола человека по его речи (gender classification/recognition)\n- классификации эмоций человека по его речи (emotion classification/recognition)\n- идентификации человека по его голосу (speaker identification/verification)\n- классификации аудиозаписей\n- разделении голосов (speaker diarization)\n- корректировки результатов сведения текста с аудиозаписью (forced alignment)\n\nОднако его нельзя использовать в распознавании речи, потому что данный режим не гарантирует сохранность всех фонем в речи.\n\n## Установка\n\nДанная обёртка имеет следующие зависимости: [pydub](https://github.com/jiaaro/pydub), [librosa](https://github.com/librosa/librosa) и [py-webrtcvad](https://github.com/wiseman/py-webrtcvad).\n\nУстановка с помощью pip:\n```\npip install git+https://github.com/Desklop/WebRTCVAD_Wrapper\n```\n\n## Использование\n\n**1.** Из вашего кода Python (извлечение фрагментов с речью/звуком из `test.wav` и сохранение их как `segment_%i.wav`):\n```python\nfrom webrtcvad_wrapper import WebRTCVAD\n\nvad = VAD(sensitivity_level=3)\naudio = vad.read_wav('test.wav')\nfiltered_segments = vad.filter(audio)\n\nsegments_with_voice = [[filtered_segment[0], filtered_segment[1]] for filtered_segment in filtered_segments if filtered_segment[-1]]\nfor i, segment in enumerate(segments_with_voice):\n    vad.write_wav('segment_%002d.wav' % (i + 1), audio[segment[0]*1000:segment[1]*1000])\n```\n\nОчистка аудиозаписи от тишины (например, для обучения нейронной сети) (извлечение фрагментов с речью/звуком из `test.wav`, объединение их в одну аудиозапись и сохранение как `test_without_silence.wav`):\n```python\nvad.set_mode(sensitivity_level=4)\naudio = vad.read_wav('test.wav')\nfiltered_segments = vad.filter(audio)\n\nsegments_with_voice = [[filtered_segment[0], filtered_segment[1]] for filtered_segment in filtered_segments if filtered_segment[-1]]\naudio_without_silence = audio[segments_with_voice[0][0]*1000:segments_with_voice[0][1]*1000]\nfor segment in segments_with_voice[1:]:\n    audio_without_silence += audio[segment[0]*1000:segment[1]*1000]\nvad.write_wav('test_without_silence.wav', audio_without_silence)\n```\n\nКласс [VAD](https://github.com/Desklop/WebRTCVAD_Wrapper/blob/master/webrtcvad_wrapper/webrtcvad_wrapper.py#L39) содержит следующие методы:\n- [`read_wav()`](https://github.com/Desklop/WebRTCVAD_Wrapper/blob/master/webrtcvad_wrapper/webrtcvad_wrapper.py#L373): принимает имя .wav аудиозаписи, приводит её в поддерживаемый формат (см. ниже) и возвращает объект `pydub.AudioSegment` с аудиозаписью\n- [`write_wav()`](https://github.com/Desklop/WebRTCVAD_Wrapper/blob/master/webrtcvad_wrapper/webrtcvad_wrapper.py#L394): принимает имя .wav аудиозаписи, объект `pydub.AudioSegment` (или байтовую строку с аудиоданными без заголовков wav) и сохраняет аудиозапись под переданным именем\n- [`filter()`](https://github.com/Desklop/WebRTCVAD_Wrapper/blob/master/webrtcvad_wrapper/webrtcvad_wrapper.py#L77): принимает объект `pydub.AudioSegment` (или байтовую строку с аудиоданными без заголовков wav), разбивает аудиозапись на фреймы, фильтрует их по наличию речи/звука (с помощью `webrtcvad.Vad().is_speech()` или дополнительным алгоритмом VAD, в зависимости от заданного уровня чувствительности) и возвращает список из списков с границами сегментов: `[[0.00, 1.23, True/False], ...]` (где `0.00` - начало сегмента (в секундах), `1.23` - конец сегмента, `True/False` - `True`: речь/звук, `False`: тишина)\n- [`set_mode()`](https://github.com/Desklop/WebRTCVAD_Wrapper/blob/master/webrtcvad_wrapper/webrtcvad_wrapper.py#L63): принимает целое число от `0` до `4`, которое задаёт уровень чувствительности VAD (значение от `0` до `3` - уровень чувствительности WebRTC VAD, значение `4` - отключение WebRTC VAD и использование дополнительного грубого алгоритма VAD)\n\nПодробная информация о поддерживаемых аргументах и работе каждого метода находится в комментариях в исходном коде этих методов.\n\nОсобенности:\n- WebRTC VAD принимает только PCM 16 бит, моно, по этому метод `read_wav()` автоматически приводит вашу wav аудиозапись в необходимый формат\n- WebRTC VAD работает только с фреймами/кадрами длиной 10, 20 или 30 миллисекунд и частотой дискретизации 8, 16, 32 или 48кГц, об этом заботится метод `filter()`\n- метод `set_mode()` позволяет задать уровень чувствительности (его так же можно задать при создании объекта `VAD(0)`), поддерживаются значения от `0` до `4`, где `4` - максимальная чувствительность (по умолчанию используется значение `3`). Значения от `0` до `3` являются базовыми для WebRTC VAD, значение `4` включает использование отдельного, более грубого и строгого алгоритма VAD, основанного на вычислении мощности звуковой волны и частот пересечения нуля\n\n---\n\n**2.** В качестве инструмента командной строки:\n```bash\npython3 -m webrtcvad_wrapper.cli --mode=3 input.wav output.wav\n```\nили\n```bash\nwebrtcvad_wrapper --mode=3 input.wav output.wav\n```\n\nГде:\n- `--mode=3` - уровень чувствительности, целое число от `0` до `4` (если не передавать аргумент - использовать значение `3`)\n- `input.wav` - имя исходной .wav аудиозаписи\n- `output.wav` или `output` - шаблонное имя для .wav аудиозаписей, в которые будут сохранены найденные фрагменты с речью/звуком в формате `output_%i.wav`\n\nВ данном варианте используются следующие параметры:\n- длина фрейма `10` миллисекунд\n- фрагмент считается фрагментом с речью/звуком, если он содержит более `90%` фреймов, в которых WebRTC VAD (или дополнительный алгоритм VAD) нашёл речь/звук\n\n---\n\nЕсли у вас возникнут вопросы или вы хотите сотрудничать, можете написать мне на почту: vladsklim@gmail.com или в [LinkedIn](https://www.linkedin.com/in/vladklim/).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbklim%2Fwebrtcvad_wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdbklim%2Fwebrtcvad_wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbklim%2Fwebrtcvad_wrapper/lists"}