FFplay文档解读-46-视频源,视频接收器

前言

Github地址:Github
简书地址:简书
专辑地址:FFplay专辑

30. 视频源

以下是当前可用视频源的说明。

30.1 buffer

缓冲视频帧,并使其可用于过滤器链。

该源主要用于编程用途,特别是通过'libavfilter/vsrc_buffer.h'中定义的接口。

它接受以下参数:

video_size

指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请参考(ffmpeg-utils)视频大小语法

width

输入视频宽度。

height

输入视频高度。

pix_fmt

表示缓冲视频帧的像素格式的字符串。它可以是对应于像素格式的数字或像素格式名称。

time_base

指定缓冲帧的时间戳假定的时基。

frame_rate

指定视频流的预期帧速率。

pixel_aspect,sar

输入视频的样本(像素)宽高比。

sws_param

指定用于缩放过滤器的可选参数,当在输入大小或格式中检测到输入更改时,该过滤器将自动插入。

hw_frames_ctx

使用硬件像素格式时,这应该是对描述输入帧的AVHWFramesContext的引用。

例如:

buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1

将指示源接受大小为320x240且格式为yuv410p的视频帧,假设时间戳为时基和方形像素(1:1样本宽高比)的1/24。由于名称为yuv410p的像素格式对应于数字6(检查'libavutil / pixfmt.h'中的枚举AVPixelFormat定义),此示例对应于:

buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1

或者,可以将选项指定为扁平字符串,但不推荐使用此语法:

width:height:pix_fmt:time_base.num:time_base.den:pixel_aspect.num:pixel_aspect.den[:sws_param]

30.2 cellauto

创建由基本元胞自动机生成的模式。

元胞自动机的初始状态可以通过‘filename’‘pattern’选项来定义。如果未指定此类选项,则会随机创建初始状态。

在每个新帧中,视频中的新行用下一代元胞自动机的结果填充。填充整个帧时的行为由scroll选项定义。

此来源接受以下选项:

filename,f

从指定文件中读取初始元胞自动机状态,即起始行。在该文件中,每个非空白字符被视为活动单元格,换行符将终止该行,并且将忽略该文件中的其他字符。

pattern,p

从指定的字符串中读取初始元胞自动机状态,即起始行。

字符串中的每个非空白字符都被视为活动单元格,换行符将终止该行,并且字符串中的其他字符将被忽略。

rate,r

设置视频速率,即每秒生成的帧数。默认值为25

random_fill_ratio,ratio

设置初始元胞自动机行的随机填充率。它是浮点数值,范围从01,默认为1/PHI

指定文件或模式时,将忽略此选项。

random_seed,seed

设置种子以随机填充初始行,必须是0UINT32_MAX之间的整数。如果未指定,或者显式设置为-1,则过滤器将尝试在尽力而为的基础上使用良好的随机种子。

rule

设置元胞自动机规则,它是一个介于0255之间的数字。默认值为110

size,s

设置输出视频的大小。有关此选项的语法,请参考(ffmpeg-utils)视频大小语法

如果指定了'filename''pattern',则默认情况下将大小设置为指定初始状态行的宽度,并将高度设置为width*PHI

如果设置了'size',则它必须包含指定模式字符串的宽度,并且指定的模式将在较大的行中居中。

如果未指定文件名或模式字符串,则大小值默认为“320x518”(用于随机生成的初始状态)。

scroll

如果设置为1,则在输出中的所有行都已填充时向上滚动输出。如果设置为0,则在填充底行之后,新生成的行将写在顶行。默认为1

start_full,full

如果设置为1,则在输出第一帧之前完全用生成的行填充输出。这是默认行为,禁用时将值设置为0

stitch

如果设置为1,则将左右行边缘缝合在一起。这是默认行为,禁用时将值设置为0

30.2.1 示例

  • 'pattern'读取初始状态,并指定大小为200x400的输出。

      cellauto=f=pattern:s=200x400
  • 生成宽度为200个单元格的随机初始行,填充率为2/3

      cellauto=ratio=2/3:s=200x200
  • 创建由规则18生成的模式,该模式由以宽度为100的初始行为中心的单个活动单元开始:

      cellauto=p=@:s=100x400:full=0:rule=18
  • 指定更精细的初始模式:

      cellauto=p='@@ @ @@':s=100x400:full=0:rule=18

30.3 coreimagesrc

OSX上使用AppleCoreImage APIGPU上生成的视频源。

此视频源是coreimage视频滤镜的专用版本。 在应用的过滤链的开头使用核心图像生成器来生成内容。

coreimagesrc视频源接受以下选项:

list_generators

列出所有可用的发电机及其各自的选项,以及可能的最小值和最大值以及默认值。

  list_generators=true

size, s

指定源视频的大小。 有关此选项的语法,请查阅(ffmpeg-utils)视频大小语法。 默认值为320x240

rate, r

指定源视频的帧速率,作为每秒生成的帧数。 它必须是frame_rate_num/frame_rate_den格式的字符串,整数,浮点数或有效视频帧速率缩写。 默认值为25

sar

设置源视频的样本宽高比。

duration, d

设置源视频的持续时间。 请参阅(ffmpeg-utils)接受语法的持续时间语法

如果未指定,或者表达的持续时间为负,则视频应该永久生成。

此外,还接受coreimage视频过滤器的所有选项。 完整的过滤链可用于进一步处理生成的输入而无需CPU-HOST传输。 有关详细信息,请参阅coreimage文档和示例

30.3.1 示例

  • 使用CIQRCodeGeneratorFFmpeg主页创建QR代码,作为Apple标准bash shell的完整和转义命令行:

      ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.pn

此示例等同于coreimageQRCode示例,而不需要nullsrc视频源。

30.4 mandelbrot

生成Mandelbrot集分形,并逐渐缩放到start_xstart_y指定的点。

此来源接受以下选项:

end_pts

设置终端pts值。 默认值为400

end_scale

设置终端比例值。 必须是浮点值。 默认值为0.3

inner

设置内部着色模式,即用于绘制Mandelbrot分形内部区域的算法。

它应采用以下值之一:

解释
black 设置黑色模式
convergence 显示时间直到收敛
mincol 根据最接近迭代原点的点设置颜色
period 设置期间模式

默认值是:mincol

bailout

设置bailout价值。 默认值为10.0

maxiter

设置渲染算法执行的最大迭代次数。 默认值为7189

outer

设置外部着色模式。 它应采用以下值之一:

解释
iteration_count 设置迭代cound模式
normalized_iteration_count 设置规范化迭代计数模式

默认值是:normalized_iteration_count

rate,r

设置帧速率,表示为每秒帧数。 默认值为25

size,s

设置框架大小。 有关此选项的语法,请查阅(ffmpeg-utils)视频大小语法。 默认值为640x480

start_scale

设置初始比例值。 默认值为3.0

start_x

设置初始x位置。 必须是介于-100100之间的浮点值。默认值为-0.743643887037158704752191506114774

start_y

设置初始y位置。 必须是介于-100100之间的浮点值。默认值为-0.131825904205311970493132056385139

30.5 mptestsrc

生成由MPlayer测试过滤器生成的各种测试模式。

生成的视频的大小是固定的,为256x256。 此源特别适用于测试编码功能。

此来源接受以下选项:

rate,r

指定源视频的帧速率,作为每秒生成的帧数。 它必须是frame_rate_num/frame_rate_den格式的字符串,整数,浮点数或有效视频帧速率缩写。 默认值为25

duration, d

设置源视频的持续时间。 请参阅(ffmpeg-utils)接受语法的持续时间语法

如果未指定,或者表达的持续时间为负,则视频应该永久生成。

test,t

设置要执行的测试的编号或名称。 支持的测试是:

dc_luma
dc_chroma
freq_luma
freq_chroma
amp_luma
amp_chroma
cbp
mv
ring1
ring2
all

默认值为all,它将循环显示所有测试的列表。

下面是一些例子:

mptestsrc=t=dc_luma

将生成dc_luma测试模式。

30.6 frei0r_src

提供frei0r源。

要启用此过滤器的编译,需要安装frei0r标头并使用--enable-frei0r配置FFmpeg

此源接受以下参数:

size

要生成的视频大小。 有关此选项的语法,请查阅(ffmpeg-utils)视频大小语法

framerate

生成视频的帧率。 它可以是num/den形式的字符串或帧速率缩写。

filter_name

要加载的frei0r源的名称。 有关frei0r以及如何设置参数的更多信息,请阅读视频过滤器文档中的frei0r部分。

filter_params

传递给frei0r源的'|'分隔参数列表。

例如,要生成大小为200x200且帧速率为10frei0r partik0l源,它覆盖在覆盖滤波器主输入上:

frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay

30.7 life

生成life模式。

这个来源是基于John Conway生活游戏的概括。

源输入表示生命网格,每个像素表示可以处于两种可能状态之一(alivedead)的单元格。每个细胞与其八个邻居相互作用,这八个neighbours是水平,垂直或对角相邻的cells

在每次交互时,网格根据所采用的规则进化,该规则指定将使细胞保持活着或出生的相邻活细胞的数量。 'rule'选项允许指定要采用的规则。

此来源接受以下选项:

filename,f

设置从中读取初始网格状态的文件。在文件中,每个非空白字符都被视为活动单元格,而换行符用于分隔每行的结尾。

如果未指定此选项,则会随机生成初始网格。

rate,r

设置视频速率,即每秒生成的帧数。默认值为25

random_fill_ratio,ratio

设置初始随机网格的随机填充率。它是浮点数值,范围从01,默认为1/PHI。指定文件时会被忽略。

random_seed,seed

设置填充初始随机网格的种子,必须是0UINT32_MAX之间的整数。如果未指定,或者显式设置为-1,则过滤器将尝试在尽力而为的基础上使用良好的随机种子。

rule

设定life规则。

可以使用SNS/BNB类型的代码指定规则,其中NSNB0-8范围内的数字序列,NS指定使活细胞保持活动的活动相邻小区的数量,以及NB使死细胞变为活着(即"born")的活着的邻居细胞的数量。 sb可分别代替SB

或者,规则可以由18位整数指定。如果9个高阶位对于每个相邻的活细胞数是活着的,则使用9个高阶位来编码下一个细胞状态,低阶位指定用于“生成”新细胞的规则。高阶比特编码更多数量的相邻小区。例如,数字6153 =(12 << 9)+9指定保持活动规则12和出生规则9,其对应于S23/B03

默认值是S23/B3,这是Conway最初的生命游戏规则,如果它有2个或3个相邻的活细胞,它将保持细胞存活,并且如果死者周围有三个活细胞,它将生成一个新细胞细胞。

size,s

设置输出视频的大小。有关此选项的语法,请检查(ffmpeg-utils)视频大小语法

如果指定了'filename',则默认情况下将大小设置为与输入文件相同的大小。如果设置了size,则它必须包含输入文件中指定的大小,并且该文件中定义的初始网格将在较大的结果区域中居中。

如果未指定文件名,则大小值默认为320x240(用于随机生成的初始网格)。

stitch

如果设置为1,则将左右网格边缘缝合在一起,顶部和底部边缘也缝合在一起。默认为1

mold

设定细胞模具速度。如果设置,死细胞将从'death_color'变为'mold_color',步骤为'mold''mold'的值可以是0255

life_color

设置生命(或新生)细胞的颜色。

death_color

设置死细胞的颜色。如果设置了mold,这是用于表示死细胞的第一种颜色。

mold_color

设定模具颜色,确定deadmoldycells

有关这3种颜色选项的语法,请查阅(ffmpeg-utils)颜色语法

30.7.1 Examples

  • 'pattern'读取网格,并将其居中放在尺寸为300x300像素的网格上:

      life=f=pattern:s=300x300
  • 生成大小为200x200的随机网格,填充率为2/3

      life=ratio=2/3:s=200x200
  • 指定用于演变随机生成的网格的自定义规则:

      life=rule=S14/B34
  • 使用ffplay进行slow death效果(mold)的完整示例:

      ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16

    30.8 allrgb, allyuv, color, haldclutsrc, nullsrc, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc

allrgb源返回所有rgb颜色大小为4096x4096的帧。

allyuv源返回所有yuv颜色的大小为4096x4096的帧。

颜色源提供均匀彩色的输入。

haldclutsrc源提供Hald CLUT标识。另见haldclut过滤器

nullsrc源返回未处理的视频帧。它主要用于分析/调试工具,或作为忽略输入数据的过滤器的源。

rgbtestsrc源生成一个RGB测试模式,可用于检测RGBBGR问题。应该从上到下看到红色,绿色和蓝色条纹。

smptebars源根据SMPTE工程指南EG 1-1990生成彩条图案。

smptehdbars源根据SMPTE RP 219-2002生成彩条模式。

testsrc源生成测试视频模式,显示颜色模式,滚动渐变和时间戳。这主要用于测试目的。

testsrc2源类似于testsrc,但支持更多像素格式而不仅仅是rgb24。这允许将其用作其他测试的输入,而无需格式转换。

yuvtestsrc源生成YUV测试模式。你应该从上到下看到ycbcr条纹。

来源接受以下参数:

level

指定Hald CLUT的级别,仅在haldclutsrc源中可用。 N级生成N*N*NN*N*N个像素的图像,以用作3D查找表的单位矩阵。每个分量以1/(N*N)标度编码。

color, c

指定源的颜色,仅在颜色源中可用。有关此选项的语法,请查阅(ffmpeg-utils)颜色语法

size,s

指定源视频的大小。有关此选项的语法,请检查(ffmpeg-utils)视频大小语法。默认值为320x240

allrgballyuvhaldclutsrc过滤器不提供此选项。

rate,r

指定源视频的帧速率,作为每秒生成的帧数。它必须是frame_rate_num/frame_rate_den格式的字符串,整数,浮点数或有效视频帧速率缩写。默认值为25

duration, d

设置源视频的持续时间。请参阅(ffmpeg-utils)接受语法的持续时间语法

如果未指定,或者表达的持续时间为负,则视频应该永久生成。

sar

设置源视频的样本宽高比。

alpha

指定背景的alpha(不透明度),仅在testsrc2源中可用。该值必须介于0(完全透明)和255(完全不透明,默认值)之间。

decimals, n

设置要在时间戳中显示的小数位数,仅在testsrc源中可用。

显示的时间戳值将对应于原始时间戳值乘以指定值的10的幂。默认值为0

30.8.1 示例

  • 生成持续时间为5.3秒的视频,大小为176x144,帧速率为每秒10帧:

      testsrc=duration=5.3:size=qcif:rate=10
  • 下面的图形描述将生成一个不透明度为0.2的红色光源,其大小为qcif,帧速率为每秒10帧:

      color=c=red@0.2:s=qcif:r=10
  • 如果要忽略输入内容,则可以使用nullsrc。 以下命令使用geq过滤器在亮度平面中生成噪声:

      nullsrc=s=256x256, geq=random(1)*255:128:128

30.8.2 命令行

颜色源支持以下命令:

c, color

设置创建图像的颜色。 接受相应‘color’选项的相同语法。

30.9 openclsrc

使用OpenCL程序生成视频。

source

OpenCL程序源文件。

kernel

程序中的内核名称。

size,s

要生成的帧大小。 必须设置此项。

format

用于生成帧的像素格式。 必须设置此项。

rate,r

每秒生成的帧数。 默认值为25

有关程序加载的工作方式的详细信息,请参阅program_opencl过滤器。

示例程序:

  • 通过设置输出图像中像素位置的像素值来生成颜色渐变。 (请注意,这适用于所有像素格式,但生成的输出将不相同。)

      __kernel void ramp(__write_only image2d_t dst,             unsigned int index)  {      int2 loc = (int2)(get_global_id(0), get_global_id(1));      float4 val;      val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst));      write_imagef(dst, loc, val);  }
  • 生成Sierpinski地毯图案,每帧平移一个像素。

      __kernel void sierpinski_carpet(__write_only image2d_t dst,                          unsigned int index)  {      int2 loc = (int2)(get_global_id(0), get_global_id(1));      float4 value = 0.0f;      int x = loc.x + index;      int y = loc.y + index;      while (x > 0 || y > 0) {  if (x % 3 == 1 && y % 3 == 1) {      value = 1.0f;      break;  }  x /= 3;  y /= 3;      }      write_imagef(dst, loc, value);  }

31.视频接收器

以下是当前可用视频接收器的说明。

31.1 buffersink

缓冲视频帧,并使其可用于过滤器图形的末尾。

此接收器主要用于程序化使用,特别是通过libavfilter/buffersink.h或选项系统中定义的接口。

它接受一个指向AVBufferSinkContext结构的指针,该结构定义传入缓冲区的格式,作为opaque参数传递给avfilter_init_filter进行初始化。

31.2 nullsink

空视频接收器:输入视频绝对不做任何事情。 它主要用作模板和用于分析/调试工具。

(0)

相关推荐