⚠️ 这是一个非官方翻译网站,与 FFmpeg 项目无关。准确信息请参阅原文(https://ffmpeg.org/ffmpeg-resampler.html)

FFmpeg 重采样器文档

1 描述

FFmpeg 重采样器为 libswresample 库的音频重采样功能提供了高级接口。具体来说,它可以执行音频重采样、音频声道布局的重新矩阵化,以及转换音频格式和打包布局。

2 重采样器选项

音频重采样器支持以下命名选项。

可以在 FFmpeg 工具中以 -option value 的形式指定选项,在 aresample 滤镜中以 option=value 的形式指定,也可以直接在 SwrContext 选项中设置值,或者在程序中使用 libavutil/opt.h API 进行设置。

uchl, used_chlayout

设置所使用的输入声道布局。默认未设置。此选项仅用于特殊的重新映射。

isr, in_sample_rate

设置输入采样率。默认值为 0。

osr, out_sample_rate

设置输出采样率。默认值为 0。

isf, in_sample_fmt

指定输入的 sample format。默认设置为 none

osf, out_sample_fmt

指定输出的 sample format。默认设置为 none

tsf, internal_sample_fmt

设置内部处理使用的 sample format。默认值为 none。未显式设置时会自动选择。

ichl, in_chlayout ochl, out_chlayout

设置输入/输出声道布局。

所需语法请参见 (ffmpeg-utils)ffmpeg-utils(1) 手册中的 Channel Layout 一节

clev, center_mix_level

设置中置声道的混音电平。该值以分贝表示,必须在 [-32,32] 区间内。

slev, surround_mix_level

设置环绕声道的混音电平。该值以分贝表示,必须在 [-32,32] 区间内。

lfe_mix_level

设置将 LFE 混入非 LFE 声道的电平。当存在 LFE 输入但没有 LFE 输出时使用。该值以分贝表示,必须在 [-32,32] 区间内。

rmvol, rematrix_volume

设置重新矩阵化的音量。默认值为 1.0。

rematrix_maxval

设置重新矩阵化的最大输出值。可用于在防止削波和防止音量降低之间做取舍。值为 1.0 时可防止削波。

flags, swr_flags

设置转换器使用的标志。默认值为 0。

支持以下各个标志:

res

强制重采样,即使输入和输出的采样率相同,此标志也会强制使用重采样。

dither_scale

设置抖动的缩放系数。默认值为 1。

dither_method

设置抖动方式。默认值为 0。

支持的值有:

‘rectangular’

选择矩形抖动。

‘triangular’

选择三角形抖动。

‘triangular_hp’

选择带高通的三角形抖动。

‘lipshitz’

选择 Lipshitz 噪声整形抖动。

‘shibata’

选择 Shibata 噪声整形抖动。

‘low_shibata’

选择 low Shibata 噪声整形抖动。

‘high_shibata’

选择 high Shibata 噪声整形抖动。

‘f_weighted’

选择 f-weighted 噪声整形抖动。

‘modified_e_weighted’

选择 modified-e-weighted 噪声整形抖动。

‘improved_e_weighted’

选择 improved-e-weighted 噪声整形抖动。

resampler

设置重采样引擎。默认值为 swr。

支持的值有:

‘swr’

选择原生的 SW Resampler;此时滤镜选项 precision 和 cheby 不适用。

‘soxr’

选择 SoX Resampler(若可用);此时补偿,以及滤镜选项 filter_size、phase_shift、exact_rational、filter_type 和 kaiser_beta 均不适用。

filter_size

仅适用于 swr,设置重采样滤镜的大小,默认值为 32。

phase_shift

仅适用于 swr,设置重采样的相移,默认值为 10,且必须在 [0,30] 区间内。

linear_interp

启用后(默认)使用线性插值。若希望在 exact_rational 失败时保持速度而非质量,可将其禁用。

exact_rational

仅适用于 swr,启用后会尝试根据输入和输出采样率使用精确的 phase_count。但若该值大于 1 << phase_shift,则会回退为 phase_count = 1 << phase_shift。默认启用。

cutoff

设置截止频率(swr 为 6dB 点;soxr 为 0dB 点)的比率;必须是 0 到 1 之间的浮点值。默认值 swr 为 0.97,soxr 为 0.91(在采样率为 44100 时,该值可保留至 20kHz 的完整音频带宽)。

precision

仅适用于 soxr,计算重采样信号所依据的精度(以位为单位)。默认值 20(配合适当的抖动,适用于目标位深度为 16 的场合)对应 SoX 的“High Quality”;设为 28 则对应 SoX 的“Very High Quality”。

cheby

仅适用于 soxr,选择无通带滚降(即 Chebyshev)方式,并对“无理数”比率使用更高精度的近似。默认值为 0。

async

仅适用于 swr,通过拉伸、压缩、填充和截取,用一个简单的单参数方式将音频同步到时间戳。将此值设为 1 会启用填充和截取,更大的值表示每秒可拉伸或压缩数据的最大采样数。默认值为 0,此时不会对采样做任何补偿来匹配音频时间戳。

first_pts

仅适用于 swr,假定第一个 pts 应为此值。时间单位为 1 / 采样率。这样可以在流开头进行填充或截取。默认情况下不对第一帧的预期 pts 做任何假设,因此不会进行填充或截取。例如,当音频流比视频流晚开始时,可将其设为 0,用静音填充开头;也可用它截取因 encoder 延迟而导致 pts 为负的采样。

min_comp

仅适用于 swr,设置触发拉伸/压缩/填充或截取数据以匹配时间戳所需的时间戳与音频数据之间的最小差值(以秒为单位)。默认情况下拉伸、压缩、填充和截取均被禁用(min_comp = FLT_MAX)。

min_hard_comp

仅适用于 swr,设置触发添加/丢弃采样以匹配时间戳所需的时间戳与音频数据之间的最小差值(以秒为单位)。此选项实际上是在硬补偿(截取/填充)和软补偿(压缩/拉伸)之间进行选择的阈值。请注意,默认情况下所有补偿都通过 min_comp 被禁用。默认值为 0.1。

comp_duration

仅适用于 swr,设置为匹配时间戳而拉伸/压缩数据的持续时间(以秒为单位)。必须是非负的双精度浮点值,默认值为 1.0。

max_soft_comp

仅适用于 swr,设置为匹配时间戳而拉伸/压缩数据的最大系数。必须是非负的双精度浮点值,默认值为 0。

matrix_encoding

选择矩阵编码的立体声方式。

可接受的值有:

‘none’

选择无。

‘dolby’

选择 Dolby。

‘dplii’

选择 Dolby Pro Logic II。

默认值为 none

filter_type

仅适用于 swr,选择重采样滤镜的类型。此选项只影响重采样操作。

可接受的值有:

‘cubic’

选择 cubic。

‘blackman_nuttall’

选择 Blackman Nuttall 窗函数 sinc。

‘kaiser’

选择 Kaiser 窗函数 sinc。

kaiser_beta

仅适用于 swr,设置 Kaiser 窗的 beta 值。必须是 [2,16] 区间内的双精度浮点值,默认值为 9。

output_sample_bits

仅适用于 swr,设置用于抖动的输出采样位数。必须是 [0,64] 区间内的整数,默认值为 0,表示不使用。

3 参见

ffmpeg, ffplay, ffprobe, libswresample

4 作者

FFmpeg 的开发者们。

关于作者身份的详细信息,请参见项目的 Git 历史(https://git.ffmpeg.org/ffmpeg),例如在 FFmpeg 源代码目录中输入 git log 命令,或浏览在线仓库 https://git.ffmpeg.org/ffmpeg

各组件的维护者列在源代码树中的 MAINTAINERS 文件里。

主机托管由 telepoint.bg 提供