Skip to content
Back to skills

Audio Extraction

ASecurity

ffmpeg patterns for extracting audio from video files and transcoding between formats

  • 211 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 21, 2026
ai-agentsgobashperformance

Works with

  • cli

Security analysis

A100/100

Scanned September 21, 2026

npx -y skills add jmagly/ai-writing-guide --skill audio-extraction --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Audio Extraction?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Audio Extraction
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jmagly-audio-extraction-fc846d69/badge)](https://www.skillsdirectory.com/skills/jmagly-audio-extraction-fc846d69)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
namespace: aiwg
platforms: [all]
name: audio-extraction
description: ffmpeg patterns for extracting audio from video files and transcoding between formats
category: media-curator
---

# Audio Extraction

Patterns for extracting audio tracks from video files and transcoding between audio formats using ffmpeg.

## Extract Audio from Video

### To Opus (Recommended for collections)
```bash
# 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
```

### To FLAC (Lossless preservation)
```bash
ffmpeg -y -i input.mp4 -vn -acodec flac output.flac
```

### To MP3 (Maximum compatibility)
```bash
# 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
```

## Batch Extraction

### All Videos in Directory to Opus
```bash
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
```

### Parallel Batch Extraction (GNU parallel)
```bash
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"
  ' _ {}
```

## Format Transcoding

### FLAC to Opus
```bash
ffmpeg -y -i input.flac -acodec libopus -b:a 128k output.opus
```

### FLAC to MP3
```bash
ffmpeg -y -i input.flac -acodec libmp3lame -q:a 2 output.mp3
```

### Opus to MP3 (when Opus not supported by target)
```bash
ffmpeg -y -i input.opus -acodec libmp3lame -q:a 2 output.mp3
```

### M4A to Opus
```bash
ffmpeg -y -i input.m4a -acodec libopus -b:a 128k output.opus
```

## Quality Verification

### Check Audio Bitrate
```bash
ffprobe -v quiet -show_entries format=bit_rate \
  -of default=noprint_wrappers=1:nokey=1 input.opus
```

### Check Audio Format Details
```bash
ffprobe -v quiet -show_entries stream=codec_name,sample_rate,channels,bit_rate \
  -of json input.opus
```

### Detect Clipping/Distortion
```bash
ffmpeg -i input.opus -af "volumedetect" -f null /dev/null 2>&1 | grep max_volume
# If max_volume > 0 dB, audio is clipping
```

### Check Duration
```bash
ffprobe -v quiet -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 input.opus
```

## Format Selection Guide

| 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 |

## Segment Handling

### Concatenate Audio Segments
```bash
# 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 Long Recording into Tracks
```bash
# 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"
```

## Thumbnail/Frame Extraction

### Extract Video Thumbnail (for cover art)
```bash
# 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
```

## References

- @$AIWG_ROOT/agentic/code/addons/aiwg-utils/rules/human-authorization.md — Seek explicit authorization before overwriting existing audio files
- @$AIWG_ROOT/agentic/code/frameworks/media-curator/skills/acquire/SKILL.md — Acquisition skill that invokes audio extraction via --extract-audio flag
- @$AIWG_ROOT/agentic/code/frameworks/media-curator/skills/integrity-verification/SKILL.md — Verify extracted audio file integrity after processing
- @$AIWG_ROOT/agentic/code/frameworks/media-curator/skills/metadata-tagging/SKILL.md — Tag extracted audio files with correct metadata after extraction

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.