← Home
GLOSSARY

Published · Updated

Silence Detection

Silence detection is the automatic identification of spans in an audio track where the signal stays below a loudness threshold for at least a minimum duration. It is defined by three numbers: a threshold, usually expressed in dBFS, that decides what counts as quiet; a minimum duration that stops brief dips being reported as silence; and a padding value that leaves a margin of audio around the speech on either side of the span. Crucially it measures level, not speech — a pause recorded over a fan, a music bed or game audio never crosses the threshold at all, which is why serious implementations locate gaps between words in a transcript rather than, or alongside, testing the waveform.

The Three Numbers

Every silence detector, from a 20-line script to a commercial NLE, is the same algorithm with different names on the parameters. Understand the three and you can tune any of them.

1. Threshold — how quiet counts as quiet

Measured in dBFS (decibels relative to full scale), where 0 dBFS is the loudest a digital sample can be and everything real is negative. −60 dBFS is an amplitude ratio of 0.001; −35 dBFS is about 0.018. The threshold has to sit above the file's noise floor and below its quietest speech. That window is what makes the number a property of the recording rather than a preference.

2. Minimum duration — how long it has to stay there

Without this, a detector fires between every syllable. Natural speech is full of sub-second silence: the closure of a stop consonant is 50–100 ms of it, and a sentence-internal breath is 200–500 ms. Anything below roughly 200 ms is inside phonetics, not inside editing. ffmpeg defaults to a deliberately conservative 2 seconds; an editing pass usually wants 0.4–0.8 s.

3. Padding — how much you give back

The margin left on each side of the detected span so the cut lands in the pause rather than against the speech. Padding is the parameter people forget exists, and it is the one that decides whether the result sounds edited or sounds broken. 100–250 ms per side is the workable range for speech.

Here is what the numbers actually are, across the implementations most tools are built on:

ImplementationThresholdMinimum durationPadding
ffmpeg silencedetect−60 dBFS (0.001 amplitude)2.0 snone — reports, never cuts
ffmpeg silenceremove0 amplitude — exact digital silence0 sstart_silence / stop_silence
pydub split_on_silence−16 dBFS1000 ms100 ms kept
Silero VAD0.5 speech probability, ends at 0.35100 ms of silence30 ms
faster-whisper VAD0.5 speech probability2000 ms of silence400 ms
Valmera (waveform pass)−35 dBFS0.6 s0.12 s each side on the cut

Two of those defaults are traps. pydub's −16 dBFS is close to normal speech level, so on a typical recording it classifies most of the file as silence — it is a placeholder, not a recommendation. And silenceremove's thresholds default to 0 amplitude, which means exact digital silence: run it without arguments on a real recording and it removes nothing, which reads as a broken filter rather than an unset parameter.

How the Measurement Actually Works

A detector does not evaluate individual samples. It slides a short window over the signal, reduces each window to one number, and compares that number to the threshold. ffmpeg's silenceremove uses a 20 ms window by default and, since FFmpeg 7, an rms detection mode rather than peak. That choice matters more than it looks: peak takes the largest sample in the window, so one stray transient — a mouse click, a chair creak — keeps a two-second pause from ever being reported. RMS takes the root mean square, which tracks energy over the window and is much closer to what a listener would call loudness.

A single fixed threshold also chatters. When the signal hovers right at the boundary, the state flips open and closed dozens of times a second and you get a shredded list of 30 ms silences. The standard fix is hysteresis: two thresholds instead of one, with a band between them where nothing changes. Silero VAD does this explicitly — speech opens at a probability of 0.5 and does not close until the probability falls below 0.35 (threshold − 0.15), so the boundary is stable instead of oscillating. Gate designers call the same idea attack, hold and release.

The deeper limitation is that energy is not speech. Level-based detection cannot distinguish a quiet sibilant from room tone at the same level, and cannot distinguish a pause over a music bed from someone talking. Classifiers close that gap by looking at the shape of the signal rather than its size — historically the zero-crossing rate, which is high for the unvoiced fricatives that energy detection keeps losing, and today a small neural VAD scoring 30 ms frames. The most reliable method for edited speech skips both and reads the gaps between word-level timestamps from a transcript, because a gap between two recognised words is a gap in the talking, whatever else is on the track.

Why Naive Silence Removal Clips Breaths and Consonants

The failure has a physical cause, and it is not fixable by tuning. English phonemes span an enormous dynamic range: the difference between the strongest vowel and the weakest voiceless fricative is roughly 27–28 dB — the vowel carries several hundred times the energy of the "th" in thin. A threshold placed a safe few dB above a −45 dBFS room floor therefore sits above a good part of your consonant inventory.

Trailing fricatives get eaten

A word ending in /s/, /f/, /θ/ or /ʃ/ decays under the threshold before it has finished. Cut at the threshold crossing and plans becomes plan, enough loses its ending, and every plural in the video sounds subtly wrong in a way viewers notice without being able to name.

Stop consonants contain real silence

/p/, /t/, /k/, /b/, /d/ and /g/ are produced by sealing the vocal tract, and that closure is genuinely silent for roughly 50–100 ms before the burst. Word-initial voiceless stops in English then add 30–100 ms of aspiration before voicing starts. Set a minimum duration of 50 ms and your detector will confidently report silence in the middle of important.

Breaths carry timing information

An inhale is 200–500 ms of low-level noise, and it is one of the strongest cues a listener has that a new thought is starting. Strip every one and the result is the airless, gasping quality of over-auto-edited video: technically shorter, considerably harder to listen to.

The noise floor jumps at the splice

This one has nothing to do with speech. Butting two ranges of a noisy room against each other creates a discontinuity in the ambience — an audible tick or a pump at every junction, and the more cuts you make the more of them there are. Film sound solves it by recording 30–60 seconds of room tone and laying it under the gaps. Padding mitigates it; a short audio crossfade or room-tone fill removes it.

And the picture pays for the audio

Each removed pause is a splice inside what was one continuous shot, so a tight pass on a static talking-head produces a run of jump cuts. That is a normal, accepted look on YouTube; it is still a decision, and it is why cutaways to b-roll or a punch-in exist.

What a Good Implementation Preserves

  • Word boundaries, not threshold crossings. The single largest quality win. If word timestamps exist, move every cut boundary outward to the nearest word edge; a whole word either survives or it does not, and the clipped-consonant failure disappears entirely.
  • Asymmetric padding. A phrase ends by decaying into room reverb and wants more margin; the next phrase starts abruptly and needs less. Most tools expose one number for both sides, which is a simplification rather than a truth.
  • A floor on how little it will remove. Cutting 80 ms saves nothing and disturbs the rhythm of the sentence. If padding has reduced a span below that floor, the honest answer is to leave it alone.
  • Hysteresis. Two thresholds so the detector cannot chatter along the boundary and produce dozens of unusable fragments.
  • Disclosure when the gap was not actually quiet. A pause over game audio or a music bed is still cuttable, but cutting it removes that sound too. A tool that reports it as "silence removed" is describing something that did not happen.
  • Reversibility. The cut should be a range subtracted from an edit decision list, not bytes deleted from a file, so a threshold that turned out to be too aggressive is a setting you change rather than a take you re-record.

Notice that only the last two are engineering choices. The first four are all versions of the same instruction: stop treating the audio as a level and start treating it as speech.

A Scenario Where It Shows

You record a 22-minute software tutorial at your desk. A laptop fan runs the whole time and puts the room floor at about −44 dBFS. You run silencedetect at its defaults and it reports nothing at all, because the signal never spends two continuous seconds below −60 dBFS. The file looks, to the tool, like 22 minutes of uninterrupted sound.

So you raise the tolerance to −30 dB and shorten the duration to 0.4 s. Now it finds 180 spans — and the export is worse than the original. The fan is gone from the pauses, which makes the ambience pump at every one of the 180 splices. Half your plurals have lost their /s/. The pause you actually wanted gone, the eleven-second stretch where you were reading the error message on screen, was not found, because you were mousing around and the clicks kept the level up.

Nothing about that is a tuning problem. There is no threshold between −44 and your quietest consonants, because your quietest consonants are down there with the fan. The only move that works is to change the question: find the spans where nobody was talking using the transcript's word timings, keep 120 ms either side, snap the boundaries to whole words, and leave the fan noise continuous underneath.

Common Misconceptions

"Silence detection finds pauses."

It finds quiet. A pause and a quiet passage are the same thing only in a treated room. Over music, gameplay, traffic or a fan they are unrelated, and the detector will report zero silences in a recording containing minutes of nobody speaking.

"Just lower the threshold until it works."

There are two failure directions and you are between them. Too low and nothing is detected; too high and it starts eating consonants and word tails. On a noisy recording the safe window can be empty, and no value satisfies both constraints — which is a signal to change method, not to keep turning the dial.

"Silence means the samples are zero."

Digital silence is all-zero samples and is essentially never present in a real recording. Perceptual silence is anything below the point where a listener stops hearing content. ffmpeg has both behaviours in the same toolbox: silencedetect defaults to the perceptual reading at −60 dBFS, while silenceremove defaults to the literal one at 0 amplitude.

"Minimum duration is a taste setting."

Above about 300 ms it is. Below 200 ms it is a phonetics setting, because that is the region where stop closures and inter-syllabic gaps live. A minimum duration of 50 ms is not an aggressive edit; it is a detector that has been pointed at the wrong thing.

"Removing more silence makes a video tighter."

Up to a point. Pauses are the punctuation of speech — they mark clause boundaries and give a listener room to keep up. Past the sentence-boundary pauses you are not removing dead air, you are removing structure, and the result is shorter and harder to watch. The measurable win is in the multi-second stalls and restarts, not in the last 200 ms of every gap.

"VAD and silence detection are interchangeable."

They answer different questions — "is someone speaking?" versus "is it quiet?" — and they agree only on clean speech in a quiet room. That agreement is exactly why the distinction gets missed, and exactly why tools built on the level test surprise people the first time they open a noisy file.

How This Works in Valmera

Valmera is an agentic video editor, so silence removal is something the agent performs rather than a slider you set. It runs both detections and treats them as different measurements, because they are:

  • A waveform pass at upload. Every video is indexed once with ffmpeg's silencedetect at −35 dBFS over a minimum of 0.6 s. The threshold is well above ffmpeg's default on purpose: real uploads are phones and laptops in real rooms, and a −60 dBFS gate finds nothing in them.
  • Speech gaps as the primary basis. What the agent actually cuts are the spans between recognised words in the word-level transcript. That works on a gameplay clip or a video with a music bed, where the waveform never drops and the level test correctly reports nothing.
  • Defaults of 0.5 s and 0.12 s. The one-call cut removes gaps of half a second or longer and keeps 120 ms of breathing room on each side. Both are arguments, so "only the really long pauses" and "tighter" are things you can just say.
  • Boundaries snap outward to whole words. If a cut edge lands inside a word, it moves to that word's start or end. This is the mechanism that makes the clipped-consonant failure structurally impossible rather than merely unlikely.
  • It reports when a gap was not quiet. Each gap is scored for how much of it is also below the noise floor. When the agent cuts pauses that had music or game audio in them, it says so instead of calling them silences — you were about to notice at the first junction anyway.
  • Nothing is deleted. The cut is a range subtracted from a keep list in the edit decision list; the original upload is untouched and anything cut can be restored by asking.

The honest limits. Padding is a single symmetric value, not separate lead-in and lead-out. Cuts are hard splices — Valmera has no true crossfade or dissolve and does no room-tone fill, so on a genuinely noisy recording you will hear the floor change at a junction, and padding is the only mitigation. Gap detection is only as good as the transcription underneath it, and English is the best-tested path. And a video with no speech at all and continuous audio has nothing this method can call a silence — in that case the agent says so and asks which parts to keep, rather than guessing pauses from the picture. The full behaviour of find_silences and cut_silences is published in the tool reference.

Related Terms

Other entries in the Valmera video editing glossary that touch this one:

  • Word-level timestamps The clock a good silence cut snaps to — a word edge is a real boundary, a threshold crossing is not.
  • Transcription and ASR Where those word timings come from, and the ceiling on how well speech gaps can be found.
  • Edit decision list Where a removed pause actually lives: a range subtracted from a keep list, restorable at any time.
  • Jump cut What silence removal produces at every junction — the visual bill for the audio tightening.
  • B-roll The standard cover for the jump cuts a silence pass leaves behind.
  • J-cut and L-cut Letting picture and audio cut at different points, which softens a hard splice a straight silence cut cannot.
  • LUFS and loudness normalization The other level measurement — and it runs its own absolute gate at −70 LUFS for related reasons.
  • Text-based video editing Deleting a pause by deleting it from the transcript, which is silence detection with a different interface.

Frequently Asked Questions

Silence detection is the automatic identification of spans in an audio track where the signal stays below a loudness threshold for at least a minimum duration. It is defined by three numbers: a threshold, usually expressed in dBFS, that decides what counts as quiet; a minimum duration that stops brief dips being reported as silence; and a padding value that leaves a margin of audio around the speech on either side of the span. Crucially it measures level, not speech — a pause recorded over a fan, a music bed or game audio never crosses the threshold at all, which is why serious implementations locate gaps between words in a transcript rather than, or alongside, testing the waveform.
There is no universally correct value, because the right threshold is a property of the recording, not of your taste. It has to sit above the noise floor of that specific file and below the quietest speech in it. ffmpeg's silencedetect defaults to −60 dBFS, which suits a treated booth — the ACX audiobook spec requires a noise floor below −60 dBFS RMS — but a phone or laptop recorded at a desk typically has room tone around −45 dBFS, and a −60 dBFS gate will find nothing at all in it. Measure the noise floor of a passage where nobody is speaking, then set the threshold a few dB above it. If that value lands within about 10 dB of your quietest consonants, no threshold will work and you should be detecting speech instead of level.
Because consonants are much quieter than vowels and level-based detection cannot tell the difference. The strongest and weakest phonemes in English differ by roughly 27–28 dB — an open vowel carries several hundred times the energy of a voiceless fricative like the 'th' in 'thin'. So a threshold set just above the room floor sits above the trailing /s/ in 'plans' or the /f/ in 'enough', and the detector calls the tail of the word silence. Cut there and the word is clipped. Stop consonants make it worse: /p/, /t/, /k/, /b/, /d/ and /g/ each contain a genuine closure interval of roughly 50–100 ms of near-silence before the burst, so real silence exists inside words as well as between them.
Padding is the margin of audio kept on each side of a detected silence so that the cut lands away from the speech rather than against it. Published defaults vary by more than an order of magnitude — Silero VAD pads 30 ms, pydub keeps 100 ms, faster-whisper's VAD pads 400 ms — because they are solving different problems: a transcription front end pads generously to avoid losing context, while an editing tool pads to avoid an audible clip. For editing speech, 100–250 ms per side is the workable range. The two sides are not really symmetrical: a phrase ends by decaying into room reverb and wants more, while the next phrase starts abruptly and needs less.
No, and the difference is the whole point. Silence detection answers 'is this quiet?' by measuring level. Voice activity detection answers 'is someone speaking?' by classifying the signal, usually with a neural model such as Silero. They agree on a clean talking-head recorded in a quiet room, which is why the distinction is easy to miss. They disagree exactly where it matters: over a music bed, gameplay or street noise, the audio never goes quiet, so silence detection reports nothing while VAD correctly finds the gaps. Anything derived from a transcript with word-level timestamps behaves like VAD, because the gaps between words are gaps in speech rather than dips in level.
Almost always because there is a continuous noise floor above −60 dBFS — a fan, an air conditioner, traffic, a music bed, or the microphone's own self-noise on a hot preamp — so the signal never drops below the default tolerance for the default two seconds. Raise the tolerance and shorten the duration to look, for example silencedetect=n=-35dB:d=0.5, and inspect what it reports before cutting anything. If the file has music or game audio under the whole thing, no threshold will work and you need a speech-based method. Note also that silencedetect only logs silence_start and silence_end to stderr; the filter that actually removes them is silenceremove, whose start_threshold and stop_threshold both default to 0 amplitude, meaning it only strips exact digital silence unless you set them.
No. Pauses are the punctuation of speech: they mark clause boundaries, signal that a point has landed, and give a listener somewhere to catch up. Removing all of them produces the airless, breathless quality that makes heavily auto-edited videos exhausting after about ninety seconds. In practice, cut the dead air — the multi-second stalls, the restarts, the pause while you look at your notes — and keep the sentence-level pauses and most of the breaths. There is also a picture cost: every removed pause is a splice in what was one continuous shot, so a tight silence pass on a static talking head turns into a run of jump cuts, which is why editors cover them with b-roll or a punch-in.

Cut the Dead Air Without Cutting the Consonants

Upload real footage and say how long a pause has to be before it goes. Cuts snap to word edges, and anything removed can be restored. 50 free credits, no card.

Start free →
See pricing →

Related Articles

Remove Silence from Video
The tool page: describe the pause length you want gone and the agent cuts it, snapped to word edges.
Cuts, Silence & Filler Removal
How ranges leave the keep list, what padding does to the result, and how to put any of it back.
Remove Filler Words
The other half of a cleanup pass — ums and uhs cut from real word timestamps, not estimates.
Auto-Edit a Podcast Video
Silence, fillers and captions in one request, sequenced so captions time against the edit.