翻译ffmpeg-all文档(40),多媒体滤镜

3090阅读 0评论2015-07-28 xdsnet
分类:其他平台

多媒体滤镜

下面介绍当前有效的多媒体滤镜

avectorscope

转换输入音频到视频输出以代表音频矢量范围(一种图形化音频处理)

这个滤镜用来测量立体声音频中两路音频间的区别。如果是单声道信号做成的2个声道(左右耳声道),因为两路完全相同(其实只有1路),所以输出是一 个垂直的直线(表示二者无差别)。如果是立体声信号(两路肯定或多或少有差别),则创建一个利萨如(Lissajous)图形,其水平看,线长度与相位等 表征了两个声道差异情况。

滤镜接受如下选项:

avectorscope例子

concat

连接音频和视频流,把加入的一个接一个的在一起

这个滤镜用于按段同步视频和音频流。所有的段都必须有相同的流(类型和个数),输出也是相同流(类型和个数)

滤镜支持如下选项:

滤镜有 v+a的输出:先是一个视频输出,然后是音频输出。

n x (v+a):有n段输出,每段都是v+a

相关的流并不总是有相同的时间,由于各种原因还包括不同的编解码帧大小或创作草稿。因此相关同步流(视频和对应音频)要连接,concat滤镜将选择持续最长的流(视频的)为基准(除最后段的流),在每个流播放时通过让音频流垫长(重复部分)或者静默(截断)来实现视频流连续。

为了让滤镜工作正常,所有段都必须以0为时间戳开始。

所有应用的流在所有共同的领域必须有相同的参数,滤镜会自动选择一个通用的像素格式(色彩标注、编码颜色的标准和位深等),以及音频采样率和通道布局。但其他设置如视频分辨率必须由用户显式转换。

不同的帧率是可以接受的,但会导致输出帧率的变化,一定要配置输出文件来处理。

concat例子

ebur128

EBU R128 扫描滤镜,这个滤镜需要一个音频流,但会原样输出。默认情况下,会显示10H更新频率下,的瞬时响度(M)、短期响度(S)、集成响度(I)和响度范围(LRA)

滤镜有一个实时视频输出,展示响度变化。因为上述图像不停更新,所以它不可打印化输出,除非详细日志被设置。主要的绘图区域包含短期响度(3秒分析),以及其后的瞬时响度(400毫秒)

关于EBU R128响度滤镜的更多信息参考视频尺寸章节。默认640x480.

  • meter

    设置EBU的规模计。默认为9,通用值是9和18,对应于规模计+9和+18.任何非负整数是可以的。

  • metadata

    设置添加的元数据。如果为1,音频输入将被划分为100毫秒的输出帧。他们每个都包含各种响应信息元数据。所有的元数据键前又缀有lavfi.r128..

    默认为0.

  • framelog

    强制帧日志层次,允许值:

    ‘info’

    信息日志层次 

    ‘verbose’

    冗长日志层次 

    默认为info,如果设置视频或者元数据则选择verbose

  • peak

    设置峰顶模式

    有效的模式可以累积(可选标志类型),可能的值:

    ‘none’

    没有任何峰顶模式(默认) 

    ‘sample’

    允许sample-peak模式 mode.
    
    简单的峰值模式,其只寻找高样本值. 在日志中有一个`sample-peak`消息 (标记有SPK). 

    ‘true’

    允许true-peak模式
    
    如果启用,峰值查找是一个over-sampled版本的输入流,其峰值精度更佳,在日志中有一个`true-peak`消息 (标记有TPK),且每个帧有一个`true-peak` (标记有FTPK)。这种模式需要与libswresample构建。 
  • ebur128例子

    interleave和ainterleave

    从多个输入中暂时交错帧,interleave用于视频输入,ainterleave用于音频输入。

    这个滤镜从多个输入读取帧,然后然后按一定顺序(最老的先发送)发送给输出。

    输入流必须有定义良好的、递增的帧时间戳。

    为了提交一帧输出,滤镜需至少在一个框架内为每个输入排序,所以不能工作在一个输入还没有终止情况,也不会接收传入帧(持续生存的)

    例如考虑一个输入是select滤镜其可以按帧丢弃,interleave滤镜会保持从输入读取,但不发送任何帧到输出直到输入发送来end-of-stream信号。

    另外,根据输入同步,滤镜将丢帧,以防止一个输入收到比其他帧(时间戳)偏离太多,和队列满时

    滤镜接受下面选项:

    perms和aperms

    为输出帧设置读/写权限

    这些滤镜主要针对开发人员测试下面的滤镜链图的直接路径滤镜

    这个滤镜接受下面选项:

    注意实际在许可-permission滤镜和其跟随的滤镜之间可能会自动插入滤镜,则许可滤镜可能不会有预期的效果给随后的滤镜,要避免这样的问题,可以在许可滤镜之前插入format或者aformat滤镜(分别针对perms/aperms)。

    select和aselect

    选择一些帧来输出

    滤镜接受下面的选项:

    表达式允许下面的内容:

    表达式的默认值是1

    select和aselect例子

    sendcmd和asendcmd

    在滤镜链图中向滤镜发送命令

    这个滤镜读取命令来发送给滤镜链图中的滤镜

    其中sendcmd用于两个视频滤镜间,asendcmd用于两个音频滤镜间。除此之外它们采用相同方式。

    命令可以是规范的滤镜commands选项的参数或者指定在filename文件选项所指文件中。

    它接受如下选项:

    sendcmd和asendcmd命令语法

    命令是一个序列间隔规则(由分隔),包括一个特定事件时段执行的命令列表。触发事件通常是当前帧的时间达到或者离开一个给定的时间段。

    一个时间段命令由以下语法描述:

    START[-END] COMMANDS; 

    时间段描述由STARTEND(可选,默认为最大时间)指定

    判断当前帧是否在指定时间段[START,END),既判断当前帧的时间是否大于等于START,且小于END

    这里COMMANDS是对应于时间段的一个或者由分隔的多个命令序列。一个命令的语法规范是:

    [FLAGS] TARGET COMMAND ARG 

    这里FLAGS是可选的,用于指定事件类型与指定时间段关系的(命令发生发送频次),必须由非空标识符,以及+|[]封闭的字符,标志有:

    如果FLAGS没有指定,则默认为[enter]

    这里TARGET是指定命令发送的目标,通常为滤镜类型名字或者滤镜实例名字。而COMMAND是发送给目标的命令名字,ARG是对应的选项参数。

    一个简单的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] 

    sendcmd和asendcmd例子

    setpts和asetpts

    修改发布时间戳(PTS-presentation timestamp),对于输入帧。

    其中setpts对于视频帧,asetpts对于音频帧

    滤镜允许如下选项:

    表达式通过evalAPI和下面一些常量来计算:

    setpts和asetpts例子

    settb和asettb

    设置输出帧时间戳的时基。它主要用于测试时基配置。

    其可以接受如下选项:

    这里的tb值是一个可得出有理数值的表达式或者值。常数可以包含“AVTB”(默认时基),“intb”(输入时基)和“sr”(采样率,只音频)。默认值是“intb”

    settb和asettb例子

    showcqt

    转换音频输入为一个频谱视频输出(用恒Q变换Brown-Puckette算法),乐音的规模从E0D#10(10个8度)

    滤镜接受如下选项:

    showcqt例子

    showspectrum

    转换音频输入为一个视频频谱

    滤镜接受如下选项:

    它类似于showwaves滤镜,看下面的例子

    showspectrum例子

    showwaves

    转换音频输入为视频输出(代表采样波形),接受如下选项:

    showwaves例子

    showwavespic

    转换音频输入为视频输出(代表采样波形),接受如下选项:

    其中asplit对于音频工作,split对于视频工作

    这个滤镜接受单个指定输出个数的参数,如果不指定,默认为2

    split和asplit例子

    zmq和azmq

    接受从libzmq客户端发送来的命令,并将它们发送给滤镜链图中的滤镜。

    这里zmqazmq都是直通滤镜,只是zmq工作于两个视频滤镜间,而azmq工作于两个音频滤镜间。

    编译需要libzmq库以及头文件,并采样--enable-libzmq配置

    关于libzmq的更多信息参考

    为了改变视频左边的颜色,下面的命令被使用:

    echo Parsed_color_0 c yellow | tools/zmqsend 

    如果要改变右边:

    echo Parsed_color_1 c pink | tools/zmqsend 
    上一篇:翻译ffmpeg-all文档(39),视频槽
    下一篇:翻译ffmpeg-all文档(41),多媒体源