plugins/media-curator/skills/audio-extraction/SKILL.md
ffmpeg patterns for extracting audio from video files and transcoding between formats
npx skillsauth add jmagly/aiwg Audio ExtractionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Patterns for extracting audio tracks from video files and transcoding between audio formats using ffmpeg.
# Standard quality (128k) - good balance of size and quality
ffmpeg -y -i input.mp4 -vn -acodec libopus -b:a 128k output.opus
# High quality (192k) - for studio sessions and interviews
ffmpeg -y -i input.mp4 -vn -acodec libopus -b:a 192k output.opus
# Lower quality (96k) - for long-form content like full concerts
ffmpeg -y -i input.mp4 -vn -acodec libopus -b:a 96k output.opus
ffmpeg -y -i input.mp4 -vn -acodec flac output.flac
# VBR quality 2 (~190kbps, excellent quality)
ffmpeg -y -i input.mp4 -vn -acodec libmp3lame -q:a 2 output.mp3
# CBR 320kbps (maximum quality)
ffmpeg -y -i input.mp4 -vn -acodec libmp3lame -b:a 320k output.mp3
for f in video/*.mp4; do
[ -f "$f" ] || continue
base=$(basename "${f%.mp4}")
[ -f "audio/${base}.opus" ] && continue # Skip existing
ffmpeg -y -i "$f" -vn -acodec libopus -b:a 128k "audio/${base}.opus"
done
find video/ -name "*.mp4" -print0 | \
xargs -0 -P 4 -I{} sh -c '
base=$(basename "${1%.mp4}")
[ -f "audio/${base}.opus" ] || \
ffmpeg -y -i "$1" -vn -acodec libopus -b:a 128k "audio/${base}.opus"
' _ {}
ffmpeg -y -i input.flac -acodec libopus -b:a 128k output.opus
ffmpeg -y -i input.flac -acodec libmp3lame -q:a 2 output.mp3
ffmpeg -y -i input.opus -acodec libmp3lame -q:a 2 output.mp3
ffmpeg -y -i input.m4a -acodec libopus -b:a 128k output.opus
ffprobe -v quiet -show_entries format=bit_rate \
-of default=noprint_wrappers=1:nokey=1 input.opus
ffprobe -v quiet -show_entries stream=codec_name,sample_rate,channels,bit_rate \
-of json input.opus
ffmpeg -i input.opus -af "volumedetect" -f null /dev/null 2>&1 | grep max_volume
# If max_volume > 0 dB, audio is clipping
ffprobe -v quiet -show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 input.opus
| Source Content | Extract To | Bitrate | Rationale | |---------------|-----------|---------|-----------| | Music video (studio) | Opus | 128k | Good balance for music | | Live performance | Opus | 128k | Crowd noise doesn't need more | | Studio session | Opus | 192k | Preserve detail | | Interview | Opus | 96k | Speech doesn't need high bitrate | | Full concert (2+ hours) | Opus | 96k | Size management | | Archival source (FLAC) | FLAC | Lossless | Preserve original quality |
# Create file list
for f in segments/*.opus; do
echo "file '$f'" >> filelist.txt
done
# Concatenate without re-encoding
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.opus
# Split at specific timestamps (from setlist)
ffmpeg -i concert.opus -ss 00:00:00 -to 00:04:30 -c copy "01 - Jumpsuit.opus"
ffmpeg -i concert.opus -ss 00:04:30 -to 00:08:15 -c copy "02 - Levitate.opus"
# Extract frame at 5 seconds
ffmpeg -y -ss 5 -i video.mp4 -vframes 1 -q:v 2 cover.jpg
# Extract frame as WebP (smaller)
ffmpeg -y -ss 5 -i video.mp4 -vframes 1 cover.webp
data-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.