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

前言

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
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容