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
- Denoising is destructive—it irreversibly modifies your video[reference:1]. Always test on a short clip first.
- hqdn3d is the best all‑rounder: fast, effective, and easy to tune.
- nlmeans and bm3d deliver the highest quality but are significantly slower[reference:2].
- vaguedenoiser offers wavelet‑based precision with fine control.
- atadenoise is the fastest option for temporal noise reduction.
- Always preview—what looks good on a desktop may look terrible on a TV with built‑in denoising[reference:3].
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:
- Gaussian noise — random variations in brightness and color. Common in low‑light footage.
- Salt‑and‑pepper noise — random white and black pixels. Common in old digitizations.
- Compression artifacts — blocky, mosquito noise from low‑bitrate encoding.
- Film grain — natural texture from analog film (sometimes desirable).
- Chroma noise — color noise in the chrominance channels.
Denoising approaches:
- Spatial denoising — looks at individual frames, averaging neighboring pixels. Good for static noise but can blur edges.
- Temporal denoising — looks across multiple frames, averaging over time. Excellent for removing random noise without blurring[reference:6].
- Frequency‑domain denoising — transforms the image to the frequency domain (FFT, DCT, wavelet) and filters out high‑frequency noise[reference:7].
- Patch‑based denoising — finds similar patches across the image (nlmeans, bm3d) for state‑of‑the‑art results[reference:8].
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]:
| Filter | Type | Speed | Quality | Best For |
|---|---|---|---|---|
| hqdn3d | Spatial + Temporal | Fast | Good | All‑around denoising |
| nlmeans | Patch‑based (spatial) | Slow | Excellent | High‑quality detail preservation[reference:10] |
| vaguedenoiser | Wavelet (spatial) | Slow | Very Good | Fine control, wavelet denoising[reference:11] |
| bm3d | Patch‑based (spatial) | Very Slow | Excellent | State‑of‑the‑art quality[reference:12] |
| atadenoise | Temporal averaging | Fast | Good | Fast temporal denoising[reference:13] |
| fftdnoiz | FFT (spatial + temporal) | Slow | Good | Frequency‑domain denoising[reference:14] |
| dctdnoiz | DCT (spatial) | Very Slow | Good | Not designed for real time[reference:15] |
| owdenoise | Wavelet (spatial) | Slow | Good | Overcomplete wavelet denoising[reference:16] |
| chromanr | Chroma only | Fast | Good | Color noise reduction |
| removegrain | Spatial | Fast | Moderate | Progressive video, grain removal[reference:17] |
| tmedian | Temporal median | Medium | Good | Heavy transient artifacts[reference:18] |
| tmix | Temporal mixing | Medium | Moderate | Noise 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:
luma_spatial— Spatial denoising strength for luma (brightness). Default 4.0.[reference:21]chroma_spatial— Spatial denoising strength for chroma (color). Default 3.0.[reference:22]luma_tmp— Temporal denoising strength for luma. Default 6.0.[reference:23]chroma_tmp— Temporal denoising strength for chroma. Default 3.0.[reference:24]
Example:
# 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:
- Start with
4:3:6:4.5and adjust up or down. - For very noisy footage, try
6:4:8:6. - To denoise only luma (leaving color untouched), set chroma parameters to 0:
hqdn3d=4:0:6:0. - To denoise only chroma (color noise), set luma parameters to 0:
hqdn3d=0:3:0:4.5.
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:
s— Denoising strength. Default 1.0, range 1.0–30.0.[reference:29]r— Patch radius. Default 3.p— Preview mode (0=off, 1=on).
Example:
# 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:
- Start with
s=4for light denoising,s=10for moderate,s=20-30for aggressive[reference:31][reference:32]. p=1enables preview mode—useful for testing.- For best results, pair with
unsharpto restore sharpness:nlmeans=s=10:r=3,unsharp=5:5:1.0:5:5:0.0[reference:33]. nlmeansis significantly slower thanhqdn3d[reference:34].
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:
threshold— Filtering strength. Higher = more filtering. Default 2.[reference:38]method—hard,soft, orgarrote(default)[reference:39].nsteps— Wavelet decomposition levels. Default 6[reference:40].percent— Percentage of full denoising. Default 85[reference:41].planes— Which planes to process. Default all[reference:42].type—universal(default) orbayes[reference:43].
Example:
# 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:
method=garrote(default) is a good balance between soft and hard thresholding[reference:45].nstepsvalues above 6 may not improve results much[reference:46].percent=100applies full denoising; lower values apply partial[reference:47].type=bayescan be more adaptive thanuniversal[reference:48].
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:
sigma— Denoising strength. Default 1, range 0–999.9.[reference:51]block— Block size. Default 4.[reference:52]bstep— Block step. Default 2.[reference:53]group— Group size. Default 1.[reference:54]estim— Estimation mode:basicorfinal[reference:55].
Example:
# 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:
0a— Threshold A for plane 0 (luma)[reference:59]0b— Threshold B for plane 0 (luma)[reference:60]1a— Threshold A for plane 1 (chroma)1b— Threshold B for plane 1 (chroma)
Example:
# 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:
sigma— Denoising strength. Typical values 5‑9.[reference:64]block— Block size.overlap— Overlap between blocks.precision— Calculation precision.
Example:
# 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:
# 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:
# 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]:
| Filter | Relative Speed | Quality | Notes |
|---|---|---|---|
| atadenoise | Fastest | Good | Excellent for fast workflows |
| hqdn3d | Very Fast | Good | Best all‑rounder |
| removegrain | Fast | Moderate | Simple spatial denoising |
| tmedian | Medium | Good | Good for transient artifacts |
| vaguedenoiser | Slow | Very Good | Wavelet precision |
| fftdnoiz | Slow | Good | Can cause ringing |
| nlmeans | Slow | Excellent | 8‑bit only |
| owdenoise | Slow | Good | Wavelet denoising |
| bm3d | Very Slow | Excellent | State‑of‑the‑art |
| dctdnoiz | Extremely Slow | Good | Not 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.
| Problem | Likely Cause | Fix |
|---|---|---|
| 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:
- Preview denoising in real time—adjust parameters and see the result instantly
- Compare before and after side by side
- Adjust strength sliders for hqdn3d, nlmeans, and vaguedenoiser
- Visualize noise reduction with a difference overlay
- Generate the exact command with your tuned parameters
Here's how denoising tuning looks in the FFmpegLab IDE.
# Visual denoising preview # Adjust sliders → see results in real time
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.