美文网首页FFPlay专辑
FFplay文档解读-46-视频源,视频接收器

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

作者: 张芳涛 | 来源:发表于2018-11-15 18:20 被阅读27次

    前言

    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

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

    相关文章

      网友评论

        本文标题:FFplay文档解读-46-视频源,视频接收器

        本文链接:https://www.haomeiwen.com/subject/kfqufqtx.html