FFplay文档解读-15-重采样器选项,缩放选项,过滤简介,graph2dot,滤波器描述,时间表编辑,具有多个输入的过滤器选项(帧同步)

19.重新采样器选项

音频重采样器支持以下命名选项。

可以通过在FFmpeg工具中指定-option值,为aresample过滤器指定option = value,通过在SwrContext选项中显式设置值或使用libavutil / opt.h``API进行编程来设置选项。

ich,in_channel_count

设置输入通道的数量。默认值为0。如果设置了相应的通道布局in_channel_layout,则不必设置此值。

och,out_channel_count

设置输出通道的数量。默认值为0。如果设置了相应的通道布局out_channel_layout,则不必设置此值。

uch,used_channel_count

设置已使用输入通道的数量。默认值为0。此选项仅用于特殊重映射。

isr,in_sample_rate

设置输入采样率。默认值为0

osr,out_sample_rate

设置输出采样率。默认值为0

isf,in_sample_fmt

指定输入样本格式。它默认设置为none

osf,out_sample_fmt

指定输出样本格式。它默认设置为none

tsf,internal_sample_fmt

设置内部样本格式。默认值为none。未明确设置时,将自动选择此选项。

icl,in_channel_layout
ocl,out_channel_layout

设置输入/输出通道布局。

有关所需语法,请参阅(ffmpeg-utilschannel布局语法。

clev,center_mix_level

设置中心混音水平。它是以deciBel表示的值,并且必须在区间[-32,32]中。

slev,surround_mix_level

设置环绕声混音水平。它是以deciBel表示的值,并且必须在区间[-32,32]中。

lfe_mix_level

LFE混音设置为非LFE级别。当有LFE输入但没有LFE输出时使用。它是以deciBel表示的值,并且必须在区间[-32,32]中。

rmvol,rematrix_volume

设置rematrix卷。默认值为1.0

rematrix_maxval

设置重新矩阵的最大输出值。这可用于防止削波与防止音量减小。值1.0可防止剪裁。

flags, swr_flags

设置转换器使用的标志。 默认值为0

它支持以下各个标志:

解释
res 强制重新采样,即使输入和输出采样率匹配,此标志也会强制使用重采样
dither_scale

设置抖动比例。 默认值为1

dither_method

设置抖动方法。 默认值为0

支持如下的值:

解释
rectangular 选择矩形抖动
triangular 选择三角形抖动
triangular_hp 选择高通三角形抖动
lipshitz 选择Lipshitz噪音塑造抖动
shibata 选择Shibata噪音整形抖动
low_shibata 选择低Shibata噪声整形抖动
high_shibata 选择高Shibata噪声整形抖动
f_weighted 选择f加权噪声整形抖动
modified_e_weighted 选择修改的e加权噪声整形抖动
improved_e_weighted 选择改进的e加权噪声整形抖动
resampler

设置重采样引擎。 默认值为swr

支持的值如下:

解释
swr 选择原生SW重采样器; 过滤器选项精度和cheby在这种情况下不适用
soxr 选择SoX重采样器(如果可用); 补偿和过滤器选项filter_size,phase_shift,exact_rational,filter_typekaiser_beta在这种情况下不适用
filter_size

仅对于swr,设置重采样过滤器大小,默认值为32

phase_shift

仅对于swr,设置重采样相移,默认值为10,并且必须在区间[0,30]中。

linear_interp

启用时使用线性插值(默认值)。 如果要在exact_rational失败时保持速度而不是质量,请禁用它。

exact_rational

仅对于swr,启用时,尝试根据输入和输出采样率使用精确的phase_count。 但是,如果它大于1 << phase_shift,则phase_count将为1 << phase_shift作为后退。 默认值已启用。

cutoff

设置截止频率(swr:6dB点; soxr:0dB点)比率; 必须是介于01之间的浮点值。默认值为0.97(swr)0.91(soxr)(采样率为44100,保留整个音频频段为20kHz)。

precision

仅对于soxr,将计算重采样信号的位精度。 默认值20(通过适当的抖动,适用于目标位深度为16),可以得到SoXHigh Quality; 值28表示SoXVery High Quality

cheby

仅对于soxr,选择passband rolloff none(Chebyshev)irrational比率的更高精度近似。 默认值为0

async

仅对于swr,使用拉伸,挤压,填充和修剪的简单1参数音频同步到时间戳。 将此值设置为1将启用填充和修剪,较大的值表示样本中每秒可以拉伸或挤压数据的最大量。 默认值为0,因此不会应用补偿使样本与音频时间戳匹配。

first_pts

仅对于swr,假设第一个pts应为此值。 时间单位是1 / sample rate。 这允许在流的开始处进行padding/trimming。 默认情况下,不会对第一帧的预期pts做出假设,因此不会进行填充或修剪。 例如,如果音频流在视频流之后开始,则可以将其设置为0以用静音填充开头,或者由于编码器延迟而用负pts修剪任何样本。

min_comp

仅对于swr,设置时间戳和音频数据之间的最小差异(以秒为单位),以触发拉伸/挤压/填充或修剪数据,使其与时间戳匹配。 默认情况下,拉伸/挤压/填充和修剪被禁用(min_comp'= FLT_MAX)。

min_hard_comp

仅对于swr,设置时间戳和音频数据之间的最小差异(以秒为单位)以触发添加/删除样本以使其与时间戳匹配。 此选项实际上是在hard (trim/fill)soft (squeeze/stretch)补偿之间进行选择的阈值。 请注意,默认情况下,通过min_comp禁用所有补偿。 默认值为0.1

comp_duration

仅对于swr,设置延长/挤压数据的持续时间(以秒为单位),使其与时间戳匹配。 必须是非负双浮点值,默认值为1.0

max_soft_comp

仅对于swr,设置拉伸/挤压数据的最大因子,使其与时间戳匹配。 必须是非负双浮点值,默认值为0

matrix_encoding

选择矩阵立体声编码。

它接受以下值:

解释
none 选择none
dolby 选择dolby
dplii 选择Dolby Pro Logic II

默认值是none

filter_type

仅对于swr,选择重采样过滤器类型。 这仅影响重采样操作。

它接受以下值:

解释
cubic 选择立方体
blackman_nuttall 选择Blackman Nuttall窗口sinc
kaiser 选择Kaiser窗口sinc
kaiser_beta

仅对于swr,设置Kaiser窗口beta值。 必须是区间[2,16]中的双浮点值,默认值为9

output_sample_bits

仅对于swr,设置用于抖动的已使用输出采样位数。 必须是区间[0,64]中的整数,默认值为0,这意味着它不被使用。

20.缩放选项

视频缩放器支持以下命名选项。

可以通过在FFmpeg工具中指定-option值来设置选项。 对于程序化使用,可以在SwsContext选项中或通过libavutil / opt.h``API显式设置它们。

sws_flags

设置缩放器标志。 这也用于设置缩放算法。 只应选择一个算法。 默认值为bicubic

它接受以下值:

解释
fast_bilinear 选择快速双线性缩放算法
bilinear 选择双线性缩放算法
bicubic 选择双三次缩放算法
experimental 选择实验缩放算法
neighbor 选择最近邻居重新缩放算法
area 选择平均区域重新缩放算法
bicublin 为亮度分量选择双三次缩放算法,为色度分量选择双线性
gauss 选择高斯重新缩放算法
sinc 选择sinc重新缩放算法
lanczos 选择Lanczos重新缩放算法
spline 选择自然双三次样条重新缩放算法
print_info 启用打印/调试日志记录
accurate_rnd 启用精确舍入
full_chroma_int 启用全色度插值
full_chroma_inp 选择全色度输入
bitexact 启用bitexact输出
srcw

设置源宽度。

srch

设置源高度。

dstw

设置目标宽度。

dsth

设置目的地高度。

src_format

设置源像素格式(必须表示为整数)。

dst_format

设置目标像素格式(必须表示为整数)。

src_range

选择源范围。

dst_range

选择目的地范围。

param0,param1

设置缩放算法参数。 指定的值特定于某些缩放算法,并被其他人忽略。 指定的值是浮点数值。

sws_dither

设置抖动算法。 接受以下值之一。 默认值为auto

解释
auto 自动选择
none 没有抖动
bayer bayer抖动
ed 误差扩散抖动
a_dither 算术抖动,基于加法
x_dither 算术抖动,使用xor(更随机/更不明显的图案化a_dither
alphablend

设置alpha混合以在输入具有alpha但输出不具有alpha时使用。 默认值为none

解释
uniform_color 混合均匀的背景颜色
checkerboard 混合到棋盘上
none 没有混合

21.过滤简介

通过libavfilter库启用FFmpeg中的过滤。

libavfilter中,过滤器可以有多个输入和多个输出。 为了说明可能的事情,我们考虑以下过滤器图。

                [main]
input --> split ---------------------> overlay --> output
        |                             ^
        |[tmp]                  [flip]|
        +-----> crop --> vflip -------+

此过滤器图将输入流分成两个流,然后通过裁剪过滤器和vflip过滤器发送一个流,然后通过将其重叠在顶部将其与另一个流合并。 可以使用以下命令来实现此目的:

ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT

结果是视频的上半部分镜像到输出视频的下半部分。

同一线性链中的过滤器用逗号分隔,过滤器的不同线性链用分号分隔。在我们的示例中,crop,vflip在一个线性链中,splitoverlay分别在另一个中。线性链连接的点由方括号括起来的名称标记。在该示例中,分割滤波器生成两个与标签[main][tmp]相关联的输出。

发送到分割的第二个输出(标记为[tmp])的流通过裁剪滤镜处理,裁剪滤镜裁掉视频的下半部分,然后垂直翻转。叠加滤波器输入分割滤波器的第一个未改变的输出(标记为[main]),并在其下半部分覆盖由cropvflip滤波器链生成的输出。

有些过滤器会输入一个参数列表:它们在过滤器名称和等号后面指定,并用冒号分隔。

存在所谓的没有音频/视频输入的源滤波器,以及不具有音频/视频输出的宿滤波器。

22. graph2dot

FFmpeg``tools目录中包含的graph2dot程序可用于解析filtergraph描述并以点语言发出相应的文本表示。

调用命令如下:

graph2dot -h

看看如何使用graph2dot

然后,可以将点描述传递给dot程序(来自graphviz程序套件),并获得filtergraph的图形表示。

例如命令序列:

echo GRAPH_DESCRIPTION | \
tools/graph2dot -o graph.tmp && \
dot -Tpng graph.tmp -o graph.png && \
display graph.png

可用于创建和显示表示GRAPH_DESCRIPTION字符串描述的图形的图像。 请注意,此字符串必须是完整的自包含图形,并明确定义其输入和输出。 例如,命令行具有以下形式:

ffmpeg -i infile -vf scale=640:360 outfile

GRAPH_DESCRIPTION字符串必须是以下形式:

nullsrc,scale=640:360,nullsink

可能还需要设置nullsrc参数并添加格式过滤器以模拟特定的输入文件。

23.滤波器描述

滤波器图是连接滤波器的有向图。 它可以包含循环,并且一对过滤器之间可以有多个链接。 每个链路在一侧具有一个输入焊盘,将其连接到一个用于输入的滤波器,另一侧的一个输出焊盘将其连接到接受其输出的一个滤波器。

filtergraph中的每个过滤器都是应用程序中注册的过滤器类的实例,它定义了过滤器的特征和输入和输出焊盘的数量。

没有输入焊盘的滤波器称为source,没有输出焊盘的滤波器称为sink

23.1 Filtergraph语法

filtergraph有一个文本表示,由ffmpe中的-filter'/' - vf'/' - af-filter_complex选项以及ffplay中的-vf'/' - af识别,并由libavfilter / avfilter.h中定义的avfilter_graph_parse_ptr()函数。

过滤链由一系列连接的过滤器组成,每个过滤器连接到序列中的前一个过滤器。过滤链由 - 分隔的过滤器描述列表表示。

filtergraph由一系列过滤链组成。一系列过滤链由;列表表示 -分离的过滤链描述。

过滤器由以下形式的字符串表示:[in_link_1] ... [in_link_N] filter_name @ id = arguments [out_link_1] ... [out_link_M]

filter_name是过滤器类的名称,其描述的过滤器是其实例,并且必须是在程序中注册的过滤器类之一的名称,可选地后跟@id。筛选器类的名称后跟可选的字符串= arguments

arguments是一个字符串,其中包含用于初始化过滤器实例的参数。它可能有以下两种形式之一:

  • 一个 - key=value对的分隔列表。

  • 一个 - 分隔的值列表。 在这种情况下,键被假定为声明它们的顺序中的选项名称。 例如。 淡入淡出过滤器按此顺序声明三个选项 - typestart_framenb_frames。 然后参数列表:0:30表示将值分配给选项type0分配给start_frame30分配给nb_frames

  • - 混合直接值和长key=value对的分隔列表。 直接值必须在key=value对之前,并遵循前一点的相同约束顺序。 可以按任何首选顺序设置以下key = value对。

如果选项值本身是项目列表(例如,格式过滤器采用像素格式列表),则列表中的项目通常用|分隔。

可以使用字符'作为起始和结束标记引用参数列表,并使用字符\来引用引用文本中的字符;否则,当遇到下一个特殊字符(属于集合[] =;,)时,参数字符串被视为终止。

过滤器的名称和参数可选地前面和后面是链接标签列表。链接标签允许用户命名链接并将其与过滤器输出或输入板相关联。前面的标签in_link_1 ... in_link_N与滤波器输入焊盘相关联,以下标签out_link_1 ... out_link_M与输出焊盘相关联。

当在filtergraph中找到两个具有相同名称的链接标签时,将创建相应输入和输出板之间的链接。

如果未标记输出焊盘,则默认情况下将其链接到滤波器链中下一个滤波器的第一个未标记输入焊盘。例如在过滤链中

nullsrc, split[L1], [L2]overlay, nullsink

分离滤波器实例有两个输出pads,而叠加滤波器实例有两个输入pads。 分割的第一输出垫标记为L1,覆盖的第一输入垫标记为L2,并且分割的第二输出垫链接到覆盖的第二输入垫,其均未标记。

在过滤器描述中,如果未指定第一个过滤器的输入标签,则假定为in; 如果未指定最后一个过滤器的输出标签,则假定为out

在完整的滤波链中,必须连接所有未标记的滤波器输入和输出焊盘。 如果所有滤波器链的所有滤波器输入和输出焊盘都连接在一起,则滤波器图被认为是有效的。

Libavfilter将自动插入需要格式转换的缩放过滤器。 可以通过预先添加sws_flags = flags为自动插入的缩放器指定swscale标志; 到filtergraph描述。

以下是filtergraph语法的BNF描述:

NAME             ::= sequence of alphanumeric characters and '_'
FILTER_NAME      ::= NAME["@"NAME]
LINKLABEL        ::= "[" NAME "]"
LINKLABELS       ::= LINKLABEL [LINKLABELS]
FILTER_ARGUMENTS ::= sequence of chars (possibly quoted)
FILTER           ::= [LINKLABELS] FILTER_NAME ["=" FILTER_ARGUMENTS] [LINKLABELS]
FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
FILTERGRAPH      ::= [sws_flags=flags;] FILTERCHAIN [;FILTERGRAPH]

23.2 Notes on filtergraph escaping

Filtergraph描述组合需要几个级别的转义。 有关使用的转义过程的更多信息,请参阅(ffmpeg-utilsquoting_and_escaping

第一级转义会影响每个过滤器选项值的内容,其中可能包含特殊字符:用于分隔值或其中一个转义字符\

第二级转义会影响整个过滤器描述,其中可能包含转义字符\或特殊字符[] ,; filtergraph描述使用的。

最后,当在shell命令行上指定filtergraph时,需要对其中包含的shell特殊字符执行第三级转义。

例如,考虑将以下字符串嵌入到drawtext过滤器描述text值中:

this is a 'string': may contain one, or more, special characters

此字符串包含'特殊转义字符和:特殊字符,因此需要以这种方式转义:

text=this is a \'string\'\: may contain one, or more, special characters

将过滤器描述嵌入到filtergraph描述中时,需要第二级转义,以便转义所有filtergraph特殊字符。 因此上面的例子变成:

drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters

(请注意,除了\'转义特殊字符外,还需要进行转义)。

最后,在shell命令中编写filtergraph描述时需要额外的转义级别,这取决于所采用的shell的转义规则。 例如,假设\是特殊的并且需要使用另一个\来转义,前一个字符串最终将导致:

-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"

24.时间表编辑

某些过滤器支持通用的enable选项。 对于支持时间轴编辑的过滤器,可以将此选项设置为在将帧发送到过滤器之前计算的表达式。 如果评估非零,则将启用过滤器,否则帧将不变地发送到过滤器图中的下一个过滤器。

表达式接受以下值:

t

时间戳以秒表示,如果输入时间戳未知,则为NAN.

n

输入帧的序号,从0开始

pos

输入框文件中的位置,如果未知,则为NAN

w

h

视频输入帧的宽度和高度。

此外,这些过滤器支持enable命令,可用于重新定义表达式。

与任何其他过滤选项一样,enable选项遵循相同的规则。

例如,要启用模糊滤镜(smartblur)10秒到3分钟,曲线滤镜从3秒开始:

smartblur = enable='between(t,10,3*60)',
curves    = enable='gte(t,3)' : preset=cross_process

请参阅ffmpeg -filters以查看哪些过滤器具有时间轴支持。

25.具有多个输入的过滤器选项(帧同步)

一些具有多个输入的过滤器支持一组通用选项。 这些选项只能通过名称设置,而不能使用简短表示法。

eof_action

在辅助输入上遇到EOF时要采取的操作; 它接受以下值之一:

解释
repeat 重复最后一帧(默认)
endall 结束两个流
pass 通过主输入
shortest

如果设置为1,则在最短输入终止时强制输出终止。 默认值为0

repeatlast

如果设置为1,则强制过滤器扩展辅助流的最后一帧,直到主流结束。 值为0将禁用此行为。 默认值为1

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

推荐阅读更多精彩内容