FFplay文档解读-49-多媒体过滤器三

本文深入解析了FFmpeg中的多媒体过滤器,包括sendcmd、asendcmd、setpts、asetpts等,详细介绍了它们的用途、命令语法和示例,帮助读者理解如何在音视频处理中使用这些过滤器进行精确控制。同时,提供了学习资源链接和相关音视频学习资料。
摘要由CSDN通过智能技术生成

32.14 sendcmd, asendcmd

将命令发送到filtergraph中的过滤器。

这些过滤器读取要发送到filtergraph中其他过滤器的命令。

必须在两个视频滤镜之间插入sendcmd,必须在两个音频滤镜之间插入asendcmd,但除此之外,它们的行为方式相同。

可以使用commands选项在filter参数中提供命令规范,也可以在filename选项指定的文件中提供命令规范。

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

commands, c

设置要读取的命令并将其发送到其他过滤器。

filename,f

设置要读取的命令的文件名并将其发送到其他过滤器。

32.14.1 命令语法

命令描述由一系列间隔规范组成,包括当与该间隔相关的特定事件发生时要执行的命令列表。 发生的事件通常是进入或离开给定时间间隔的当前帧时间。

间隔由以下语法指定:

START[-END] COMMANDS;

时间间隔由STARTEND时间指定。 END是可选的,默认为最长时间。

如果当前帧时间包含在间隔[START,END]中,即当时间大于或等于START且小于END时,则认为当前帧时间在指定的时间间隔内。

命令由一个或多个命令规范的序列组成,由","分隔,与该间隔有关。 命令规范的语法由下式给出:

[FLAGS] TARGET COMMAND ARG

FLAGS是可选的,它指定与发送指定命令的时间间隔相关的事件类型,并且必须是由"+""|"分隔的非空序列标识符标志。 并包含在"["and"]"之间。

识别以下标志:

标志 解释
enter 当前帧时间戳进入指定的时间间隔时发送该命令。 换句话说,当前一帧时间戳不在给定的时间间隔内时,发送命令,并且当前是
leave 当前帧时间戳离开指定的时间间隔时发送该命令。 换句话说,当前一帧时间戳在给定间隔内时发送命令,而当前帧时间戳不在给定间隔内

如果未指定FLAGS,则假定为[enter]的默认值。

TARGET指定命令的目标,通常是过滤器类的名称或特定的过滤器实例名称。

COMMAND指定目标过滤器的命令名称。

ARG是可选的,它指定给定COMMAND的可选参数列表。

在一个间隔规范和另一个间隔规范之间,空格或以#开头直到行尾的字符序列将被忽略,并可用于注释注释。

命令规范语法的简化BNF描述如下:

COMMAND_FLAG  ::= "enter" | "leave"
COMMAND_FLAGS ::= COMMAND_FLAG [(+|"|")COMMAND_FLAG]
COMMAND       ::= ["[" COMMAND_FLAGS "]"] TARGET COMMAND [ARG]
COMMANDS      ::= COMMAND [,COMMANDS]
INTERVAL      ::= START[-END] COMMANDS
INTERVALS     ::= INTERVAL[;INTERVALS]

学习地址:音视频新手快速入门必备系列-FFmpeg+SDL播放器开发实现-学习视频教程-腾讯课堂
【文章福利】免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

32.14.2 示例

  • 在第二个4指定音频速度变化:

      asendcmd=c='4.0 atempo tempo 1.5',atempo
    
  • 定位特定的过滤器实例:

      asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
    
  • 在文件中指定drawtexthue命令的列表。

      # show text in the interval 5-10
      5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
       [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
    
      # desaturate the image in the interval 15-20
      15.0-20.0 [enter] hue s 0,
        [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
        [leave] hue s 1,
        [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
    
      # apply an exponential saturation fade-out effect, starting from time 25
      25 [enter] hue s exp(25-t)
    

允许读取和处理存储在文件'test.cmd'中的上述命令列表的过滤器图可以用以下内容指定:

sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue

32.15 setpts, asetpts

更改输入帧的PTS(演示时间戳)。

setpts适用于视频帧,音频帧上的设置。

此过滤器接受以下选项:

expr

为每个帧计算的表达式,以构造其时间戳。

表达式通过eval API进行评估,并且可以包含以下常量:

FRAME_RATE

帧速率,仅针对恒定帧速率视频定义

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值