>FFmpegLab
FFmpeg Guide

Video Denoising – Complete Guide to Noise Removal

Remove grain, salt‑and‑pepper, and compression artifacts with FFmpeg's powerful denoise filters. Compare hqdn3d, nlmeans, vaguedenoiser, bm3d, and more.

Noise is the enemy of clean video. Whether it's the grain from a high‑ISO shot, the speckles from an old analog capture, or the blocky artifacts from a low‑bitrate encode, noise degrades quality, wastes bitrate, and makes your footage look amateurish.

FFmpeg has over a dozen dedicated denoise filters[reference:0]—from the fast and reliable hqdn3d to the cutting‑edge nlmeans and bm3d. But with so many options, how do you choose? The documentation lists parameters but doesn't tell you which filter to use or how to tune it.

This guide changes that. You'll learn about every major denoise filter, when to use each one, and how to get professional results.

Key takeaways

The Gap: A Dozen Filters, Almost No Guidance

FFmpeg supports multiple denoise filters[reference:4], but the documentation is sparse. The Denoise Examples page lists filters and basic commands but doesn't explain why you'd choose one over another. As the page itself admits: "This document does not offer direct recommendations for denoise video algorithm selection, since the expected quality and performance is entirely subjective and all sources differ"[reference:5].

This guide fills that gap with practical advice, real‑world examples, and performance comparisons.

The Symptom: "My Video Is Too Noisy"

You've shot footage with a smartphone at high ISO, or digitized an old VHS tape, or received a low‑bitrate MP4 from a client. The video is grainy, speckled, or blocky. You need to clean it up—but you don't want to blur away all the detail.

This is the classic denoising dilemma: remove noise without destroying detail. FFmpeg's filters give you the tools to find the right balance.

Core Concepts: Understanding Noise

Before diving into filters, it helps to understand what you're dealing with.

Types of video noise:

Denoising approaches:

Most FFmpeg denoise filters combine multiple approaches.

Denoise Filters at a Glance

Here's a quick overview of the major denoise filters in FFmpeg[reference:9]:

FilterTypeSpeedQualityBest For
hqdn3dSpatial + TemporalFastGoodAll‑around denoising
nlmeansPatch‑based (spatial)SlowExcellentHigh‑quality detail preservation[reference:10]
vaguedenoiserWavelet (spatial)SlowVery GoodFine control, wavelet denoising[reference:11]
bm3dPatch‑based (spatial)Very SlowExcellentState‑of‑the‑art quality[reference:12]
atadenoiseTemporal averagingFastGoodFast temporal denoising[reference:13]
fftdnoizFFT (spatial + temporal)SlowGoodFrequency‑domain denoising[reference:14]
dctdnoizDCT (spatial)Very SlowGoodNot designed for real time[reference:15]
owdenoiseWavelet (spatial)SlowGoodOvercomplete wavelet denoising[reference:16]
chromanrChroma onlyFastGoodColor noise reduction
removegrainSpatialFastModerateProgressive video, grain removal[reference:17]
tmedianTemporal medianMediumGoodHeavy transient artifacts[reference:18]
tmixTemporal mixingMediumModerateNoise reduction by frame mixing[reference:19]

hqdn3d – The Workhorse

hqdn3d (High Quality 3D Denoiser) is the most popular denoise filter in FFmpeg[reference:20]. It combines spatial and temporal denoising for excellent results at reasonable speed.

Syntax:

hqdn3d=luma_spatial=4.0:chroma_spatial=3.0:luma_tmp=6.0:chroma_tmp=3.0

Parameters:

Example:

ShareRenders { } Code Config
Generated Code Logs Customize
# Basic hqdn3d denoising with moderate settings
ffmpeg -i noisy.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4

This command applies moderate denoising[reference:25]. The parameters are luma_spatial:chroma_spatial:luma_tmp:chroma_tmp.

Tips:

nlmeans – The Quality Champion

nlmeans (Non‑Local Means) is widely considered one of the most advanced denoise filters[reference:26]. It works by finding similar patches across the image and averaging them—preserving edges and textures much better than simpler filters[reference:27].

Limitation: Currently limited to 8‑bit per channel formats[reference:28].

Syntax:

nlmeans=s=STRENGTH:r=PATCH_RADIUS:p=PREVIEW

Parameters:

Example:

ShareRenders { } Code Config
Generated Code Logs Customize
# nlmeans denoising with strength 30 (aggressive)
ffmpeg -i noisy.mp4 -vf "nlmeans=s=30:r=3:p=1" -c:v libx264 -crf 20 denoised.mp4

As one user noted, nlmeans is "too excellent" and can recover even bad sources like VHS video[reference:30].

Tips:

vaguedenoiser – Wavelet Precision

vaguedenoiser applies a wavelet‑based denoiser using the Cohen‑Daubechies‑Feauveau 9/7 wavelet[reference:35]. It transforms each frame into the wavelet domain, filters coefficients, and inverse transforms[reference:36].

Note: Requires FFmpeg to be compiled with --enable-libvidstab[reference:37].

Syntax:

vaguedenoiser=threshold=THRESHOLD:method=METHOD:nsteps=NSTEPS:percent=PERCENT:planes=PLANES:type=TYPE

Parameters:

Example:

ShareRenders { } Code Config
Generated Code Logs Customize
# vaguedenoiser with moderate threshold
ffmpeg -i noisy.mp4 -vf "vaguedenoiser=threshold=22:percent=100:nsteps=4" -c:v libx264 -crf 20 denoised.mp4

This applies wavelet denoising with a threshold of 22 and 4 decomposition levels[reference:44].

Tips:

bm3d – State of the Art

bm3d (Block‑Matching 3D) is one of the most advanced denoising algorithms available[reference:49]. It works by finding similar blocks in the image, grouping them into 3D stacks, applying collaborative filtering, and aggregating the results[reference:50].

Syntax:

bm3d=sigma=SIGMA:block=BLOCK:bstep=BSTEP:group=GROUP:range=RANGE:mstep=MSTEP:thmse=THMSE:hdthr=HDTHR:estim=ESTIM:planes=PLANES

Parameters:

Example:

ShareRenders { } Code Config
Generated Code Logs Customize
# bm3d denoising with sigma 30
ffmpeg -i noisy.mp4 -vf "bm3d=sigma=30:block=4:bstep=2:group=1:estim=basic" -c:v libx264 -crf 20 denoised.mp4

This applies BM3D denoising with a sigma of 30[reference:56]. BM3D is extremely slow but delivers state‑of‑the‑art quality[reference:57].

atadenoise – Fast & Adaptive

atadenoise (Adaptive Temporal Averaging Denoiser) is one of the fastest denoise filters[reference:58]. It works by averaging pixels across multiple frames, adapting to motion to avoid ghosting.

Syntax:

atadenoise=0a=THRESHOLD_A:0b=THRESHOLD_B:1a=THRESHOLD_A:1b=THRESHOLD_B:2a=THRESHOLD_A:2b=THRESHOLD_B

Parameters:

Example:

ShareRenders { } Code Config
Generated Code Logs Customize
# atadenoise with default settings
ffmpeg -i noisy.mp4 -vf "atadenoise" -c:v libx264 -crf 20 denoised.mp4

With default parameters, atadenoise is a great starting point for fast denoising[reference:61].

fftdnoiz – Frequency Domain

fftdnoiz applies denoising using a 3D Fast Fourier Transform[reference:62]. "3D" means it considers both spatial and temporal dimensions[reference:63].

Syntax:

fftdnoiz=SIGMA:BLOCK:OVERLAP:PRECISION

Parameters:

Example:

ShareRenders { } Code Config
Generated Code Logs Customize
# fftdnoiz with sigma 30
ffmpeg -i noisy.mp4 -vf "fftdnoiz=30:1:6:0.8" -c:v libx264 -crf 20 denoised.mp4

Warning: fftdnoiz can introduce ringing artifacts with bad settings[reference:65]. Start with lower sigma values (5‑9) and increase gradually[reference:66].

Other Denoise Filters

chromanr

Reduces chrominance (color) noise only. Useful when luma is clean but color is noisy[reference:67].

ffmpeg -i noisy.mp4 -vf "chromanr" -c:v libx264 -crf 20 denoised.mp4

removegrain

Spatial denoiser for progressive video[reference:68]. Fast but can blur edges.

ffmpeg -i noisy.mp4 -vf "removegrain=4" -c:v libx264 -crf 20 denoised.mp4

Users have reported success chaining multiple removegrain filters[reference:69].

tmedian

Temporal median filter—picks the median pixel from several frames[reference:70]. Good for heavy transient artifacts[reference:71].

ffmpeg -i noisy.mp4 -vf "tmedian=radius=3" -c:v libx264 -crf 20 denoised.mp4

tmix

Reduces noise by mixing successive video frames[reference:72].

ffmpeg -i noisy.mp4 -vf "tmix=frames=5" -c:v libx264 -crf 20 denoised.mp4

owdenoise

Overcomplete wavelet denoiser[reference:73]. Similar to vaguedenoiser but uses a different wavelet transform[reference:74].

ffmpeg -i noisy.mp4 -vf "owdenoise=8:6:6" -c:v libx264 -crf 20 denoised.mp4

dctdnoiz

2D DCT‑based denoiser[reference:75]. Extremely slow and not designed for real time[reference:76].

ffmpeg -i noisy.mp4 -vf "dctdnoiz=sigma=30:n=4" -c:v libx264 -crf 20 denoised.mp4

Practical Example: Denoising Pipeline

For the best results, combine denoising with sharpening:

ShareRenders { } Code Config
Generated Code Logs Customize
# Professional denoising pipeline: denoise → sharpen
ffmpeg -i noisy.mp4 -vf "hqdn3d=4:3:6:4.5,unsharp=5:5:1.0:5:5:0.0" -c:v libx264 -crf 18 -preset slow denoised_sharp.mp4

For high‑quality denoising with nlmeans:

ShareRenders { } Code Config
Generated Code Logs Customize
# High-quality denoising with nlmeans + unsharp
ffmpeg -i noisy.mp4 -vf "nlmeans=s=10:r=3:p=1,unsharp=5:5:1.0:5:5:0.0" -c:v libx264 -crf 18 -preset slow denoised_high_quality.mp4

Performance Comparison

Based on real‑world testing, here's how the filters compare for a 10‑second 1080p clip on a modern CPU[reference:77]:

FilterRelative SpeedQualityNotes
atadenoiseFastestGoodExcellent for fast workflows
hqdn3dVery FastGoodBest all‑rounder
removegrainFastModerateSimple spatial denoising
tmedianMediumGoodGood for transient artifacts
vaguedenoiserSlowVery GoodWavelet precision
fftdnoizSlowGoodCan cause ringing
nlmeansSlowExcellent8‑bit only
owdenoiseSlowGoodWavelet denoising
bm3dVery SlowExcellentState‑of‑the‑art
dctdnoizExtremely SlowGoodNot for real‑time

As noted in the FFmpeg wiki, "these comparisons and values are not recommendations, but are to demonstrate how algorithm and options selection can have a major impact on performance"[reference:78].

Debugging Common Issues

Here are the most common denoising problems and how to fix them.

ProblemLikely CauseFix
Too much blur Spatial strength too high Reduce spatial parameters; increase temporal instead[reference:79]
Ghosting / trailing Temporal strength too high for fast motion Reduce temporal parameters; use atadenoise which adapts to motion
Ringing artifacts Frequency‑domain filter too aggressive Reduce sigma in fftdnoiz[reference:80]; use wavelet or patch‑based filters
Color bleeding Chroma parameters too high Reduce chroma_spatial and chroma_tmp in hqdn3d; use chromanr separately
No visible effect Strength values too low Increase parameters gradually until effect is visible
Processing is extremely slow Using nlmeans, bm3d, or dctdnoiz Switch to hqdn3d or atadenoise for faster results

Pro tip: As one user noted, "I always use unsharp to sharpen the image after nlmeans"[reference:81]. Denoising always removes some detail—sharpening helps restore it.

Visualize Denoising with the FFmpegLab IDE

Denoising is much easier to tune with visual feedback. The FFmpegLab IDE lets you:

Here's how denoising tuning looks in the FFmpegLab IDE.

ShareRenders { } Code Config
Generated Code Logs Customize
🎬 Filter: hqdn3d 📊 Luma S: 4.0 | Chroma S: 3.0 | Luma T: 6.0 | Chroma T: 4.5 ✅ Denoising active
📷 Before
● Noise level: 42%
✨ After
● Noise level: 8%
[info]
Denoising applied: 34% noise reduction
Sharpness preserved: 92%
Processing time: 14ms/frame
# Visual denoising preview
# Adjust sliders → see results in real time
🎬 hqdn3d denoising 📊 Noise reduction: 34% ✅ Preview active

The IDE shows you exactly what's happening—the original frame, the denoised result, and metrics like noise reduction percentage. You can adjust parameters with sliders and see the results in real time.

Frequently Asked Questions (FAQ)

What is the best denoise filter in FFmpeg?

There's no single "best" filter—it depends on your source and needs. For high‑quality results, nlmeans and bm3d are excellent but slow. For fast denoising, hqdn3d and atadenoise work well. For fine‑tuning, vaguedenoiser offers wavelet‑based control[reference:82]. Test each on a short clip to see which works best for your content.

How do I denoise video in FFmpeg without losing detail?

Start with low strength values and increase gradually. For hqdn3d, try luma_spatial=4.0:chroma_spatial=3.0[reference:83]. For nlmeans, start with s=4.0. Always preview on a short clip before processing the full video. You can also pair denoising with unsharp to restore some sharpness[reference:84].

Which FFmpeg denoise filter is fastest?

atadenoise is generally the fastest among dedicated denoise filters[reference:85]. hqdn3d is also relatively fast[reference:86]. nlmeans, bm3d, and vaguedenoiser are significantly slower[reference:87], with dctdnoiz being extremely slow and not designed for real‑time use[reference:88].

Can I denoise 10-bit/HDR video with FFmpeg?

Yes. Most denoise filters support high bit depths. nlmeans is currently limited to 8‑bit formats[reference:89], but hqdn3d, vaguedenoiser, bm3d, and others work with 10‑bit and higher. Check the filter documentation for specific format support.

How do I remove only chroma noise (color noise)?

Use the chromanr filter for chrominance noise reduction[reference:90]. Alternatively, use the planes parameter to target only chroma planes: hqdn3d=0:0:4:3 (luma strength 0, chroma spatial 4, chroma temporal 3).

Why does my denoised video look blurry?

Denoising always removes some detail—that's the trade‑off for removing noise[reference:91]. Try reducing the strength parameters, using more temporal (less spatial) denoising, or adding an unsharp filter after denoising to restore sharpness[reference:92].

Final Word

Video denoising is one of FFmpeg's most powerful—and most complex—capabilities. With over a dozen dedicated filters, you have the tools to clean up almost any noisy footage.

The key is understanding the trade‑offs: hqdn3d for speed and reliability, nlmeans and bm3d for quality, vaguedenoiser for wavelet precision, and atadenoise for fast temporal denoising.

With the FFmpegLab IDE's visual feedback, you can experiment, debug, and perfect your denoising settings without the guesswork. Adjust parameters with sliders, preview the results in real time, and export the exact command you need.

Next time you're facing noisy footage, reach for FFmpeg's denoise filters. Your viewers will thank you.

✦  Fresh from the render queue

Better FFmpeg workflows, delivered.

Get practical commands, new templates, and deep-dive guides for the edits that are usually hardest to get right.

✓  Copy-pasteable commands    ✓  Editor templates    ✓  No noise
One useful email at a time.