Skip to main content

monkeyplug is a little script to censor profanity in audio files.

Project description

monkeyplug

Latest Version VOSK Docker Images Whisper Docker Images

monkeyplug is a little script to censor profanity in audio files (intended for podcasts, but YMMV) in a few simple steps:

  1. The user provides a local audio file (or a URL pointing to an audio file which is downloaded)
  2. Either Whisper (GitHub) or the Vosk-API is used to recognize speech in the audio file
  3. Each recognized word is checked against a list of profanity or other words you'd like muted (supports text or JSON format)
  4. ffmpeg is used to create a cleaned audio file, muting or "bleeping" the objectional words

You can then use your favorite media player to play the cleaned audio file.

If provided a video file for input, monkeyplug will attempt to process the audio stream from the file and remultiplex it, copying the original video stream.

monkeyplug is part of a family of projects with similar goals:

Installation

Using pip, to install the latest release from PyPI:

python3 -m pip install -U monkeyplug

Or to install directly from GitHub:

python3 -m pip install -U 'git+https://github.com/mmguero/monkeyplug'

Prerequisites

monkeyplug requires:

To install FFmpeg, use your operating system's package manager or install binaries from ffmpeg.org. The Python dependencies will be installed automatically if you are using pip to install monkeyplug, except for vosk or openai-whisper; as monkeyplug can work with both speech recognition engines, there is not a hard installation requirement for either until runtime.

usage

usage: monkeyplug <arguments>

options:
  -h, --help            show this help message and exit
  -v [true|false], --verbose [true|false]
                        Verbose/debug output
  -m <string>, --mode <string>
                        Speech recognition engine (whisper|vosk) (default: whisper)
  -i <string>, --input <string>
                        Input file (or URL)
  -o <string>, --output <string>
                        Output file
  --output-json <string>
                        Output file to store transcript JSON
  -w <profanity file>, --swears <profanity file>
                        text or JSON file containing profanity (default: "swears.txt")
  -a <str>, --audio-params <str>
                        Audio parameters for ffmpeg (default depends on output audio codec)
  -c <int>, --channels <int>
                        Audio output channels (default: 2)
  -s <int>, --sample-rate <int>
                        Audio output sample rate (default: 48000)
  -r <str>, --bitrate <str>
                        Audio output bitrate (default: 256K)
  -q <int>, --vorbis-qscale <int>
                        qscale for libvorbis output (default: 5)
  -f <string>, --format <string>
                        Output file format (default: inferred from extension of --output, or "MATCH")
  --pad-milliseconds <int>
                        Milliseconds to pad on either side of muted segments (default: 0)
  --pad-milliseconds-pre <int>
                        Milliseconds to pad before muted segments (default: 0)
  --pad-milliseconds-post <int>
                        Milliseconds to pad after muted segments (default: 0)
  -b [true|false], --beep [true|false]
                        Beep instead of silence
  -z <int>, --beep-hertz <int>
                        Beep frequency hertz (default: 1000)
  --beep-mix-normalize [true|false]
                        Normalize mix of audio and beeps (default: False)
  --beep-audio-weight <int>
                        Mix weight for non-beeped audio (default: 1)
  --beep-sine-weight <int>
                        Mix weight for beep (default: 1)
  --beep-dropout-transition <int>
                        Dropout transition for beep (default: 0)
  --force [true|false]  Process file despite existence of embedded tag

VOSK Options:
  --vosk-model-dir <string>
                        VOSK model directory (default: ~/.cache/vosk)
  --vosk-read-frames-chunk <int>
                        WAV frame chunk (default: 8000)

Whisper Options:
  --whisper-model-dir <string>
                        Whisper model directory (~/.cache/whisper)
  --whisper-model-name <string>
                        Whisper model name (base.en)
  --torch-threads <int>
                        Number of threads used by torch for CPU inference (0)

Docker

Alternately, a Dockerfile is provided to allow you to run monkeyplug in Docker. You can pull one of the following images:

  • VOSK
    • oci.guero.org/monkeyplug:vosk-small
    • oci.guero.org/monkeyplug:vosk-large
  • Whisper
    • oci.guero.org/monkeyplug:whisper-tiny.en
    • oci.guero.org/monkeyplug:whisper-tiny
    • oci.guero.org/monkeyplug:whisper-base.en
    • oci.guero.org/monkeyplug:whisper-base
    • oci.guero.org/monkeyplug:whisper-small.en
    • oci.guero.org/monkeyplug:whisper-small
    • oci.guero.org/monkeyplug:whisper-medium.en
    • oci.guero.org/monkeyplug:whisper-medium
    • oci.guero.org/monkeyplug:whisper-large-v1
    • oci.guero.org/monkeyplug:whisper-large-v2
    • oci.guero.org/monkeyplug:whisper-large-v3
    • oci.guero.org/monkeyplug:whisper-large

then run monkeyplug-docker.sh inside the directory where your audio files are located.

Contributing

If you'd like to help improve monkeyplug, pull requests will be welcomed!

Authors

  • Seth Grover - Initial work - mmguero

License

This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

monkeyplug-2.1.8.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

monkeyplug-2.1.8-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file monkeyplug-2.1.8.tar.gz.

File metadata

  • Download URL: monkeyplug-2.1.8.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for monkeyplug-2.1.8.tar.gz
Algorithm Hash digest
SHA256 ae161018416874a0cf81ba28c959a1ca52f366ccc8de904543e455909cc21505
MD5 f51805192c8fc32b80bfe95904c3be87
BLAKE2b-256 1e728c58737d9e4d1ff55906e61f0cc85e53f06851ca7c33d4abe4f0978990cb

See more details on using hashes here.

File details

Details for the file monkeyplug-2.1.8-py3-none-any.whl.

File metadata

  • Download URL: monkeyplug-2.1.8-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for monkeyplug-2.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ddea901ab36b368f2fff3ecbf420692848773c349d31dfa729cf80fd08834905
MD5 3b2ed434673f62256bc000330eeade72
BLAKE2b-256 a49ff3a28ce94e29a7c75be805140b9b525c1c246be91398d32a7cbf9093d9c2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page