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
设置初始元胞自动机行的随机填充率。它是浮点数值,范围从0
到1
,默认为1/PHI
。
指定文件或模式时,将忽略此选项。
random_seed,seed
设置种子以随机填充初始行,必须是0
和UINT32_MAX
之间的整数。如果未指定,或者显式设置为-1
,则过滤器将尝试在尽力而为的基础上使用良好的随机种子。
rule
设置元胞自动机规则,它是一个介于0
到255
之间的数字。默认值为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
上使用Apple
的CoreImage API
在GPU
上生成的视频源。
此视频源是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 示例
使用
CIQRCodeGenerator
为FFmpeg
主页创建QR
代码,作为Apple
标准bash shell
的完整和转义命令行:ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.pn
此示例等同于coreimage
的QRCode
示例,而不需要nullsrc
视频源。
30.4 mandelbrot
生成Mandelbrot
集分形,并逐渐缩放到start_x
和start_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位置。 必须是介于-100
和100
之间的浮点值。默认值为-0.743643887037158704752191506114774
。
start_y
设置初始y
位置。 必须是介于-100
和100
之间的浮点值。默认值为-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
且帧速率为10
的frei0r partik0l
源,它覆盖在覆盖滤波器主输入上:
frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
30.7 life
生成life
模式。
这个来源是基于John Conway
生活游戏的概括。
源输入表示生命网格,每个像素表示可以处于两种可能状态之一(alive
或dead
)的单元格。每个细胞与其八个邻居相互作用,这八个neighbours
是水平,垂直或对角相邻的cells
。
在每次交互时,网格根据所采用的规则进化,该规则指定将使细胞保持活着或出生的相邻活细胞的数量。 'rule'
选项允许指定要采用的规则。
此来源接受以下选项:
filename,f
设置从中读取初始网格状态的文件。在文件中,每个非空白字符都被视为活动单元格,而换行符用于分隔每行的结尾。
如果未指定此选项,则会随机生成初始网格。
rate,r
设置视频速率,即每秒生成的帧数。默认值为25
。
random_fill_ratio,ratio
设置初始随机网格的随机填充率。它是浮点数值,范围从0
到1
,默认为1/PHI
。指定文件时会被忽略。
random_seed,seed
设置填充初始随机网格的种子,必须是0
到UINT32_MAX
之间的整数。如果未指定,或者显式设置为-1
,则过滤器将尝试在尽力而为的基础上使用良好的随机种子。
rule
设定life
规则。
可以使用SNS/BNB
类型的代码指定规则,其中NS
和NB
是0-8
范围内的数字序列,NS
指定使活细胞保持活动的活动相邻小区的数量,以及NB
使死细胞变为活着(即"born"
)的活着的邻居细胞的数量。 s
和b
可分别代替S
和B
。
或者,规则可以由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'
的值可以是0
到255
。
life_color
设置生命(或新生)细胞的颜色。
death_color
设置死细胞的颜色。如果设置了mold
,这是用于表示死细胞的第一种颜色。
mold_color
设定模具颜色,确定dead
和moldy
的cells
。
有关这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
测试模式,可用于检测RGB
与BGR
问题。应该从上到下看到红色,绿色和蓝色条纹。
smptebars
源根据SMPTE
工程指南EG 1-1990
生成彩条图案。
smptehdbars
源根据SMPTE RP 219-2002
生成彩条模式。
testsrc
源生成测试视频模式,显示颜色模式,滚动渐变和时间戳。这主要用于测试目的。
testsrc2
源类似于testsrc
,但支持更多像素格式而不仅仅是rgb24
。这允许将其用作其他测试的输入,而无需格式转换。
yuvtestsrc
源生成YUV
测试模式。你应该从上到下看到y
,cb
和cr
条纹。
来源接受以下参数:
level
指定Hald CLUT
的级别,仅在haldclutsrc
源中可用。 N
级生成N*N*N
个N*N*N
个像素的图像,以用作3D查找表的单位矩阵。每个分量以1/(N*N)
标度编码。
color, c
指定源的颜色,仅在颜色源中可用。有关此选项的语法,请查阅(ffmpeg-utils)颜色语法
。
size,s
指定源视频的大小。有关此选项的语法,请检查(ffmpeg-utils)视频大小语法
。默认值为320x240
。
allrgb
,allyuv
和haldclutsrc
过滤器不提供此选项。
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
结构的指针,该结构定义传入缓冲区的格式,作为opaqu
e参数传递给avfilter_init_filter
进行初始化。
31.2 nullsink
空视频接收器:输入视频绝对不做任何事情。 它主要用作模板和用于分析/调试工具。