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

news2025/7/21 0:44:47

32.8 ebur128

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

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

过滤器接受以下选项:

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

设置峰值模式。

【学习地址】音视频新手快速入门必备系列-FFmpeg+SDL播放器开发实现-学习视频教程-腾讯课堂
 

【文章福利】免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~  

 

  

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

解释
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
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单工厂,工厂方法,抽象工厂模式

软件设计七大原则 一、简单工厂(静态工厂方法) 它存在的目的很简单:定义一个创建对象的接口。组成: 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻 辑。在java中它往往由一个具体类实现。 抽…

南非醉茄来源的天然产物之活性大盘点

图 1. 南非醉茄 (Withania Somnifera) 的多种药理活性[2] 化学成分 到目前为止,大约有超过 12 种生物碱和 40 多种甾体内脂类化合物从南非醉茄中被分离出来 。其中,醉茄内脂 (Withanolides) 因其广泛的药理活性 (抗肿瘤、抗菌、抗炎和免疫调节活性等) 受…

RabbitMQ系列【9】过期时间

有道无术,术尚可求,有术无道,止于术。 文章目录概念队列过期控制台代码消息过期删除策略概念 TTL全称Time To Live,是指存活时间或过期时间。当消息到达存活时间后,还没有被消费,会被自动清除。 RabbitMQ…

二十六、设置时序电路初始状态的方法(初始值设置)

----------------------------------------------------------------------------------------------------- 该专栏主要介绍用场效应管设计基本电路,由浅到深,从用场效应管设计最基本的非门、与非门、或非门、与门、或门的设计,到用场效应管设计触发,再到用场效应管设计具…

【论文阅读】Combinatorial Benders’ Cuts for the Strip Packing Problem

文章目录一、摘要二、求解条形装箱的Benders分解2.1 Notation2.2 SPP的数学逻辑模型2.3 分解方法三、从问题的解决方案3.1 复杂性分析3.2 y-check的算法3.2.1 预处理过程3.2.1.1 Merge Items 合并项目3.2.1.2 Lift Item Widths 增大项目宽度3.2.1.3 Shrink the Strip 缩小长条容…

实战+代码!Selenium + Phantom JS爬取天天基金数据

功能: 通过程序实现从基金列表页,获取指定页数内所有基金的近一周收益率以及每支基金的详情页链接。再进入每支基金的详情页获取其余的基金信息,将所有获取到的基金详细信息按近6月收益率倒序排列写入一个Excel表格。 思路: 通过…

python-pandas用法大全

目录1 修改 DataFrame 某一列的数据类型2 读取和保存3 特定值的替换4 两个 DataFrame 的连接4.1 join4.2 某列作为拼接的依据5 删除某一列5.1 删除第n列5.2 删除特定名称列6 行、列重排6.1列重排6.2 行重排6.3 根据某一列的值排序6.4 随机打乱所有行7 修改某列的名称7.1 全局修…

m基于自适应门限软切换的3G和Wifi垂直切换算法的matlab仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB预览 4.完整MATLAB程序 1.算法概述 这里还是考虑位置信息和强度联合切换判决的方法,如果你的设备没法提供具体的位置信息的话,那么就把位置信息的权值设置为0。强度判决的权值设置为1即可。 需要传输的数…

外业精灵,在水土流失监测野外调查工作中的应用

常规的水土流失野外调查技术已难以满足现阶段区域水土流失监测工作的需求。 为探索高效、精准、高质量的水土流失数据采集技术,作者以山东沂蒙山泰山国家级重点治理区蒙阴县为例,以小流域或公里网格为调查单元,通过分析外业精灵的技术优势&a…

webpack高级配置

摇树(tree shaking) 我主要是想说摇树失败的原因(tree shaking 失败的原因),先讲下摇树本身效果 什么是摇树? 举个例子 首先 webpack.config.js配置 const webpack require("webpack");/**…

Educational Codeforces Round 138 (Rated for Div. 2)

A:思维 题意:给一定的N*N的板子,里面放有一些乌鸦,这些乌鸦会攻击自己的所在行与所在列,问给定一个数量的乌鸦,问是否能够移动某只乌鸦,使得形成和平局面? 方法:我们发现…

股票涨跌量化怎样进行策略分析?

股票涨跌量化其实是通过Python调用Tushare库计算深证成指实时,对股票的成交量涨跌幅,主要是通过相关分析选择合适的成交量涨跌幅来计算的一种量化策略分析方法,也可以根据绘制股票的成交量涨跌幅度与当日股价的涨跌幅描绘出来。如果我们想快速…

目标检测论文解读复现之八:基于YOLOv5s的滑雪人员检测研究

前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

Unity使用NaveMesh实现第一人称视角移动

系列文章目录 Navemesh寻路系列文章 文章目录 目录 系列文章目录 文章目录 前言 一、NavMeshPath是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 navemesh已经大量使用到游戏中,但大部分寻路都是使用SetDestination函数,给予一个目标…

SpringBoot+Vue项目大学校园防疫与服务系统的设计与实现

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JDK版…

C++初阶 Vector模拟实现

q. > 作者:小萌新 专栏:C初阶 作者简介:大二学生 希望能和大家一起进步 本篇博客介绍:本篇博客会模拟Vector实现 学习目标 模拟默认函数实现模拟迭代器实现模拟容器大小相关函数模拟修改内容相关函数模拟访问容器相关函数 我…

xss挑战之旅11-19关

文章目录前言第11关:referer第12关:User-Agent第13关:cookie第14关:exif xss第15关:ng-include第16关第17关第18关第19关:flash xss前言 靶场:XSS挑战之旅 1-10关 11-20关 第11关:r…

『LeetCode|每日一题』---->颜色填充

目录 1.每日一句 2.作者简介 『LeetCode|每日一题』颜色填充 1.每日一题 2.解题思路 2.1 思路分析(DFS) 2.2 核心代码 2.3 完整代码 2.4 运行结果 1.每日一句 我的宇宙为你藏着无数个星球 2.作者简介 🏡个人主页:XiaoXiaoChe…

Git之路

文章目录指南介绍实战任务一:sb项目任务二:idea实战任务三:分支实战(待续)指南 如果你想在简历上写“会常用的Git的命令“,那么这篇文章值得你要看,那我们需要掌握什么呢?其实会简单的操作就行&#xff0c…

Matplotlib绘图-快速上手可视化工具

Matplotlib快速上手一、初识Matplotlib1.1 认识Matplotlib的图像结构1.2 绘制一个折线图二、给图像添加修饰2.1 自定义x的刻度2.2一图多线2.3一图绘制多个坐标系子图三、主流图形的绘制3.1绘制柱状图一、初识Matplotlib 是Python最常见的可视化工具之一 1.1 认识Matplotlib的…