From claude-content
Extracts audio from video using ffmpeg/ffprobe via Bash. Probes streams, selects format by use case (FLAC archive, MP3 VBR music, AAC mobile, WAV editing), copies if matching, handles multi-track.
npx claudepluginhub gupsammy/claudest --plugin claude-contentThis skill is limited to using the following tools:
| User wants | Format | Flags | Why |
Provides FFmpeg commands for audio encoding (AAC/MP3/Opus/FLAC), EBU R128 loudness normalization, extraction from video, format conversion, volume/EQ adjustments, channel ops, and podcast/broadcast chains.
Downloads YouTube/other videos via yt-dlp, extracts/converts audio via FFmpeg (mp4, webm, wav), transcribes with OpenAI Whisper via CLI script.
Provides FFmpeg commands for video/audio post-production: conversion, scaling, compression, trimming, concatenation, AI post-processing. Excludes audio mixing and Remotion rendering.
Share bugs, ideas, or general feedback.
| 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 |
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\",\"?\")}')
"
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.
# 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
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"
Preserve generation quality: avoid transcoding chains that degrade source fidelity. Each decision below is an application of this principle.
-c:a copy where container compatibility allows.-ss and -to before -vn..m4a extension for Apple device compatibility; use .aac for a raw stream.