Skip to main content

SoundGraft

SoundGraft

Replace video clip audio with matched segments from a dedicated audio recording.

When you record an event with both a camera and a separate high-quality audio recorder, SoundGraft automatically aligns each video clip to the audio timeline and swaps in the better audio track. It also cleans up the replacement audio by attenuating applause and impulse noise, then peak-normalizes the result.

How it works

  1. File classification — Scans the input directory and sorts files into audio recordings and video clips by extension.
  2. Event grouping — Groups consecutive audio segments into events using a file-size heuristic (a short segment followed by a full-length one marks an event boundary).
  3. Alignment — Uses Chromaprint fingerprint correlation to find where each video clip sits within the audio timeline. Metadata timestamps provide a search hint when available; falls back to a full scan otherwise.
  4. Audio processing — For each matched clip:
    • Cuts the corresponding segment from the audio recording
    • Detects and attenuates applause sections (spectral flatness analysis)
    • Detects and attenuates impulse noise (transient peak analysis)
    • Peak-normalizes to 0 dBFS
  5. Muxing — Replaces the video's audio track with the processed audio using ffmpeg.

Per-clip .log files are written to the output directory with alignment, applause, impulse, and normalization details.

Installation

pip install soundgraft

You also need these system tools:

  • ffmpeg / ffprobe
  • sox
  • fpcalc (from libchromaprint-tools)

On Debian/Ubuntu:

sudo apt install ffmpeg sox libchromaprint-tools

Usage

soundgraft --input <input_dir> --output <output_dir> [options]

Place all raw audio recordings and video clips in a single input directory. Output videos (with replaced audio) and per-clip log files are written to the output directory.

Options

Flag Description
--input DIR Directory containing raw audio and video files (required)
--output DIR Directory for output files (required)
--clip N Process only video clip number N (1-indexed)
--from-clip N Process video clips from N onwards
--it-is-what-it-is Include low-confidence matches instead of skipping them
--no-hint Skip metadata timestamp heuristic, always do full scan
--keep-original-audio Keep the original video audio as a second track
--shotgun N Emit N candidate outputs per clip (different alignment offsets) instead of auto-picking one; use to recover from a bad match. Output files are named <clip>_cand<k>_<offset>s.<ext>.
--temp-dir DIR Directory for temporary files (default: system temp)

Supported formats

  • Audio: .wav, .flac, .mp3, .ogg, .aac
  • Video: .mp4, .mov, .avi, .mkv, .mts

Example

soundgraft --input ./concert-raw --output ./concert-fixed

This scans concert-raw/ for audio and video files, aligns each video clip to the audio recording, processes the audio, and writes the final videos to concert-fixed/.

License

Apache-2.0

Download files

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

Source Distribution

soundgraft-0.2.0.tar.gz (714.4 kB view details)

Uploaded Source

Built Distribution

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

soundgraft-0.2.0-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file soundgraft-0.2.0.tar.gz.

File metadata

  • Download URL: soundgraft-0.2.0.tar.gz
  • Upload date:
  • Size: 714.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for soundgraft-0.2.0.tar.gz
Algorithm Hash digest
SHA256 52a12cdb371608351d72428290cede95b2c2fdb06508c09d452627f00c322bed
MD5 d434de5fb8b72bada22b9cb133161d85
BLAKE2b-256 e8f8755b8d98f5cefd7b64636629e5ca77add8fe3b55c78b2ade5f00931974db

See more details on using hashes here.

File details

Details for the file soundgraft-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: soundgraft-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for soundgraft-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b9aabde638712d31ccb9913db3c48d4e031eaefefea7399cd16e34f44fc5b7f
MD5 883e526e819abcab7e2de4b52d581818
BLAKE2b-256 03680f08b326038c39a3a3e79f0ca9b1f357ae0e544319804838e8e765cae77e

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 Sentry Error logging StatusPage Status page