plugins/ffmpeg-core/skills/ffmpeg-noise-reduction/SKILL.md
Complete FFmpeg noise reduction and denoising for video and audio. PROACTIVELY activate for: (1) Video denoising (nlmeans, hqdn3d, vaguedenoiser), (2) Hardware-accelerated denoising (nlmeans_opencl, nlmeans_vulkan), (3) Audio noise reduction (afftdn, anlmdn), (4) Film grain removal, (5) Low-light footage enhancement, (6) Compression artifact removal, (7) Broadcast noise reduction, (8) Clean audio recordings. Provides: Denoising filters, parameter tuning, hardware acceleration, quality/speed tradeoffs.
npx skillsauth add JosiahSiegel/claude-plugin-marketplace ffmpeg-noise-reductionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
MANDATORY: Always Use Backslashes on Windows for File Paths
When using Edit or Write tools on Windows, you MUST use backslashes (\) in file paths, NOT forward slashes (/).
| Task | Filter | Command Pattern |
|------|--------|-----------------|
| Video denoising (best) | nlmeans | -vf nlmeans=s=3:p=7:r=15 |
| Video denoising (fast) | hqdn3d | -vf hqdn3d=4:3:6:4.5 |
| GPU video denoising | nlmeans_vulkan | -vf nlmeans_vulkan |
| Audio denoising | afftdn | -af afftdn=nf=-25 |
| Adaptive temporal | atadenoise | -vf atadenoise |
Use for noise reduction workflows:
Comprehensive guide to video and audio denoising filters.
The highest quality software denoiser, using non-local means algorithm.
# Basic denoising
ffmpeg -i noisy.mp4 -vf "nlmeans" output.mp4
# Medium denoising (good default)
ffmpeg -i noisy.mp4 -vf "nlmeans=s=3.0:p=7:r=15" output.mp4
# Strong denoising (very noisy footage)
ffmpeg -i noisy.mp4 -vf "nlmeans=s=5.0:p=7:r=15" output.mp4
# Light denoising (preserve detail)
ffmpeg -i noisy.mp4 -vf "nlmeans=s=1.5:p=5:r=9" output.mp4
# Denoise only chroma (preserve luma detail)
ffmpeg -i noisy.mp4 -vf "nlmeans=s=3.0:sc=5.0:p=7:r=15" output.mp4
Parameters:
| Parameter | Description | Default | Range |
|-----------|-------------|---------|-------|
| s | Denoising strength (sigma) | 1.0 | 0-30 |
| p | Patch size | 7 | 1-99 (odd) |
| pc | Patch size for chroma | 0 (same as p) | 1-99 |
| r | Research window size | 15 | 1-99 (odd) |
| rc | Research window for chroma | 0 (same as r) | 1-99 |
Strength guidelines: | s value | Use case | |---------|----------| | 1.0-2.0 | Light noise, preserve detail | | 2.0-4.0 | Moderate noise (typical) | | 4.0-6.0 | Heavy noise, low light | | 6.0+ | Extreme noise (quality loss) |
OpenCL accelerated version, much faster.
# OpenCL denoising
ffmpeg -i noisy.mp4 \
-vf "hwupload,nlmeans_opencl=s=3:p=7:r=15,hwdownload,format=yuv420p" \
output.mp4
# Strong denoising with OpenCL
ffmpeg -i noisy.mp4 \
-vf "hwupload,nlmeans_opencl=s=5:p=7:r=21,hwdownload,format=yuv420p" \
output.mp4
Cross-platform GPU acceleration using Vulkan.
# Vulkan denoising
ffmpeg -init_hw_device vulkan \
-i noisy.mp4 \
-vf "hwupload,nlmeans_vulkan=s=3:p=7:r=15,hwdownload,format=yuv420p" \
output.mp4
# Full Vulkan pipeline
ffmpeg -init_hw_device vulkan=vk \
-filter_hw_device vk \
-hwaccel vulkan -hwaccel_output_format vulkan \
-i noisy.mp4 \
-vf "nlmeans_vulkan=s=3" \
-c:v h264_vulkan output.mp4
Faster than nlmeans with good results for moderate noise.
# Default settings
ffmpeg -i noisy.mp4 -vf "hqdn3d" output.mp4
# Custom settings (luma_spatial:chroma_spatial:luma_tmp:chroma_tmp)
ffmpeg -i noisy.mp4 -vf "hqdn3d=4:3:6:4.5" output.mp4
# Strong spatial denoising
ffmpeg -i noisy.mp4 -vf "hqdn3d=8:6:6:4" output.mp4
# Strong temporal denoising (for static scenes)
ffmpeg -i noisy.mp4 -vf "hqdn3d=4:3:12:9" output.mp4
# Light denoising
ffmpeg -i noisy.mp4 -vf "hqdn3d=2:1.5:3:2" output.mp4
Parameters:
| Parameter | Description | Default | Range |
|-----------|-------------|---------|-------|
| luma_spatial | Luma spatial strength | 4.0 | 0-255 |
| chroma_spatial | Chroma spatial strength | 3.0 | 0-255 |
| luma_tmp | Luma temporal strength | 6.0 | 0-255 |
| chroma_tmp | Chroma temporal strength | 4.5 | 0-255 |
Temporal denoiser that preserves motion.
# Basic temporal denoising
ffmpeg -i noisy.mp4 -vf "atadenoise" output.mp4
# Stronger denoising
ffmpeg -i noisy.mp4 -vf "atadenoise=0a=0.1:0b=0.2:1a=0.1:1b=0.2:2a=0.1:2b=0.2" output.mp4
# Adjust threshold and planes
ffmpeg -i noisy.mp4 -vf "atadenoise=s=9:p=5" output.mp4
Parameters:
| Parameter | Description | Default |
|-----------|-------------|---------|
| 0a, 1a, 2a | Threshold A for planes 0,1,2 | 0.02 |
| 0b, 1b, 2b | Threshold B for planes 0,1,2 | 0.04 |
| s | Number of frames to average | 9 |
| p | Planes to process | 7 (all) |
Uses wavelet transform for denoising.
# Basic wavelet denoising
ffmpeg -i noisy.mp4 -vf "vaguedenoiser" output.mp4
# Adjust threshold
ffmpeg -i noisy.mp4 -vf "vaguedenoiser=threshold=3:method=soft" output.mp4
# Stronger denoising
ffmpeg -i noisy.mp4 -vf "vaguedenoiser=threshold=6:nsteps=6" output.mp4
Parameters:
| Parameter | Description | Default | Values |
|-----------|-------------|---------|--------|
| threshold | Denoising threshold | 2 | 0-inf |
| method | Thresholding method | hard | hard, soft, garrote |
| nsteps | Decomposition steps | 6 | 1-32 |
| percent | Percent of full denoising | 85 | 0-100 |
Frequency domain denoising.
# Basic FFT denoising
ffmpeg -i noisy.mp4 -vf "fftdnoiz" output.mp4
# Adjust sigma
ffmpeg -i noisy.mp4 -vf "fftdnoiz=sigma=8" output.mp4
# Strong denoising
ffmpeg -i noisy.mp4 -vf "fftdnoiz=sigma=15:block=32:overlap=0.8" output.mp4
Another wavelet-based option.
# Basic wavelet denoising
ffmpeg -i noisy.mp4 -vf "owdenoise" output.mp4
# Adjust depth and strength
ffmpeg -i noisy.mp4 -vf "owdenoise=depth=10:ls=3:cs=3" output.mp4
Classic grain/noise removal (from AviSynth).
# Mode 1 (basic)
ffmpeg -i noisy.mp4 -vf "removegrain=m0=1" output.mp4
# Different modes for different noise types
ffmpeg -i noisy.mp4 -vf "removegrain=m0=17:m1=17:m2=17" output.mp4
Powerful audio noise reduction using FFT.
# Basic audio denoising
ffmpeg -i noisy_audio.mp4 -af "afftdn" output.mp4
# Specify noise floor
ffmpeg -i noisy_audio.mp4 -af "afftdn=nf=-25" output.mp4
# Stronger noise reduction
ffmpeg -i noisy_audio.mp4 -af "afftdn=nf=-20:nt=w" output.mp4
# With noise profile (sample noise-only section first)
ffmpeg -i noisy_audio.mp4 -af "afftdn=nr=10:nf=-30:nt=w:om=o" output.mp4
# Adaptive noise floor
ffmpeg -i noisy_audio.mp4 -af "afftdn=nt=c:om=o:bn=9" output.mp4
Parameters:
| Parameter | Description | Default | Range |
|-----------|-------------|---------|-------|
| nr | Noise reduction (dB) | 12 | 0.01-97 |
| nf | Noise floor (dB) | -50 | -80 to -20 |
| nt | Noise type | w | w=white, v=vinyl, s=shellac, c=custom |
| bn | Number of noise bands | 15 | 3-33 |
| rf | Residual floor (dB) | -38 | -80 to -20 |
| om | Output mode | o | i=input, o=output, n=noise |
Audio equivalent of video nlmeans.
# Basic NLM audio denoising
ffmpeg -i noisy_audio.mp4 -af "anlmdn" output.mp4
# Adjust strength
ffmpeg -i noisy_audio.mp4 -af "anlmdn=s=0.0001" output.mp4
# Stronger denoising
ffmpeg -i noisy_audio.mp4 -af "anlmdn=s=0.001:p=0.01" output.mp4
Parameters:
| Parameter | Description | Default |
|-----------|-------------|---------|
| s | Denoising strength | 0.00001 |
| p | Patch radius | 0.002 |
| r | Research radius | 0.006 |
| m | Output mode | o (output) |
Removes impulsive noise from audio.
# Remove clicks
ffmpeg -i clicked_audio.mp4 -af "adeclick" output.mp4
# Adjust parameters
ffmpeg -i clicked_audio.mp4 -af "adeclick=w=55:o=75" output.mp4
Repairs clipped audio.
# Fix clipping
ffmpeg -i clipped_audio.mp4 -af "adeclip" output.mp4
# Denoise + brighten + contrast
ffmpeg -i dark_noisy.mp4 \
-vf "nlmeans=s=4:p=7:r=15,eq=brightness=0.1:contrast=1.2:saturation=1.1" \
-c:v libx264 -crf 18 \
enhanced.mp4
# Clean both video and audio noise
ffmpeg -i interview.mp4 \
-vf "hqdn3d=3:2:4:3" \
-af "afftdn=nf=-30:nr=10,loudnorm" \
-c:v libx264 -crf 20 \
-c:a aac -b:a 192k \
interview_clean.mp4
# Strong nlmeans for film grain
ffmpeg -i grainy_film.mp4 \
-vf "nlmeans=s=5:p=7:r=21" \
-c:v libx264 -crf 18 -preset slow \
degrained.mp4
# Preserve some grain (artistic choice)
ffmpeg -i grainy_film.mp4 \
-vf "nlmeans=s=2.5:p=5:r=11" \
-c:v libx264 -crf 18 \
light_degrain.mp4
# Remove blocking artifacts from highly compressed video
ffmpeg -i compressed.mp4 \
-vf "hqdn3d=2:1.5:3:2,unsharp=5:5:0.3:5:5:0" \
-c:v libx264 -crf 18 \
cleaner.mp4
#!/bin/bash
# Process multiple noisy videos with GPU
for video in noisy_*.mp4; do
output="clean_${video}"
ffmpeg -init_hw_device vulkan \
-i "$video" \
-vf "hwupload,nlmeans_vulkan=s=3,hwdownload,format=yuv420p" \
-c:v libx264 -crf 18 \
"$output"
done
| Filter | Quality | Speed | GPU Option | Best For |
|--------|---------|-------|------------|----------|
| nlmeans | Excellent | Slow | Yes (OpenCL/Vulkan) | Final output |
| hqdn3d | Good | Fast | No | Real-time, previews |
| atadenoise | Good | Medium | No | Static scenes |
| vaguedenoiser | Good | Medium | No | Mixed content |
| fftdnoiz | Good | Medium | No | Periodic noise |
| Filter | Quality | Speed | Best For |
|--------|---------|-------|----------|
| afftdn | Excellent | Fast | All-purpose |
| anlmdn | Good | Medium | Speech |
| adeclick | Specialized | Fast | Clicks/pops |
This guide covers noise reduction for 2025. For video analysis and detection, see ffmpeg-video-analysis. For hardware acceleration, see ffmpeg-hardware-acceleration.
development
Use for Clerk sessions, tokens, webhooks, orgs, and security. PROACTIVELY activate for session tokens, JWT templates, getToken(), custom claims, pending sessions, multi-session UX, organizations, roles, permissions, system vs custom permissions, features/plans, MFA/passkeys/password policy/bot protection, Clerk webhooks, Svix signatures, verifyWebhook(), user/org sync, retries/replays, environment variables, custom domains, secret rotation, logs, and auth security reviews. Provides token semantics, webhook idempotency, authorization defaults, and hardening checklist.
tools
Use for Clerk in Next.js. PROACTIVELY activate for @clerk/nextjs setup, App Router auth()/currentUser(), clerkMiddleware(), proxy.ts/middleware.ts, createRouteMatcher(), protected pages/layouts/Route Handlers/Server Actions/API routes/tRPC, auth.protect() role/permission/token checks, ClerkProvider placement, server-only clerkClient, Link prefetch, redirects, 401/404 auth failures, custom domains, __clerk proxy paths, and deployment gotchas. Provides file patterns, server/client boundary rules, matcher templates, and production checks.
development
Use for Clerk frontend auth flows. PROACTIVELY activate for React, JavaScript, Vue, Nuxt, Astro, Expo, React Router, TanStack React Start, or SPA setup; ClerkProvider and publishable-key wiring; SignIn/SignUp/UserButton/UserProfile/OrganizationSwitcher; custom useUser/useAuth/useClerk/useSignIn/useSignUp/useSession/useOrganization flows; multi-session UX; cross-origin getToken() fetches; loading states, redirects, routing, CORS/cookies, or hydration bugs. Provides SDK selection, UI patterns, token-fetch templates, and frontend gotchas.
development
Use for Clerk dev/prod readiness, deployment, and multi-language implementation planning. PROACTIVELY activate for environment variables, pk_test/sk_test vs pk_live/sk_live, local dev, preview/staging/prod instances, domains/DNS, redirects, OAuth credentials, custom domains/proxy, authorizedParties, CSP, CORS/cookies, webhooks/tunnels, Vercel/Netlify/Cloudflare/API gateways, monitoring/troubleshooting, and backends in Node/Express/Fastify, Python/FastAPI/Django/Flask, Go, Ruby/Rails, Java/Spring, .NET, PHP/Laravel. Provides checklists, rollout plans, and language-portable patterns.