Skip to content
Back to skills

Ffmpeg Mixing

ASecurity

Mix, trim, and concatenate video clips with ffmpeg without audio/video desync. Use when stitching generated clips into an original video, inserting scenes at timestamps, or any ffmpeg filter_complex work involving trim/concat with a continuous audio track.

  • 338 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 4, 2026
ai-agentsgobash

Works with

  • cli

Security analysis

A100/100

Scanned September 4, 2026

npx -y skills add vargHQ/sdk --skill ffmpeg-mixing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ffmpeg Mixing?

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

Security grade badge for Ffmpeg Mixing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/varghq-ffmpeg-mixing/badge)](https://www.skillsdirectory.com/skills/varghq-ffmpeg-mixing)

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
---
name: ffmpeg-mixing
description: Mix, trim, and concatenate video clips with ffmpeg without audio/video desync. Use when stitching generated clips into an original video, inserting scenes at timestamps, or any ffmpeg filter_complex work involving trim/concat with a continuous audio track.
license: MIT
metadata:
  author: vargHQ
  version: "1.0.0"
compatibility: Requires ffmpeg installed locally.
allowed-tools: Bash(ffmpeg:*) Bash(ffprobe:*) Read
---

# ffmpeg video mixing

Lessons for mixing video clips with ffmpeg while keeping audio and video in sync.

## problem: audio/video desync when mixing clips

### what went wrong

using `-ss X -t Y` to pre-trim input, then applying relative trim filters caused timing drift:

```bash
# BAD: relative timestamps after pre-trim
ffmpeg -ss 64 -t 36 -i original.mp4 ...
  -filter_complex "
    [0:v]split=5[orig1][orig2]...;
    [orig1]trim=0:4,setpts=PTS-STARTPTS[o1];
    [orig2]trim=4:11,setpts=PTS-STARTPTS[o2];
    ..."
```

this produced wrong duration (38s instead of 36s) with audio desync.

### solution: use absolute timestamps from full input

trim directly from full original using absolute timestamps:

```bash
# GOOD: absolute timestamps from full file
ffmpeg -i original.mp4 -i scene1.mp4 -i scene2.mp4 ...
  -filter_complex "
    [0:v]trim=64:68,setpts=PTS-STARTPTS[o1];
    [1:v]scale=1280:720,trim=4:6,setpts=PTS-STARTPTS[s1];
    [0:v]trim=70:75,setpts=PTS-STARTPTS[o2];
    ...
    [o1][s1][o2]...concat=n=N:v=1:a=0[outv];
    [0:a]atrim=64:100,asetpts=PTS-STARTPTS[outa]
  "
  -map "[outv]" -map "[outa]"
```

### key points

1. **absolute timestamps**: trim from full input file, not pre-trimmed
2. **separate audio handling**: use `atrim` on audio stream independently
3. **setpts reset**: always use `setpts=PTS-STARTPTS` after trim to reset timestamps
4. **scale before trim**: when mixing different resolutions, scale first then trim
5. **video duration = audio duration**: ensure total video segments match audio segment length

### example: inserting clips into original

to insert generated clips at specific timestamps while keeping continuous audio:

```bash
ffmpeg -y \
  -i original.mp4 \
  -i generated-scene.mp4 \
  -filter_complex "
    [0:v]trim=START1:END1,setpts=PTS-STARTPTS[o1];
    [1:v]scale=1280:720,trim=0:DURATION,setpts=PTS-STARTPTS[s1];
    [0:v]trim=START2:END2,setpts=PTS-STARTPTS[o2];
    [o1][s1][o2]concat=n=3:v=1:a=0[outv];
    [0:a]atrim=AUDIO_START:AUDIO_END,asetpts=PTS-STARTPTS[outa]
  " \
  -map "[outv]" -map "[outa]" \
  -c:v libx264 -preset fast -crf 18 \
  -c:a aac -b:a 192k \
  output.mp4
```

timestamps must add up: `(END1-START1) + DURATION + (END2-START2) = AUDIO_END - AUDIO_START`

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.