Skip to content

Concat

Join multiple video or audio clips into a single output, with optional transitions.

Quick example

typescript
import { ffmpeg } from "ffmpeg-kit";

await ffmpeg.concat()
  .addClip("clip1.mp4")
  .addClip("clip2.mp4")
  .addClip("clip3.mp4")
  .output("joined.mp4")
  .execute();

API

.addClip(clip)

Add a clip to the concat sequence.

ParameterTypeDescription
clipstring | ClipOptionsFile path or options object

ClipOptions:

FieldTypeDescription
pathstringFile path
trimStartnumber | stringStart offset in the clip
trimEndnumber | stringEnd offset in the clip
durationnumberDuration to use from the clip

.defaultTransition(options)

Apply the same transition between all clips.

ParameterTypeDescription
type"xfade" | "none"Transition type
durationnumberTransition duration in seconds
effectXfadeEffectFFmpeg xfade effect name

.transition(index, options)

Apply a transition between specific clips (0 = between clip 0 and clip 1).

.normalizeResolution(width, height)

Scale all clips to the specified resolution before joining. Prevents concat failures when clips have different resolutions.

.output(path)

Output file path. Required.

Examples

Simple concat (no re-encode)

When all clips have the same codec, resolution, and frame rate, concat is fast and lossless:

typescript
await ffmpeg.concat()
  .addClip("intro.mp4")
  .addClip("main.mp4")
  .addClip("outro.mp4")
  .output("final.mp4")
  .execute();

With crossfade transitions

typescript
await ffmpeg.concat()
  .addClip({ path: "clip1.mp4" })
  .addClip({ path: "clip2.mp4" })
  .addClip({ path: "clip3.mp4" })
  .defaultTransition({ type: "xfade", duration: 0.5, effect: "fade" })
  .output("with-transitions.mp4")
  .execute();

Mixed resolution clips

typescript
await ffmpeg.concat()
  .addClip("4k-clip.mp4")
  .addClip("1080p-clip.mp4")
  .normalizeResolution(1920, 1080)
  .output("normalized.mp4")
  .execute();

Trim clips during concat

typescript
await ffmpeg.concat()
  .addClip({ path: "long.mp4", trimStart: "00:01:00", duration: 30 })
  .addClip({ path: "other.mp4", trimStart: 5, trimEnd: 25 })
  .output("combined.mp4")
  .execute();

Result type

typescript
interface ConcatResult {
  outputPath: string;
  duration: number;
  clipCount: number;
  size: number;
  probeResult: ProbeResult;
}
  • Transform — trim and scale individual clips
  • Export — re-encode after concat

Released under the MIT License.