美文网首页FFPlay专辑
FFplay文档解读-15-重采样器选项,缩放选项,过滤简介,g

FFplay文档解读-15-重采样器选项,缩放选项,过滤简介,g

作者: 张芳涛 | 来源:发表于2018-11-15 16:27 被阅读31次

    19.重新采样器选项

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

    可以通过在FFmpeg工具中指定-option值,为aresample过滤器指定option = value,通过在SwrContext选项中显式设置值或使用libavutil / opt.h``API进行编程来设置选项。

    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
    

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

    有关所需语法,请参阅(ffmpeg-utilschannel布局语法。

    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
    

    设置重新矩阵的最大输出值。这可用于防止削波与防止音量减小。值1.0可防止剪裁。

    flags, swr_flags
    

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

    它支持以下各个标志:

    解释
    res 强制重新采样,即使输入和输出采样率匹配,此标志也会强制使用重采样
    dither_scale
    

    设置抖动比例。 默认值为1

    dither_method
    

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

    支持如下的值:

    解释
    rectangular 选择矩形抖动
    triangular 选择三角形抖动
    triangular_hp 选择高通三角形抖动
    lipshitz 选择Lipshitz噪音塑造抖动
    shibata 选择Shibata噪音整形抖动
    low_shibata 选择低Shibata噪声整形抖动
    high_shibata 选择高Shibata噪声整形抖动
    f_weighted 选择f加权噪声整形抖动
    modified_e_weighted 选择修改的e加权噪声整形抖动
    improved_e_weighted 选择改进的e加权噪声整形抖动
    resampler
    

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

    支持的值如下:

    解释
    swr 选择原生SW重采样器; 过滤器选项精度和cheby在这种情况下不适用
    soxr 选择SoX重采样器(如果可用); 补偿和过滤器选项filter_size,phase_shift,exact_rational,filter_typekaiser_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点)比率; 必须是介于01之间的浮点值。默认值为0.97(swr)0.91(soxr)(采样率为44100,保留整个音频频段为20kHz)。

    precision
    

    仅对于soxr,将计算重采样信号的位精度。 默认值20(通过适当的抖动,适用于目标位深度为16),可以得到SoXHigh Quality; 值28表示SoXVery High Quality

    cheby
    

    仅对于soxr,选择passband rolloff none(Chebyshev)irrational比率的更高精度近似。 默认值为0

    async
    

    仅对于swr,使用拉伸,挤压,填充和修剪的简单1参数音频同步到时间戳。 将此值设置为1将启用填充和修剪,较大的值表示样本中每秒可以拉伸或挤压数据的最大量。 默认值为0,因此不会应用补偿使样本与音频时间戳匹配。

    first_pts
    

    仅对于swr,假设第一个pts应为此值。 时间单位是1 / sample rate。 这允许在流的开始处进行padding/trimming。 默认情况下,不会对第一帧的预期pts做出假设,因此不会进行填充或修剪。 例如,如果音频流在视频流之后开始,则可以将其设置为0以用静音填充开头,或者由于编码器延迟而用负pts修剪任何样本。

    min_comp
    

    仅对于swr,设置时间戳和音频数据之间的最小差异(以秒为单位),以触发拉伸/挤压/填充或修剪数据,使其与时间戳匹配。 默认情况下,拉伸/挤压/填充和修剪被禁用(min_comp'= FLT_MAX)。

    min_hard_comp
    

    仅对于swr,设置时间戳和音频数据之间的最小差异(以秒为单位)以触发添加/删除样本以使其与时间戳匹配。 此选项实际上是在hard (trim/fill)soft (squeeze/stretch)补偿之间进行选择的阈值。 请注意,默认情况下,通过min_comp禁用所有补偿。 默认值为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 选择立方体
    blackman_nuttall 选择Blackman Nuttall窗口sinc
    kaiser 选择Kaiser窗口sinc
    kaiser_beta
    

    仅对于swr,设置Kaiser窗口beta值。 必须是区间[2,16]中的双浮点值,默认值为9

    output_sample_bits
    

    仅对于swr,设置用于抖动的已使用输出采样位数。 必须是区间[0,64]中的整数,默认值为0,这意味着它不被使用。

    20.缩放选项

    视频缩放器支持以下命名选项。

    可以通过在FFmpeg工具中指定-option值来设置选项。 对于程序化使用,可以在SwsContext选项中或通过libavutil / opt.h``API显式设置它们。

    sws_flags
    

    设置缩放器标志。 这也用于设置缩放算法。 只应选择一个算法。 默认值为bicubic

    它接受以下值:

    解释
    fast_bilinear 选择快速双线性缩放算法
    bilinear 选择双线性缩放算法
    bicubic 选择双三次缩放算法
    experimental 选择实验缩放算法
    neighbor 选择最近邻居重新缩放算法
    area 选择平均区域重新缩放算法
    bicublin 为亮度分量选择双三次缩放算法,为色度分量选择双线性
    gauss 选择高斯重新缩放算法
    sinc 选择sinc重新缩放算法
    lanczos 选择Lanczos重新缩放算法
    spline 选择自然双三次样条重新缩放算法
    print_info 启用打印/调试日志记录
    accurate_rnd 启用精确舍入
    full_chroma_int 启用全色度插值
    full_chroma_inp 选择全色度输入
    bitexact 启用bitexact输出
    srcw
    

    设置源宽度。

    srch
    

    设置源高度。

    dstw
    

    设置目标宽度。

    dsth
    

    设置目的地高度。

    src_format
    

    设置源像素格式(必须表示为整数)。

    dst_format
    

    设置目标像素格式(必须表示为整数)。

    src_range
    

    选择源范围。

    dst_range
    

    选择目的地范围。

    param0,param1
    

    设置缩放算法参数。 指定的值特定于某些缩放算法,并被其他人忽略。 指定的值是浮点数值。

    sws_dither
    

    设置抖动算法。 接受以下值之一。 默认值为auto

    解释
    auto 自动选择
    none 没有抖动
    bayer bayer抖动
    ed 误差扩散抖动
    a_dither 算术抖动,基于加法
    x_dither 算术抖动,使用xor(更随机/更不明显的图案化a_dither
    alphablend
    

    设置alpha混合以在输入具有alpha但输出不具有alpha时使用。 默认值为none

    解释
    uniform_color 混合均匀的背景颜色
    checkerboard 混合到棋盘上
    none 没有混合

    21.过滤简介

    通过libavfilter库启用FFmpeg中的过滤。

    libavfilter中,过滤器可以有多个输入和多个输出。 为了说明可能的事情,我们考虑以下过滤器图。

                    [main]
    input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> crop --> vflip -------+
    

    此过滤器图将输入流分成两个流,然后通过裁剪过滤器和vflip过滤器发送一个流,然后通过将其重叠在顶部将其与另一个流合并。 可以使用以下命令来实现此目的:

    ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
    

    结果是视频的上半部分镜像到输出视频的下半部分。

    同一线性链中的过滤器用逗号分隔,过滤器的不同线性链用分号分隔。在我们的示例中,crop,vflip在一个线性链中,splitoverlay分别在另一个中。线性链连接的点由方括号括起来的名称标记。在该示例中,分割滤波器生成两个与标签[main][tmp]相关联的输出。

    发送到分割的第二个输出(标记为[tmp])的流通过裁剪滤镜处理,裁剪滤镜裁掉视频的下半部分,然后垂直翻转。叠加滤波器输入分割滤波器的第一个未改变的输出(标记为[main]),并在其下半部分覆盖由cropvflip滤波器链生成的输出。

    有些过滤器会输入一个参数列表:它们在过滤器名称和等号后面指定,并用冒号分隔。

    存在所谓的没有音频/视频输入的源滤波器,以及不具有音频/视频输出的宿滤波器。

    22. graph2dot

    FFmpeg``tools目录中包含的graph2dot程序可用于解析filtergraph描述并以点语言发出相应的文本表示。

    调用命令如下:

    graph2dot -h
    

    看看如何使用graph2dot

    然后,可以将点描述传递给dot程序(来自graphviz程序套件),并获得filtergraph的图形表示。

    例如命令序列:

    echo GRAPH_DESCRIPTION | \
    tools/graph2dot -o graph.tmp && \
    dot -Tpng graph.tmp -o graph.png && \
    display graph.png
    

    可用于创建和显示表示GRAPH_DESCRIPTION字符串描述的图形的图像。 请注意,此字符串必须是完整的自包含图形,并明确定义其输入和输出。 例如,命令行具有以下形式:

    ffmpeg -i infile -vf scale=640:360 outfile
    

    GRAPH_DESCRIPTION字符串必须是以下形式:

    nullsrc,scale=640:360,nullsink
    

    可能还需要设置nullsrc参数并添加格式过滤器以模拟特定的输入文件。

    23.滤波器描述

    滤波器图是连接滤波器的有向图。 它可以包含循环,并且一对过滤器之间可以有多个链接。 每个链路在一侧具有一个输入焊盘,将其连接到一个用于输入的滤波器,另一侧的一个输出焊盘将其连接到接受其输出的一个滤波器。

    filtergraph中的每个过滤器都是应用程序中注册的过滤器类的实例,它定义了过滤器的特征和输入和输出焊盘的数量。

    没有输入焊盘的滤波器称为source,没有输出焊盘的滤波器称为sink

    23.1 Filtergraph语法

    filtergraph有一个文本表示,由ffmpe中的-filter'/' - vf'/' - af-filter_complex选项以及ffplay中的-vf'/' - af识别,并由libavfilter / avfilter.h中定义的avfilter_graph_parse_ptr()函数。

    过滤链由一系列连接的过滤器组成,每个过滤器连接到序列中的前一个过滤器。过滤链由 - 分隔的过滤器描述列表表示。

    filtergraph由一系列过滤链组成。一系列过滤链由;列表表示 -分离的过滤链描述。

    过滤器由以下形式的字符串表示:[in_link_1] ... [in_link_N] filter_name @ id = arguments [out_link_1] ... [out_link_M]

    filter_name是过滤器类的名称,其描述的过滤器是其实例,并且必须是在程序中注册的过滤器类之一的名称,可选地后跟@id。筛选器类的名称后跟可选的字符串= arguments

    arguments是一个字符串,其中包含用于初始化过滤器实例的参数。它可能有以下两种形式之一:

    • 一个 - key=value对的分隔列表。

    • 一个 - 分隔的值列表。 在这种情况下,键被假定为声明它们的顺序中的选项名称。 例如。 淡入淡出过滤器按此顺序声明三个选项 - typestart_framenb_frames。 然后参数列表:0:30表示将值分配给选项type0分配给start_frame30分配给nb_frames

    • - 混合直接值和长key=value对的分隔列表。 直接值必须在key=value对之前,并遵循前一点的相同约束顺序。 可以按任何首选顺序设置以下key = value对。

    如果选项值本身是项目列表(例如,格式过滤器采用像素格式列表),则列表中的项目通常用|分隔。

    可以使用字符'作为起始和结束标记引用参数列表,并使用字符\来引用引用文本中的字符;否则,当遇到下一个特殊字符(属于集合[] =;,)时,参数字符串被视为终止。

    过滤器的名称和参数可选地前面和后面是链接标签列表。链接标签允许用户命名链接并将其与过滤器输出或输入板相关联。前面的标签in_link_1 ... in_link_N与滤波器输入焊盘相关联,以下标签out_link_1 ... out_link_M与输出焊盘相关联。

    当在filtergraph中找到两个具有相同名称的链接标签时,将创建相应输入和输出板之间的链接。

    如果未标记输出焊盘,则默认情况下将其链接到滤波器链中下一个滤波器的第一个未标记输入焊盘。例如在过滤链中

    nullsrc, split[L1], [L2]overlay, nullsink
    

    分离滤波器实例有两个输出pads,而叠加滤波器实例有两个输入pads。 分割的第一输出垫标记为L1,覆盖的第一输入垫标记为L2,并且分割的第二输出垫链接到覆盖的第二输入垫,其均未标记。

    在过滤器描述中,如果未指定第一个过滤器的输入标签,则假定为in; 如果未指定最后一个过滤器的输出标签,则假定为out

    在完整的滤波链中,必须连接所有未标记的滤波器输入和输出焊盘。 如果所有滤波器链的所有滤波器输入和输出焊盘都连接在一起,则滤波器图被认为是有效的。

    Libavfilter将自动插入需要格式转换的缩放过滤器。 可以通过预先添加sws_flags = flags为自动插入的缩放器指定swscale标志; 到filtergraph描述。

    以下是filtergraph语法的BNF描述:

    NAME             ::= sequence of alphanumeric characters and '_'
    FILTER_NAME      ::= NAME["@"NAME]
    LINKLABEL        ::= "[" NAME "]"
    LINKLABELS       ::= LINKLABEL [LINKLABELS]
    FILTER_ARGUMENTS ::= sequence of chars (possibly quoted)
    FILTER           ::= [LINKLABELS] FILTER_NAME ["=" FILTER_ARGUMENTS] [LINKLABELS]
    FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
    FILTERGRAPH      ::= [sws_flags=flags;] FILTERCHAIN [;FILTERGRAPH]
    

    23.2 Notes on filtergraph escaping

    Filtergraph描述组合需要几个级别的转义。 有关使用的转义过程的更多信息,请参阅(ffmpeg-utilsquoting_and_escaping

    第一级转义会影响每个过滤器选项值的内容,其中可能包含特殊字符:用于分隔值或其中一个转义字符\

    第二级转义会影响整个过滤器描述,其中可能包含转义字符\或特殊字符[] ,; filtergraph描述使用的。

    最后,当在shell命令行上指定filtergraph时,需要对其中包含的shell特殊字符执行第三级转义。

    例如,考虑将以下字符串嵌入到drawtext过滤器描述text值中:

    this is a 'string': may contain one, or more, special characters
    

    此字符串包含'特殊转义字符和:特殊字符,因此需要以这种方式转义:

    text=this is a \'string\'\: may contain one, or more, special characters
    

    将过滤器描述嵌入到filtergraph描述中时,需要第二级转义,以便转义所有filtergraph特殊字符。 因此上面的例子变成:

    drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
    

    (请注意,除了\'转义特殊字符外,还需要进行转义)。

    最后,在shell命令中编写filtergraph描述时需要额外的转义级别,这取决于所采用的shell的转义规则。 例如,假设\是特殊的并且需要使用另一个\来转义,前一个字符串最终将导致:

    -vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
    

    24.时间表编辑

    某些过滤器支持通用的enable选项。 对于支持时间轴编辑的过滤器,可以将此选项设置为在将帧发送到过滤器之前计算的表达式。 如果评估非零,则将启用过滤器,否则帧将不变地发送到过滤器图中的下一个过滤器。

    表达式接受以下值:

    t
    

    时间戳以秒表示,如果输入时间戳未知,则为NAN.

    n
    

    输入帧的序号,从0开始

    pos
    

    输入框文件中的位置,如果未知,则为NAN

    w
    
    h
    

    视频输入帧的宽度和高度。

    此外,这些过滤器支持enable命令,可用于重新定义表达式。

    与任何其他过滤选项一样,enable选项遵循相同的规则。

    例如,要启用模糊滤镜(smartblur)10秒到3分钟,曲线滤镜从3秒开始:

    smartblur = enable='between(t,10,3*60)',
    curves    = enable='gte(t,3)' : preset=cross_process
    

    请参阅ffmpeg -filters以查看哪些过滤器具有时间轴支持。

    25.具有多个输入的过滤器选项(帧同步)

    一些具有多个输入的过滤器支持一组通用选项。 这些选项只能通过名称设置,而不能使用简短表示法。

    eof_action
    

    在辅助输入上遇到EOF时要采取的操作; 它接受以下值之一:

    解释
    repeat 重复最后一帧(默认)
    endall 结束两个流
    pass 通过主输入
    shortest
    

    如果设置为1,则在最短输入终止时强制输出终止。 默认值为0

    repeatlast
    

    如果设置为1,则强制过滤器扩展辅助流的最后一帧,直到主流结束。 值为0将禁用此行为。 默认值为1

    相关文章

      网友评论

        本文标题:FFplay文档解读-15-重采样器选项,缩放选项,过滤简介,g

        本文链接:https://www.haomeiwen.com/subject/eoiyfqtx.html