Claudest extract-audio
install
source · Clone the upstream repo
git clone https://github.com/gupsammy/Claudest
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/gupsammy/Claudest "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/claude-content/skills/extract-audio" ~/.claude/skills/gupsammy-claudest-extract-audio && rm -rf "$T"
manifest:
plugins/claude-content/skills/extract-audio/SKILL.mdsource content
Format Decision Tree
| User wants | Format | Flags | Why |
|---|---|---|---|
| Music, archive quality | FLAC | | Lossless, no quality loss |
| Music, small + transparent | MP3 VBR | | ~200kbps avg, perceptually lossless |
| Podcast / voice | MP3 128k CBR | | Sufficient for speech, universally compatible |
| Mobile / streaming | AAC 192k | | Better than MP3 at equivalent bitrate |
| DAW / editing | WAV | | No encoding loss, widest DAW support |
| Source already target format | Copy | | No re-encode, instant, lossless |
Process
1. Probe audio streams
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
# 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
where container compatibility allows.-c:a copy - For files >1 hour, ask whether the user wants the full file or a specific range — trimming can be added with
and-ss
before-to
.-vn - M4A vs AAC: AAC is the codec, M4A is the container. Use
extension for Apple device compatibility; use.m4a
for a raw stream..aac