前言
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=1630.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结构的指针,该结构定义传入缓冲区的格式,作为opaque参数传递给avfilter_init_filter进行初始化。
31.2 nullsink
空视频接收器:输入视频绝对不做任何事情。 它主要用作模板和用于分析/调试工具。