Skip to content

Custom Instances

The default singleton

import { ffmpeg } from "ffmpeg-kit" gives you a pre-configured singleton with sensible defaults. For most applications this is all you need.

createFFmpeg()

When you need custom configuration — different binary paths, a shorter timeout, a specific default hardware mode — create your own instance:

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

const ff = createFFmpeg({
  ffmpegPath: "/usr/local/bin/ffmpeg",
  ffprobePath: "/usr/local/bin/ffprobe",
  tempDir: "/tmp/my-app",
  defaultTimeout: 300_000,     // 5 minutes (default: 10 minutes)
  defaultHwAccel: "auto",      // default hardware acceleration mode
  logLevel: "warning",         // ffmpeg log verbosity
});

// Use exactly like the default ffmpeg singleton
await ff.extract()
  .input("video.mp4")
  .timestamp(5)
  .output("frame.png")
  .execute();

Configuration options

OptionTypeDefaultDescription
ffmpegPathstring"ffmpeg"Path to ffmpeg binary
ffprobePathstring"ffprobe"Path to ffprobe binary
tempDirstringos.tmpdir()Directory for temporary files
defaultTimeoutnumber600_000Default timeout in ms (0 = no limit)
defaultHwAccelHwAccelMode"cpu"Default hardware acceleration
logLevelFFmpegLogLevel"error"FFmpeg log verbosity

Per-operation overrides

All execute options can be overridden per call, regardless of instance defaults:

typescript
const ff = createFFmpeg({ defaultTimeout: 60_000 });

// This specific operation gets 5 minutes, not the 60s default
await ff.transform()
  .input("long-video.mp4")
  .scale({ width: 1280 })
  .output("out.mp4")
  .execute({ timeout: 300_000 });

Multiple instances

Useful when different parts of your app need different configurations:

typescript
// Fast instance for thumbnails
const thumbnailFF = createFFmpeg({
  defaultTimeout: 30_000,
  logLevel: "quiet",
});

// Full-quality instance for exports
const exportFF = createFFmpeg({
  defaultTimeout: 3_600_000, // 1 hour
  defaultHwAccel: "auto",
});

Validating the FFmpeg installation

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

const info = await validateInstallation({
  ffmpegPath: "/usr/local/bin/ffmpeg",
  ffprobePath: "/usr/local/bin/ffprobe",
});

console.log(info.ffmpegVersion);  // "7.1.0"
console.log(info.ffprobeVersion); // "7.1.0"
console.log(info.codecs);         // available codec list

Startup validation

Call validateInstallation() at app startup to fail fast if FFmpeg is missing, rather than discovering the problem when the first operation runs.

Released under the MIT License.