28 重采样选项

音频重采样支持下面一些选项。

选项可以在ffmpeg工具集中采用-option value的形式进行设置,或者在aresample滤镜中以option=value形式设置,也可以通过libavutil/opt.h的API或明确设置在SwrContext选项中。

  • ich, in_channel_count

    设置输入通道序数。默认为0。如果in_channel_layout被设置,则并不强制要求设置这个值。

  • och, out_channel_count

    设置输出通道序数,默认为0。如果out_channel_layout被设置,则并不强制要求设置这个值。

  • uch, used_channel_count

    设置使用的输入通道序数,默认为0。这个选项仅用于指定重新映射

  • isr, in_sample_rate

    设置输入采样率,默认为0

  • osr, out_sample_rate

    设置输出采样率,默认为0

  • isf, in_sample_fmt

    设置输入采样格式,默认为none

  • osf, out_sample_fmt

    设置输出采样格式,默认为none

  • tsf, internal_sample_fmt

    设置内部采样格式。默认值为none,当不显式设置时它会自动被选中

  • icl, in_channel_layout
  • ocl, out_channel_layout

    设置输入/输出通道布局

    参考FFmepg工具集(ffmpeg-utils)通道布局章节手册(ffmpeg-utils(1) )以了解要求语法。

  • clev, center_mix_level

    设置中心混合水平。这是个用分贝(deciBel)表示的值,范围在 [-32,32].

  • slev, surround_mix_level

    设置环绕混合水平。这是个用分贝(deciBel)表示的值,范围在 [-32,32].

  • lfe_mix_level

    设置LFE混合成非LFE水平。它表示输入为LFE,但输出没有LFE的处理。这是个用分贝(deciBel)表示的值,范围在 [-32,32]

  • rmvol, rematrix_volume

    设置rematrix值(声音的放缩处理),默认1.0.

  • rematrix_maxval

    设置rematrix处理的最大值。它用来防止声音放缩为1.0时被裁剪

  • flags, swr_flags

    设置为采用转换的标志,默认为0.

    它支持下面的标志:

    • res

      强制重采样。这个标志将强制重采样,即使输入和输出的采样频率一样。

  • dither_scale

    设置抖动率。默认1.
    关于dither:Dither是数字音乐处理上非常神奇的技巧,目的是通过用少数的Bit达到与较多Bit同样的听觉效果,方法是在最后一个Bit(LSB)上动“手脚”。例如用16Bit记录听起来好似20Bit的信息,听到原先16Bit无法记录的微小信息。举例来说,现在我有个20Bit的采样信息,现在想将其存为16Bit的信息格式,最简单的转换方式就是直接把后面4个Bit去掉,但是这样就失去用20Bit录音/混音的意义。比较技巧性的方法是在第17~20Bit中加入一些噪音,这段噪音就叫做Dither。这些噪音加入后,可能会进位而改变第16个Bit的信息,然后我们再把最后4个Bit删掉,这个过程我们称为redithering,用意是让后面4个Bit的数据线性地反映在第16个Bit上。由于人耳具有轻易将噪音与乐音分离的能力,所以虽然我们加入了噪音,实际上我们却听到了更多音乐的细节。

  • dither_method

    设置抖动方法,默认 0.

    支持的值:

    • ‘rectangular’

      选择rectangular抖动方法

    • ‘triangular’

      选择triangular抖动方法

    • ‘triangular_hp’

      对高频采用triangular抖动方法

    • ‘lipshitz’

      选择lipshitz噪音塑造抖动方法

    • ‘shibata’

      选择shibata噪音塑造抖动方法

    • ‘low_shibata’

      选择低shibata噪音塑造抖动方法

    • ‘high_shibata’

      选择高shibata噪音塑造抖动方法

    • ‘f_weighted’

      选择f-weighted噪音塑造抖动方法

    • ‘modified_e_weighted’

      选择modified-e-weighted噪音塑造抖动方法

    • ‘improved_e_weighted’

      选择improved-e-weighted噪音塑造抖动方法

  • resampler

    设置重采样技术。默认为 swr.

    支持的值:

    • ‘swr’

      选择原生SW重采样; 滤镜选项precisioncheby在这种情况下不可用

    • ‘soxr’

      选择SoX重采样(如果可用)。 compensation, 和滤镜选项filter_size, phase_shift, filter_typekaiser_beta在这种情况下不可用

  • filter_size

    仅对swr有效,设置重采样滤镜尺寸,默认为32

  • phase_shift

    仅对swr有效,设置重采样相移,默认为10,范围 [0,30].

  • linear_interp

    如果为1则采用线性插值。默认为0

  • cutoff

    设置截止频率 (swr: 6dB ; soxr: 0dB ) 比例;必须是一个0到1的浮点数。默认为0.97(对swr模式)和0.91(对soxr)(这意味着采样率为44100,就可以保存整个20KHz的频带)

  • precision

    仅对soxr有效,重采样信号精度位计算。默认值为20(配合合适的抖动,适合一个16bit位深的目标),适合于高品质的SoX,可以设置为28以获得非常高品质的SoX

  • cheby

    仅对soxr有效, 选择通频带滚边切除(Chebyshev)和高精度近视’无理数’比率。默认为0

  • async

    仅对swr有效, 为1则可以采用伸展、挤压、填充和修剪等方法实现同步,默认为0,表示没有任何补偿用于同步音频时间戳

  • first_pts

    仅对swr有效,假定第一个pts(这里表示数据包时间戳)是这个值。时间单位是1/采样率。 这允许对流填充/切边。默认,没有假设第一帧预期时间,所以没有填充或者切边。例如这个值设置为0,表示如果有编码器延迟,音频流与视频流本身是同步的,则先静音直到二者同步开始

  • min_comp

    仅对swr有效, 设置时间戳与音频数据最小差值,单位秒,以此来触发拉伸/压缩/填充或调整的数据匹配的时间戳。默认值为(min_comp = FLT_MAX),表示禁用拉伸/压缩/填充或调整的数据匹配到时间戳

  • min_hard_comp

    仅对swr有效, 设置时间戳与音频数据最小差值,单位秒,以此来触增加/抛弃以匹配时间戳。它设置了一个阀值来选择有效的硬(裁剪/填充)补偿和软(压缩/拉伸)补偿.注意补偿默认是禁止的。而这个选项默认值是0.1.

  • comp_duration

    仅对swr有效, 设置拉伸/压缩数据匹配的时间戳的持续时间。 必须是非负双精度浮点数,默认为1.0.

  • max_soft_comp

    仅对swr有效, 设置在拉伸/压缩以匹配时间戳的最大系数。必须是非负双精度浮点数,默认为0.

  • matrix_encoding

    选择立体声编码矩阵

    接收如下值:

    • ‘none’

      选择none

    • ‘dolby’

      选择Dolby

    • ‘dplii’

      选择Dolby Pro Logic II

      默认为none.

  • filter_type

    仅对swr有效,选择重采样滤镜类型,仅用于重采样操作。

    接收如下值:

    • ‘cubic’

      选择cubic

    • ‘blackman_nuttall’

      选择Blackman Nuttall Windowed Sinc

    • ‘kaiser’

      选择Kaiser Windowed Sinc

  • kaiser_beta

    仅对swr有效, 设置Kaiser Window Beta值,必须是整数,范围[2,16],默认为9.

  • output_sample_bits

    仅对swr有效,采用输出采样抖动。必须为整数,范围 [0,64], 默认为0,表示不采用