FFmpeg源码分析:音频滤镜介绍(上)

本文介绍了FFmpeg中的音频滤镜,包括acompressor(压缩器)、acrossfade(淡入淡出)、afade(淡入淡出)、adeclick(移除噪声)、adelay(延迟)、aecho(回声)、agate(噪声门)和alimiter(限幅器)。详细阐述了每个滤镜的工作原理和参数选项,帮助读者理解如何在音频处理中应用这些滤镜。
摘要由CSDN通过智能技术生成

FFmpeg在libavfilter模块提供音视频滤镜。所有的音频滤镜都注册在libavfilter/allfilters.c。我们也可以使用ffmpeg -filters命令行来查看当前支持的所有滤镜,前面-a代表音频。本篇文章主要介绍音频滤镜,包括:压缩器、淡入淡出、移除噪声、延时、回声、噪声门。

关于音频滤镜的详细介绍,可查看官方文档:音频滤镜。

1、acompressor

压缩器,主要用于减小信号的动态范围。尤其是现代音乐,大多数以高压缩比,提高整体响度。压缩原理是通过检测信号超过所设定阈值,将其除以比例因子。参数选项如下:

  • level_in:输入增益,默认为1,范围[0.015625, 64]

  • mode:压缩模式,有 upward和downward两种模式, 默认为downward

  • threshold:如果媒体流信号达到此阈值,会引起增益减少。默认为0.125,范围[0.00097563, 1]

  • ratio:信号压缩的比例因子,默认为2,范围[1, 20]

  • attack:信号提升到阈值所用的毫秒数,默认为20,范围[0.01, 2000]

  • release:信号降低到阈值所用的毫秒数,默认为250,范围[0.01, 9000]

  • makeup:在处理后,多少信号被放大. 默认为1,范围[1, 64]

  • knee:增益降低的阶数,默认为2.82843,范围[1, 8]

  • link:信号衰减的average和maximum两种模式, 默认为average

  • detection:采用peak峰值信号或rms均方根信号,默认采用更加平滑的rms

  • mix:输出时使用多少压缩信号, 默认为1,范围[0, 1]

2、acrossfade

淡入淡出效果,将该效果应用到从一个音频流到另一个音频流的切换过程。参数选项如下:

  • nb_samples, ns:指定淡入淡出效果的采样数, 默认为44100

  • duration, d:指定淡入淡出的持续时间

  • overlap, o:第一个流结束是否与第二个流无缝衔接,默认开启

  • curve1:设置第一个流淡入淡出的过渡曲线

  • curve2:设置第二个流淡入淡出的过渡曲线

参考命令如下:

ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:c1=exp:c2=exp output.flac

3、afade

淡入淡出效果,与acrossfade效果类似。参数列表如下:

type, t:效果类型in或者out,默认为in

start_sample, ss:开始采样数,默认为0

nb_samples, ns:淡入淡出的采样个数,默认为44100

start_time, st:开始时间,默认为0

duration, d:淡入淡出效果持续时长

curve:淡入淡出的过渡曲线,包括以下选项:

  • tri:三角形,默认为线性斜率

  • qsin:四分之一正弦波

  • hsin:二分之一正弦波

  • esin:指数正弦波

  • log:对数

  • ipar:反抛物线

  • qua:二次插值

  • cub:三次插值

  • squ:平方根

  • cbr:立方根

  • par:抛物线

  • exp:指数

  • iqsin:反四分之一正弦波

  • ihsin:反二分之一正弦波

  • dese:双指数

  • desi:双指数曲线

  • losi:回归曲线

  • sinc:正弦基数函数

  • isinc:反正弦基数函数

  • nofade:无淡入淡出

同样地,采用宏定义给不同采样格式设置淡入淡出效果,代码位于af_afade.c,分为FADE_PLANAR(平面存储)和FADE(交错存储)两种形式:

#define FADE_PLANAR(name, type)                                             \
static void fade_samples_## name ##p(uint8_t **dst, uint8_t * const *src,   \
                                     int nb_samples, int channels, int dir, \
                                     int64_t start, int64_t range, int curve) \
{                                                                           \
    int i, c;                                                               \
                                                                            \
    for (i = 0; i < nb_samples; i++) {                                      \
        double gain = fade_gain(curve, start + i * dir, range);             \
        for (c = 0; c < channels; c++) {                                    \
            type *d = (type *)dst[c];                                       \
            const type *s = (type *)src[c];                                 \
                                        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值