ffmpeg-media-recipeslisted
Install: claude install-skill Mixard/fable-pack
# FFmpeg Media Recipes
## Cutting and Assembly
Extract a segment by timestamp (stream copy, no re-encode; cuts snap to keyframes):
```bash
ffmpeg -i raw.mp4 -ss 00:12:30 -to 00:15:45 -c copy segment_01.mp4
```
Batch cut from an edit decision list (`cuts.txt` lines: `start,end,label`):
```bash
while IFS=, read -r start end label; do
ffmpeg -i raw.mp4 -ss "$start" -to "$end" -c copy "segments/${label}.mp4"
done < cuts.txt
```
Concatenate segments (same codec/params required for `-c copy`):
```bash
for f in segments/*.mp4; do echo "file '$f'"; done > concat.txt
ffmpeg -f concat -safe 0 -i concat.txt -c copy assembled.mp4
```
## Preprocessing
Proxy for faster editing:
```bash
ffmpeg -i raw.mp4 -vf "scale=960:-2" -c:v libx264 -preset ultrafast -crf 28 proxy.mp4
```
Extract audio for transcription (16 kHz mono-friendly PCM):
```bash
ffmpeg -i raw.mp4 -vn -acodec pcm_s16le -ar 16000 audio.wav
```
Loudness normalization (EBU R128; `I` target integrated loudness in LUFS, `TP` true peak in dBTP, `LRA` loudness range):
```bash
ffmpeg -i segment.mp4 -af loudnorm=I=-16:TP=-1.5:LRA=11 -c:v copy normalized.mp4
```
`I=-16` suits spoken-word/podcast delivery; streaming platforms commonly target -14.
## Aspect-Ratio Reframing
| Platform | Aspect | Resolution |
|----------|--------|------------|
| YouTube | 16:9 | 1920x1080 |
| TikTok / Reels / Shorts | 9:16 | 1080x1920 |
| Instagram feed | 1:1 | 1080x1080 |
| X / Twitter | 16:9 or 1:1 | 1280x720 or 720x720 |
Center crops (c