Skip to content

Silence Detection ​

Detect and optionally trim silent regions from audio and video files.

Quick example ​

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

// Detect silent regions
const silences = await ffmpeg.detectSilence("audio.wav", {
  threshold: -40,
  duration: 0.5,
});

console.log(silences);
// [{ start: 0, end: 1.2 }, { start: 45.3, end: 46.1 }, ...]

detectSilence() ​

Find all silent regions in a file.

Function signature ​

typescript
function detectSilence(
  input: string,
  options?: DetectSilenceOptions,
): Promise<SilenceRegion[]>;

Options ​

ParameterTypeDefaultDescription
thresholdnumber-40Silence threshold in dBFS
durationnumber0.5Minimum silence duration in seconds

Return type ​

typescript
interface SilenceRegion {
  start: number;   // start time in seconds
  end: number;     // end time in seconds
  duration: number; // = end - start
}

trimSilence() ​

Remove silent regions from a file.

Function signature ​

typescript
function trimSilence(options: TrimSilenceOptions): Promise<TrimSilenceResult>;

Options ​

ParameterTypeDefaultDescription
inputstring—Input file path
outputstring—Output file path
thresholdnumber-40Silence threshold in dBFS
durationnumber0.5Min silence duration to remove
paddingnumber0.1Silence padding to keep around speech
trimStartbooleantrueTrim silence at the start
trimEndbooleantrueTrim silence at the end
trimMiddlebooleanfalseAlso remove internal silences

Result type ​

typescript
interface TrimSilenceResult {
  outputPath: string;
  originalDuration: number;
  outputDuration: number;
  removedDuration: number;   // originalDuration - outputDuration
  silenceRegions: SilenceRegion[];
  probeResult: ProbeResult;
}

Examples ​

Trim leading and trailing silence ​

typescript
const result = await ffmpeg.trimSilence({
  input: "recording.wav",
  output: "trimmed.wav",
  threshold: -50,
  duration: 0.3,
  trimStart: true,
  trimEnd: true,
  trimMiddle: false,
});

console.log(`Removed ${result.removedDuration.toFixed(1)}s of silence`);

Remove all silences (for condensed audio) ​

typescript
const result = await ffmpeg.trimSilence({
  input: "lecture.mp3",
  output: "condensed.mp3",
  threshold: -40,
  duration: 1.0,
  padding: 0.15,
  trimMiddle: true,
});

Detect silences first, then decide ​

typescript
const silences = await ffmpeg.detectSilence("interview.wav", {
  threshold: -45,
  duration: 2.0,
});

if (silences.length > 0) {
  console.log(`Found ${silences.length} long pauses`);
  // decide whether to trim based on content
}
  • Audio — normalize loudness
  • Waveform — visualize audio amplitude