ffmpeg -ss 4.5 -t 3.9 -i input.mp4 -vf "fps=18,scale=360:-2:flags=lanczos,palettegen" palette.png
ffmpeg -ss 4.5 -t 3.9 -i input.mp4 -i palette.png -filter_complex "fps=18,scale=360:-2:flags=lanczos[x];[x][1:v]paletteuse" output.gif
我用这个命令制作了一个gif,但我不知道是什么[x];[x][1:v]
意思。
这是怎么回事?
答案1
这[x]
只是赋予过滤器输出的名称。
通常,简单过滤器会采用一个或多个过滤器并将它们放入过滤器链中。您的第一个命令就是这种情况。
你有一个复杂的第二个命令中的过滤器,其中可以将多个过滤器链组合成一个过滤器图,因为您正在处理多个输入流。第一个链将过滤器应用于fps
第scale
一个输入视频,第二个链将paletteuse
过滤器应用于第一个过滤器链的输出和第二个输入图像。
每个过滤器链可以有零个或多个输入,以及零个或多个输出。在复杂的过滤器中,您通常必须告诉ffmpeg
每个过滤器链的这些输入和输出是什么。这就是 的作用[x]
。
基本上,表示,和过滤器链[x]
的输出称为。稍后,它可以重新用作过滤器链的输入。您不必使用;您也可以使用任何其他名称——更具描述性的名称会更有意义,例如。fps
scale
x
paletteuse
x
scaled
答案2
它们是链接标签。
来自文档,
过滤器的名称和参数前面和后面可以随意添加链接标签列表。链接标签允许命名链接并将其与过滤器输出或输入板关联。
因此,在 中scale=360:-2:flags=lanczos[x]
,x
是分配给比例过滤器输出的标签。
在 中[x][1:v]paletteuse
,[x]
表示将比例过滤器的输出作为第一个输入提供给 paletteuse,[1:v]
表示将第二个输入的第一个视频流(palette.png)提供给 paletteuse。