agentsclimarketplace

Ffmpeg audio

Skill iansteitz1-eng/aria-skills/ffmpeg-audio

Open-source Claude Code Skills that replace clicking through vendor dashboards — Stripe, Cloudflare DNS, ElevenLabs, GitHub, and more. Powered by Aria Code.

Install
npx -y skills add iansteitz1-eng/aria-skills --skill ffmpeg-audio

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

The prod audio convention made declarative — coerce any container (.m4a/.mp3/.webm/.wav) to mono 16 kHz signed-16-bit PCM WAV (`-ac 1 -ar 16000 -c:a pcm_s16le`), the exact input shape TitaNet/voiceprint, NeMo diarization, whisper, and the training corpus all expect. Four ops (normalize · trim-to-clip · concat · probe) plus a YAML reconcile mode. Idempotent (skips up-to-date outputs), dry-run by default (nothing runs without --apply). Use when Ian says "normalize this audio", "make a 16k wav", "extract an enroll clip", "trim that recording", "convert to mono 16k", "prep audio for whisper/diarization/voiceprint", "batch-convert these recordings", or any time audio needs the prod mono-16k-PCM shape.

SKILL.md

3.9 KB, as published. Nobody here has run it

ffmpeg-audio

One ffmpeg shape recurs across the voiceprint, diarization, whisper, and training lanes: mono · 16 kHz · signed-16-bit PCM WAVffmpeg -ac 1 -ar 16000 -c:a pcm_s16le. This skill is that convention as a single idempotent CLI, so the same bytes come out every time regardless of who runs it or what container went in.

Defaults are the convention (SR=16000, CH=1, CODEC=pcm_s16le). Change them in one place at the top of ffmpeg_audio.py if a lane ever needs a different target.

Safety model

  • Dry-run by default. Every op prints the exact ffmpeg command it would run and changes nothing until --apply.
  • Idempotent. An output that already exists and is newer than its input(s) is skipped — re-running a batch is free. --force rebuilds anyway.
  • Read-only probe never writes.

The four ops

  1. normalize — any audio → mono 16k PCM WAV (the canonical convention).

    python3 ~/.claude/skills/ffmpeg-audio/ffmpeg_audio.py normalize output.m4a -o ian.wav --apply
    

    Batch a roster with globs + --suffix (no -o):

    python3 .../ffmpeg_audio.py normalize ian.* brandon.* stephen.* --suffix .16k.wav --apply
    
  2. trim — slice --start/--duration then normalize (the enroll-clip pattern: superwhisper/recordings/<ts>/output.wav~/enroll/ian.wav, 22s).

    python3 .../ffmpeg_audio.py trim output.wav --start 0 --duration 22 -o ~/enroll/ian.wav --apply
    
  3. concat — join N inputs into one normalized WAV (filter_complex concat).

    python3 .../ffmpeg_audio.py concat a.wav b.wav c.wav -o joined.wav --apply
    
  4. probe — ffprobe readout (codec · channels · rate · duration). Read-only.

    python3 .../ffmpeg_audio.py probe ian.wav
    

Reconcile a YAML catalog

For a fixed set of jobs (e.g. the enroll roster), declare them once and reconcile — idempotent, so it's safe to re-run after adding one person.

python3 .../ffmpeg_audio.py reconcile jobs.yaml            # dry-run
python3 .../ffmpeg_audio.py reconcile jobs.yaml --apply    # execute

See examples/enroll_roster.yaml for the shape:

jobs:
  - op: trim
    input: ~/superwhisper/recordings/2026-06-05/output.wav
    start: 0
    duration: 22
    output: ~/enroll/ian.wav
  - op: normalize
    input: ~/recordings/brandon.m4a
    output: ~/enroll/brandon.wav
  - op: concat
    inputs: [~/clips/a.wav, ~/clips/b.wav]
    output: ~/enroll/merged.wav

Flags

  • --apply — actually run ffmpeg (default: dry-run preview)
  • --force — rebuild even if the output is up-to-date
  • --json — machine-readable result array (for chaining)
  • --suffix — output name when -o is omitted (normalize/trim batch mode)

Notes

  • macOS: brew install ffmpeg · Ubuntu: apt-get install -y ffmpeg. The script hard-fails on a missing ffmpeg/ffprobe rather than running half a batch.
  • Stdlib only for the four ops; reconcile needs PyYAML.
  • Output dirs are created as needed. Inputs are glob-expanded (order-preserving, de-duped); a missing input surfaces as a per-job error, never silent.

License

Apache 2.0

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.