Audio Prep Pipeline¶
audio-prep converts source audio into pretraining-ready WAV or FLAC files and
can optionally split speech into VAD-based chunks. It is designed for dataset
preparation before self-supervised speech pretraining workflows such as
Wav2Vec2 and XLS-R.
Default converted output:
| Setting | Default |
|---|---|
| Format | WAV |
| Sample rate | 16 kHz |
| Channels | 1, mono |
What It Does¶
The conversion pipeline:
- Recursively discovers supported source audio files.
- Converts audio with FFmpeg.
- Validates output with
soundfile. - Writes an optional JSONL manifest.
The chunking pipeline:
- Recursively discovers supported source audio files.
- Decodes audio with FFmpeg.
- Detects speech with Silero VAD, or an optional energy fallback.
- Writes speech-only WAV or FLAC chunks.
- Writes an optional JSONL chunk manifest.
Why This Exists¶
Large audio corpora often contain corrupt files, inconsistent sample rates, wrong channel layouts, very short clips, and silence-heavy recordings. This project keeps those problems visible by returning per-file results instead of aborting entire batch jobs, and by validating generated files before they are handed to training code.
Quick Example¶
CLI conversion:
audio-prep convert \
--input-dir data/raw_mp3 \
--output-dir data/wav16k \
--format wav \
--sample-rate 16000 \
--workers 8 \
--manifest data/manifest.jsonl
Python conversion:
from pathlib import Path
from audio_prep import ConversionConfig, build_manifest, convert_batch, validate_output, write_manifest
config = ConversionConfig(output_format="wav", sample_rate=16_000, num_workers=8)
results = convert_batch(Path("data/raw_mp3"), Path("data/wav16k"), config)
validations = {
result.output: validate_output(result.output, config)
for result in results
if result.success and result.output is not None
}
records = build_manifest(results, validations)
write_manifest(records, Path("data/manifest.jsonl"))
CLI chunking:
audio-prep chunk \
--input-dir data/raw_mp3 \
--output-dir data/chunks \
--min-duration-sec 5 \
--max-duration-sec 20 \
--manifest data/chunk_manifest.jsonl
Python chunking:
from pathlib import Path
from audio_prep import ChunkConfig, build_chunk_manifest, chunk_batch, write_manifest
config = ChunkConfig(min_duration_sec=5, max_duration_sec=20)
results = chunk_batch(Path("data/raw_mp3"), Path("data/chunks"), config)
records = build_chunk_manifest(results)
write_manifest(records, Path("data/chunk_manifest.jsonl"))