AgentSkillsCN

ffmpeg-noise-reduction

完整版FFmpeg的噪声抑制与降噪功能,适用于视频与音频领域。主动启用此技能,可用于:(1) 视频降噪(nlmeans、hqdn3d、vaguedenoiser);(2) 硬件加速的降噪(nlmeans_opencl、nlmeans_vulkan);(3) 音频降噪(afftdn、anlmdn);(4) 电影颗粒的去除;(5) 低光画面的增强;(6) 压缩伪影的消除;(7) 广播噪声的降低;(8) 清晰纯净的音频录制。提供降噪滤波器、参数调优、硬件加速以及质量与速度之间的权衡。

SKILL.md
--- frontmatter
name: ffmpeg-noise-reduction
description: 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.

CRITICAL GUIDELINES

Windows File Path Requirements

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 (/).


Quick Reference

TaskFilterCommand 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 denoisingnlmeans_vulkan-vf nlmeans_vulkan
Audio denoisingafftdn-af afftdn=nf=-25
Adaptive temporalatadenoise-vf atadenoise

When to Use This Skill

Use for noise reduction workflows:

  • Cleaning low-light or high-ISO footage
  • Removing film grain
  • Reducing compression artifacts
  • Cleaning audio recordings
  • Broadcast signal cleanup
  • Pre-processing before encoding

FFmpeg Noise Reduction (2025)

Comprehensive guide to video and audio denoising filters.

Video Denoising

nlmeans - Non-Local Means (Best Quality)

The highest quality software denoiser, using non-local means algorithm.

bash
# 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:

ParameterDescriptionDefaultRange
sDenoising strength (sigma)1.00-30
pPatch size71-99 (odd)
pcPatch size for chroma0 (same as p)1-99
rResearch window size151-99 (odd)
rcResearch window for chroma0 (same as r)1-99

Strength guidelines:

s valueUse case
1.0-2.0Light noise, preserve detail
2.0-4.0Moderate noise (typical)
4.0-6.0Heavy noise, low light
6.0+Extreme noise (quality loss)

nlmeans_opencl - GPU-Accelerated NLMeans

OpenCL accelerated version, much faster.

bash
# 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

nlmeans_vulkan - Vulkan-Accelerated NLMeans (FFmpeg 8.0+)

Cross-platform GPU acceleration using Vulkan.

bash
# 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

hqdn3d - High Quality 3D Denoiser (Fast)

Faster than nlmeans with good results for moderate noise.

bash
# 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:

ParameterDescriptionDefaultRange
luma_spatialLuma spatial strength4.00-255
chroma_spatialChroma spatial strength3.00-255
luma_tmpLuma temporal strength6.00-255
chroma_tmpChroma temporal strength4.50-255

atadenoise - Adaptive Temporal Averaging

Temporal denoiser that preserves motion.

bash
# 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:

ParameterDescriptionDefault
0a, 1a, 2aThreshold A for planes 0,1,20.02
0b, 1b, 2bThreshold B for planes 0,1,20.04
sNumber of frames to average9
pPlanes to process7 (all)

vaguedenoiser - Wavelet Denoiser

Uses wavelet transform for denoising.

bash
# 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:

ParameterDescriptionDefaultValues
thresholdDenoising threshold20-inf
methodThresholding methodhardhard, soft, garrote
nstepsDecomposition steps61-32
percentPercent of full denoising850-100

fftdnoiz - FFT-Based Denoising

Frequency domain denoising.

bash
# 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

owdenoise - Overcomplete Wavelet Denoiser

Another wavelet-based option.

bash
# 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

removegrain - RemoveGrain

Classic grain/noise removal (from AviSynth).

bash
# 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

Audio Denoising

afftdn - FFT Denoiser (Recommended)

Powerful audio noise reduction using FFT.

bash
# 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:

ParameterDescriptionDefaultRange
nrNoise reduction (dB)120.01-97
nfNoise floor (dB)-50-80 to -20
ntNoise typeww=white, v=vinyl, s=shellac, c=custom
bnNumber of noise bands153-33
rfResidual floor (dB)-38-80 to -20
omOutput modeoi=input, o=output, n=noise

anlmdn - Non-Local Means Audio Denoiser

Audio equivalent of video nlmeans.

bash
# 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:

ParameterDescriptionDefault
sDenoising strength0.00001
pPatch radius0.002
rResearch radius0.006
mOutput modeo (output)

adeclick - Remove Clicks/Pops

Removes impulsive noise from audio.

bash
# 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

adeclip - Remove Clipping

Repairs clipped audio.

bash
# Fix clipping
ffmpeg -i clipped_audio.mp4 -af "adeclip" output.mp4

Combined Workflows

Low-Light Video Enhancement

bash
# 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

Interview Cleanup (Video + Audio)

bash
# 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

Film Grain Removal

bash
# 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

Compression Artifact Removal

bash
# 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

GPU-Accelerated Batch Processing

bash
#!/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 Comparison

Video Denoising Speed vs Quality

FilterQualitySpeedGPU OptionBest For
nlmeansExcellentSlowYes (OpenCL/Vulkan)Final output
hqdn3dGoodFastNoReal-time, previews
atadenoiseGoodMediumNoStatic scenes
vaguedenoiserGoodMediumNoMixed content
fftdnoizGoodMediumNoPeriodic noise

Audio Denoising Comparison

FilterQualitySpeedBest For
afftdnExcellentFastAll-purpose
anlmdnGoodMediumSpeech
adeclickSpecializedFastClicks/pops

Parameter Tuning Tips

Video Denoising

  1. Start conservative - Begin with s=2-3, increase if needed
  2. Preserve edges - Lower patch size (p=5) preserves more detail
  3. Test on samples - Process 10-second clips first
  4. Consider GPU - nlmeans_opencl/vulkan are 5-10x faster
  5. Match content - Static scenes tolerate stronger temporal denoising

Audio Denoising

  1. Find noise floor - Listen to quiet sections
  2. Use appropriate type - White noise vs vinyl vs custom
  3. Don't over-process - Artifacts can be worse than noise
  4. Check residual - Use om=n to hear what's being removed

Best Practices

  1. Denoise before encoding - Noise compresses poorly
  2. Preserve some texture - Over-denoising looks artificial
  3. Match source quality - Don't denoise clean footage
  4. Use GPU when available - Massive speed improvement
  5. Combine filters carefully - Multiple denoisers can cause artifacts
  6. Test different filters - Content-dependent results

This guide covers noise reduction for 2025. For video analysis and detection, see ffmpeg-video-analysis. For hardware acceleration, see ffmpeg-hardware-acceleration.