
Extract Audio
Strip or export soundtrack from video files with ffmpeg/ffprobe format rules instead of guessing codec flags.
Install
npx skills add https://github.com/gupsammy/claudest --skill extract-audioWhat is this skill?
- Format decision tree maps use cases to FLAC, MP3 VBR/CBR, AAC, WAV, or stream copy
- ffprobe JSON probe step lists audio streams before choosing encode flags
- Explicit Bash allowlist for ffprobe and ffmpeg only plus AskUserQuestion for ambiguous inputs
- Re-encode vs copy guidance avoids unnecessary quality loss when source already matches target
Adoption & trust: 1 installs on skills.sh; 253 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Lark Drivelarksuite/cli
Lark Sharedlarksuite/cli
Lark Minuteslarksuite/cli
Tzstxixu-me/skills
Runcomfy Cliagentspace-so/runcomfy-agent-skills
Caveman Helpjuliusbrussee/caveman
Journey fit
Primary fit
Audio extraction is a build-time media pipeline task tied to local ffmpeg tooling, not distribution or validation. Integrations subphase fits agent-driven shell workflows that wire ffprobe stream inspection to ffmpeg encode or copy.
Common Questions / FAQ
Is Extract Audio safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Extract Audio
## Format Decision Tree | User wants | Format | Flags | Why | |------------|--------|-------|-----| | Music, archive quality | FLAC | `-c:a flac` | Lossless, no quality loss | | Music, small + transparent | MP3 VBR | `-c:a libmp3lame -q:a 0` | ~200kbps avg, perceptually lossless | | Podcast / voice | MP3 128k CBR | `-c:a libmp3lame -b:a 128k` | Sufficient for speech, universally compatible | | Mobile / streaming | AAC 192k | `-c:a aac -b:a 192k` | Better than MP3 at equivalent bitrate | | DAW / editing | WAV | `-c:a pcm_s16le -ar 44100` | No encoding loss, widest DAW support | | Source already target format | Copy | `-c:a copy` | No re-encode, instant, lossless | ## Process ### 1. Probe audio streams ```bash ffprobe -v quiet -print_format json -show_streams "$INPUT" | \ python3 -c " import json, sys streams = [s for s in json.load(sys.stdin)['streams'] if s['codec_type']=='audio'] for i, s in enumerate(streams): print(f'Stream {i}: {s[\"codec_name\"]} {s.get(\"bit_rate\",\"?\")} bps {s.get(\"channel_layout\",\"?\")}') " ``` ### 2. Determine format Apply the decision tree above if the user didn't specify. If the source audio codec already matches the target, use `-c:a copy` to avoid transcoding. If multiple audio streams exist, ask the user which to extract — or use `-map 0:a` to extract all. Once the user responds, apply `-map 0:a:N` (where N is the zero-based stream index they chose) or `-map 0:a` for all streams in the Phase 3 command. ### 3. Construct command ```bash # General pattern (-vn drops the video stream entirely): ffmpeg -i "$INPUT" -vn [FORMAT_FLAGS] "$OUTPUT" # Examples: ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 0 audio.mp3 # MP3 VBR best quality ffmpeg -i video.mp4 -vn -c:a libmp3lame -b:a 128k podcast.mp3 # MP3 128k CBR ffmpeg -i video.mp4 -vn -c:a flac archive.flac # FLAC lossless ffmpeg -i video.mp4 -vn -c:a aac -b:a 192k mobile.aac # AAC ffmpeg -i video.mp4 -vn -c:a pcm_s16le -ar 44100 edit.wav # WAV for DAW ffmpeg -i video.mp4 -vn -c:a copy original.m4a # Copy audio stream ``` ### 4. Confirm and run Show: detected source codec and bitrate, chosen output format, output path. Wait for approval, then run. Report output file size and duration: `ffprobe -v quiet -show_format "$OUTPUT" | grep -E "duration|size"` ## Key Decisions Preserve generation quality: avoid transcoding chains that degrade source fidelity. Each decision below is an application of this principle. - **Lossy-to-lossy warning**: if the source is already lossy (MP3, AAC, OGG) and the user wants a different lossy format, warn them that re-encoding degrades quality. Recommend keeping the source format or using `-c:a copy` where container compatibility allows. - For files >1 hour, ask whether the user wants the full file or a specific range — trimming can be added with `-ss` and `-to` before `-vn`. - M4A vs AAC: AAC is the codec, M4A is the container. Use `.m4a` extension for Apple device compatibility; use `.aac` for a raw stream.