美文网首页FFPlay专辑
FFplay文档解读-48-多媒体过滤器二

FFplay文档解读-48-多媒体过滤器二

作者: 张芳涛 | 来源:发表于2018-11-16 10:35 被阅读13次

    前言

    Github地址:Github
    简书地址:简书
    专辑地址:FFplay专辑

    32.8 ebur128

    EBU R128扫描仪滤光片。此过滤器将音频流作为输入并以不变的方式输出。默认情况下,它以10Hz的频率记录消息,具有瞬时响度(由M标识),短期响度(S),集成响度(I)和响度范围(LRA)。

    该滤波器还具有视频输出(请参阅视频选项),其中包含实时图表以观察响度演变。图形包含上面提到的已记录消息,因此在设置此选项时不再打印,除非设置了详细日志记录。主图形区域包含短期响度(3秒分析),右侧的仪表用于瞬时响度(400毫秒)。

    有关Loudness Recommendation EBU R128的更多信息,请访问http://tech.ebu.ch/loudness

    过滤器接受以下选项:

    video
    

    激活视频输出。无论此选项是否设置,音频流都将保持不变。如果激活,视频流将是第一个输出流。默认值为0

    size
    

    设置视频大小。此选项仅适用于视频。有关此选项的语法,请检查(ffmpeg-utils)视频大小语法。默认和最小分辨率为640x480

    meter
    

    设置EBU比例计。默认值为9。对于EBU刻度表+9EBU刻度表+18,常用值分别为918。允许此范围之间的任何其他整数值。

    metadata
    

    设置元数据注入。如果设置为1,则音频输入将被分段为100ms输出帧,每个输出帧包含元数据中的各种响度信息。所有元数据键都以lavfi.r128为前缀。

    默认值为0

    framelog
    

    强制帧日志记录级别。

    可用值如下所示:

    解释
    info 信息记录水平
    verbose 详细的日志记录级别

    默认情况下,日志记录级别设置为info。 如果设置了‘video’‘metadata’选项,则会切换到详细信息。

    peak
    

    设置峰值模式。

    可以累积可用模式(选项是标志类型)。 可能的值如下所示:

    解释
    none 禁用任何峰值模式(默认)
    sample 启用采样峰值模式。

    简单的峰值模式寻找更高的样本值。 它记录样本峰值的消息(由SPK标识)
    true 启用真峰值模式

    如果启用,峰值查找将在输入流的过采样版本上完成,以获得更好的峰值精度。 它记录了一个真正的峰值消息。 (由TPK标识)和每帧的真峰值(由FTPK识别)。 此模式需要使用libswresample构建
    dualmono
    

    将单声道输入文件视为"dual mono"(双单声道)。 如果单声道文件用于在立体声系统上播放,则其EBU R128测量将在感知上不正确。 如果设置为true,则此选项将补偿此效果。 多通道输入文件不受此选项的影响。

    panlaw
    

    设置用于测量双单声道文件的特定pan定律。 此参数是可选的,默认值为-3.01dB

    32.8.1 示例

    • 使用ffplay的实时图表,EBU刻度表+18

        ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
      
    • 使用ffmpeg运行分析:

        ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
      

    32.9 interleave, ainterleave

    从几个输入暂时交错帧。

    interleave用于视频输入,带有音频的交错。

    这些过滤器从多个输入读取帧,并将最旧的排队帧发送到输出。

    输入流必须具有明确定义的,单调递增的帧时间戳值。

    为了将一个帧提交到输出,这些过滤器需要为每个输入排队至少一个帧,因此如果一个输入尚未终止且不接收传入帧,则它们不能工作。

    例如,考虑一个输入是总是丢弃输入帧的选择过滤器的情况。交错滤波器将继续从该输入读取,但在输入发送流末端信号之前,它将永远无法发送新帧。

    此外,根据输入同步,如果一个输入接收的帧数多于其他输入,则过滤器将丢弃帧,并且队列已经填满。

    这些过滤器接受以下选项:

    nb_inputs,n
    

    设置不同输入的数量,默认为2

    32.9.1 示例

    • 使用fmpeg交织属于不同流的帧:

        ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
      
    • 添加闪烁模糊效果:

        select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
      

    32.10 metadata, ametadata

    处理帧元数据。

    此过滤器接受以下选项:

    mode
    

    设置过滤器的操作模式。

    具体地址如下所示:

    解释
    select 如果同时设置了值和键,则选择具有此类元数据的帧。 如果仅设置了密钥,请选择元数据中具有此密钥的每个帧
    add 添加新的元数据键和值。 如果密钥已经可用则什么也不做
    modify 修改已存在的密钥的值
    delete 如果设置了值,则仅删除具有此值的键。 否则,删除密钥。 如果未设置密钥,则删除框架中的所有元数据值
    print 如果找到元数据,则打印密钥及其值。 如果未设置密钥,则打印框架中可用的所有元数据值
    key
    

    设置所有模式使用的密钥。 必须为除打印和删除之外的所有模式设置。

    value
    

    设置将使用的元数据值。 此选项对于修改和添加模式是必需的。

    function
    

    比较元数据值和值时使用哪个函数。

    可以是以下之一:

    解释
    same_str 值被解释为字符串,如果元数据值与value相同则返回true
    starts_with 值被解释为字符串,如果元数据值以值选项字符串开头,则返回true
    less 值被解释为浮点数,如果元数据值小于值,则返回true
    equal 值被解释为浮点数,如果值等于元数据值,则返回true
    greater 值被解释为浮点数,如果元数据值大于值,则返回true
    expr 值被解释为浮点数,如果选项expr的表达式求值为true,则返回true
    expr
    

    设置函数设置为expr时使用的表达式。 表达式通过eval API进行评估,并且可以包含以下常量:

    常量 解释
    VALUE1 从元数据键浮动表示值
    VALUE2 用户在值选项中提供的值的浮点表示
    file
    

    如果在打印模式下指定,则输出将写入指定的文件。 可以指定任何可写URL而不是纯文件名。 文件名-是标准输出的简写。 如果未设置file选项,则使用AV_LOG_INFO loglevel将输出写入日志。

    32.10.1 示例

    • 使用键为lavfi.signalstats.YDIF且帧值介于01之间的帧打印所有元数据值。

        signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
      
    • silencedetect输出打印到文件'metadata.txt'

        silencedetect,ametadata=mode=print:file=metadata.txt
      
    • 将所有元数据定向到具有文件描述符4的管道。

        metadata=mode=print:file='pipe\:4'
      

    32.11 perms, aperms

    设置输出帧的读/写权限。

    这些过滤器主要针对开发人员在filtergraph中的以下过滤器中测试直接路径。

    过滤器接受以下选项:

    mode
    

    选择权限模式。

    它接受以下值:

    解释
    none 没做什么。 这是默认值
    ro 将所有输出帧设置为只读
    rw 将所有输出帧直接设置为可写
    toggle 如果可写,则将帧设置为只读,如果是只读,则使其可写
    random 将每个输出帧设置为只读或可随机写入
    seed
    

    设置随机模式的种子,必须是0到UINT32_MAX之间的整数。 如果未指定,或者显式设置为-1,则过滤器将尝试在尽力而为的基础上使用良好的随机种子。

    注意:如果在权限过滤器和后续过滤器之间使用自动插入过滤器,则可能无法在后续过滤器中按预期接收权限。 在perms / aperms过滤器之前插入格式或格式过滤器可以避免此问题。

    32.12 realtime, arealtime

    减慢过滤以近似匹配实时。

    这些过滤器将暂停过滤一段可变的时间,以使输出速率与输入时间戳匹配。 它们类似于ffmpeg're'选项。

    他们接受以下选择:

    limit
    

    暂停的时间限制。 任何比此更长的暂停都将被视为时间戳不连续并重置计时器。 默认值为2秒。

    32.13 select, aselect

    选择要传递输出的帧。

    此过滤器接受以下选项:

    expr,e
    

    设置表达式,为每个输入框计算。

    如果表达式计算为零,则丢弃该帧。

    如果评估结果为负或NaN,则将帧发送到第一输出;假设输入索引从0开始,则以索引ceil(val)-1发送到输出。

    例如,值1.2对应于索引ceil(1.2)-1 = 2-1 = 1的输出,即第二输出。

    outputs, n
    

    设置输出数量。发送所选帧的输出基于评估结果。默认值为1

    表达式可以包含以下常量:

    n
    

    过滤帧的(顺序)编号,从0开始。

    selected_n
    

    所选帧的(顺序)编号,从0开始。

    prev_selected_n
    

    最后一个选定帧的序号。如果未定义则为NAN

    TB
    

    输入时间戳的时基。

    pts
    

    经过滤的视频帧的PTS(Presentation TimeStamp),以TB为单位表示。如果未定义则为NAN

    t
    

    滤波视频帧的PTS,以秒为单位表示。如果未定义则为NAN

    prev_pts
    

    先前过滤的视频帧的PTS。如果未定义则为NAN

    prev_selected_pts
    

    最后一次过滤的视频帧的PTS。如果未定义则为NAN

    prev_selected_t
    

    最后一个选定视频帧PTS,以秒为单位表示。如果未定义则为NAN

    start_pts
    

    视频中第一个视频帧的PTS。如果未定义则为NAN

    start_t
    

    视频中第一个视频帧的时间。如果未定义则为NAN

    pict_type (video only)
    

    过滤帧的类型。它可以采用以下值之一:

    I
    P
    B
    S
    SI
    SP
    BI
    interlace_type (video only)
    

    帧交错类型。 它可以采用以下值之一:

    解释
    PROGRESSIVE 帧是渐进的(不是交错的)
    TOPFIRST 该帧首先是顶场
    BOTTOMFIRST 帧是底场优先
    consumed_sample_n (audio only)
    

    当前帧之前所选样本的数量。

    samples_n (audio only)
    

    当前帧中的样本数

    sample_rate (audio only)
    

    输入采样率

    key
    

    如果过滤的帧是关键帧,则此值为1,否则为0

    pos
    

    过滤帧文件中的位置,如果信息不可用,则为-1(例如合成视频)

    scene (video only)
    

    01之间的值表示新场景;较低的值反映了当前帧引入新场景的概率较低,而较高的值意味着当前帧更可能是一个(参见下面的示例)

    concatdec_select
    

    concat解复用器可以通过设置入点和出点来仅选择连接输入文件的一部分,但输出数据包可能不完全包含在所选间隔中。通过使用此变量,可以跳过由concat demuxer生成的帧,这些帧并未精确地包含在所选区间中。

    这通过将帧ptslavf.concat.start_time和也存在于解码帧中的lavf.concat.duration包元数据值进行比较来起作用。

    如果帧pts至少是start_time并且缺少持续时间元数据或者帧pts小于start_time + duration,则concatdec_select变量为-1,否则为0,如果缺少start_time元数据,则为NaN

    这基本上意味着如果输入帧的ptsconcat demuxer设置的区间内,则选择输入帧。

    select表达式的默认值为1

    32.13.1 示例

    • 选择输入中的所有帧:

        select
      

      上面的例子和下面的表达意思一样:

      select=1

    • 跳过所有帧:

        select=0
      
    • 仅选择I帧:

        select='eq(pict_type\,I)'
      
    • 100个选择一个帧:

        select='not(mod(n\,100))'
      
    • 仅选择10-20时间间隔中包含的帧:

        select=between(t\,10\,20)
      
    • 仅选择10-20时间间隔中包含的I帧:

        select=between(t\,10\,20)*eq(pict_type\,I)
      
    • 选择最小距离为10秒的帧:

        select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
      
    • 使用aselect仅选择样本编号> 100的音频帧:

        aselect='gt(samples_n\,100)'
      
    • 创建第一个场景的马赛克:

        ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
      

    将场景与0.30.5之间的值进行比较通常是一种理智的选择。

    • 将偶数帧和奇数帧发送到单独的输出,并组成它们:

        select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
      
    • ffconcat文件中选择有用的帧,该文件使用入点和出点,但源文件不是帧内帧。

        ffmpeg -copyts -vsync 0 -segment_time_metadata 1 -i input.ffconcat -vf select = concatdec_select -af aselect = concatdec_select output.avi
      

    相关文章

      网友评论

        本文标题:FFplay文档解读-48-多媒体过滤器二

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