ffmpeg 的 -vf“split”选项的语法是什么?

ffmpeg 的 -vf“split”选项的语法是什么?

我正在尝试学习如何使用 ffmpeg,并在 http://trac.ffmpeg.org/wiki/FancyFilteringExamples 上看到了这个过滤示例。具体来说,是这个:

ffplay -f lavfi -i mandelbrot -vf "format=yuv444p,split=4\[a\]\[b\]\[c\]\[d\],\[a\]waveform\[aa\],\[b\]\[aa\]vstack\[V\],\[c\]waveform=m=0\[cc\],\[d\]vectorscope=color4\[dd\],\[cc\]\[dd\]vstack\[V2\],\[V\]\[V2\]hstack"

这将生成一个曼德布洛特分形,两侧各有两个波形,右下角有一个矢量示波器。我想将这个概念应用到我拥有的视频中,但只有矢量示波器而没有波形。我已经想出了如何将矢量示波器生成为其自己的文件,但我如何指定它的 lxw(像素),然后使用拆分语法将其添加到视频底部?

到目前为止,我已经使用过

ffmpeg -i original.mp4 -vf vectorscope=color4 -f mp4 vectorscope.mp4

生成原始的 256x256 矢量示波器。

我理解 split 语法的方式是它与 -vf 选项结合使用,类似于: ffmpeg -i original.mp4 -vf "format=h264, split=2[a][b],[a]vectorscope=color4 ... " -f mp4 output.mp4但我不太确定此后的语法是什么。

抱歉,如果这个问题看起来有点愚蠢,我正在学习!

答案1

在下面的例子中,我们取第一个输入[0]并将其拆分为两个实例[S1][S2]。如果实例数大于 2(即split=3),我们只需说明实例数。我们将矢量示波器应用于一个实例[S1],并将矢量示波器输出为 [VS]。此输出现在叠加到第二个实例上[S2]。在此示例中,我们在左上角叠加了(overlay=0:0),可以进行调整以适应。

ffmpeg -y -i 1.mkv -vf ^
[0]split[S1][S2];^
[S1]vectorscope=color4[VS];^
[S2][VS]overlay=0:0 out.mp4

如果我们想在叠加之前调整矢量示波器输出的大小,我们只需[VS]在叠加滤镜之前缩放其输出即可。现在我们必须叠加来自缩放滤镜的输出[VSS]

ffmpeg -y -i 1.mkv -vf ^
[0]split[S1][S2];^
[S1]vectorscope=color4[VS];^
[VS]scale=400:400[VSS];^
[S2][VSS]overlay=0:0 out.mp4

更进一步,我们可以在重新缩放之前裁剪矢量示波器的输出。在这里,我们通过将输入乘以 (裁剪过滤器的输出) 宽度 (iw) 和高度 (ih) 各减少 2 (*2)。如果裁剪不对称,此方法很有用。

ffmpeg -y -i 1.mkv -vf ^
[0]split[S1][S2];^
[S1]vectorscope=color4[VS];^
[VS]crop=100:100[CVS];^
[CVS]scale=2*iw:2*ih[VSS];^
[S2][VSS]overlay=0:0 out.mp4

注意:您可以说明裁剪尺寸和位置50:25) 如下:

crop=100:100:50:25

如果您下载了便携版 Avidemux,您可以先生成矢量示波器,然后在 Avidemux 中打开并使用裁剪滤镜确定 ffmpeg 的值。有一个自动裁剪选项,但这仅应用作起点。在记录值之前使用预览。

Avidemux 过滤器的值对应如下:

作物=宽度:高度:左:上(宽度和高度取自“尺寸”)。左侧和顶部代表 x 和 y 位置。

https://www.avidemux.org/nightly/win64/

相关内容