如何用FFmpeg或命令行工具生成指定频段配置的灰噪声?
生成指定频段噪声的FFmpeg实现方案
一、先明确各频段对应的频率范围
行业通用的噪声生成场景频段划分:
- sub-bass:20Hz 以下
- low bass:20Hz - 60Hz
- bass:60Hz - 250Hz
- high bass:250Hz - 500Hz
- low mids:500Hz - 2kHz
- mids:2kHz - 4kHz
- high mids:4kHz - 8kHz
- low treble:8kHz - 12kHz
- treble:12kHz - 16kHz
- high treble:16kHz - 20kHz
你的需求是仅保留low mids和mids频段(即500Hz - 4kHz),其余频段完全过滤(衰减至-inf)。
二、FFmpeg命令实现
方案1:用高低通滤镜快速过滤(推荐)
生成白噪声后,直接通过highpass和lowpass滤镜保留目标频段:
ffmpeg -f lavfi -i "anoisesrc=color=white:sample_rate=48000:duration=10" \ -af "highpass=f=500, lowpass=f=4000" \ -c:a pcm_s16le output.wav
参数说明:
anoisesrc=color=white:生成白噪声,sample_rate=48000为专业级采样率,duration=10设置音频时长(单位:秒)highpass=f=500:过滤500Hz以下所有频段lowpass=f=4000:过滤4kHz以上所有频段-c:a pcm_s16le:输出无压缩WAV格式,保证音质
方案2:用均衡器逐个频段精准衰减
如果需要严格匹配每个频段的衰减设置,可使用equalizer滤镜逐个调整:
ffmpeg -f lavfi -i "anoisesrc=color=white:sample_rate=48000:duration=10" \ -af "equalizer=f=10:width_type=h:width=20:g=-999, \ equalizer=f=40:width_type=h:width=40:g=-999, \ equalizer=f=155:width_type=h:width=190:g=-999, \ equalizer=f=375:width_type=h:width=250:g=-999, \ equalizer=f=6000:width_type=h:width=4000:g=-999, \ equalizer=f=10000:width_type=h:width=4000:g=-999, \ equalizer=f=14000:width_type=h:width=4000:g=-999, \ equalizer=f=18000:width_type=h:width=4000:g=-999" \ -c:a pcm_s16le output.wav
参数说明:g=-999等效于-inf衰减,每个equalizer对应一个需要过滤的频段,通过width覆盖对应频率范围。
三、验证输出结果
用astats滤镜检查频谱范围,确认只有目标频段有信号:
ffmpeg -i output.wav -af astats=metadata=1:reset=1 -f null -
内容的提问来源于stack exchange,提问作者Azat Khabibulin
相关产品推荐
相关产品推荐

