FFmpeg用于水平、垂直和网格中堆叠视频(2x2、3x2)

2020-11-08 13:29:22

通常,当您想要并排比较两个视频或想要在后处理过程中创建效果时,您可能需要将视频堆叠在一起。如果你最终买了一个工具来做这件事,它可能会变得很昂贵,但是,你猜怎么着?

FFmpeg提供了各种工具来帮助将视频堆叠在一起-水平、垂直或网格方式。在本教程中,让我们了解FFmpeg用于堆叠视频的hSTACK和vSTACK过滤器。

水平堆放视频是指视频并排放置(一个在左,一个在右)。

在执行此操作之前,您需要考虑几点。

HStack过滤器具有简单的格式。您需要指定输入的数量,它会从命令行的开头部分进行解析。堆叠顺序遵循输入的顺序。

这里有另一个用例。致力于视频压缩的公司或团队通常喜欢在实验室里并排比较视频,或者在会议上展示他们的工作。FFmpeg的水平堆叠是一种简单的方法,可以做到这一点,并获得非常好的结果。

下面是以不同的视频质量设置编码并水平堆叠的两个视频。比较简单,对吧?(注意:Vimeo对比特率的选择可能会扰乱比较,但当离线完成(下载)时,hStack过滤器会让比较变得容易!)。

“垂直堆叠视频”的结果是将视频一个接一个地放在另一个上面。与水平堆叠不同,输入需要具有相同的宽度。命令如下所示。

对于垂直堆叠,我们需要使用vSTACK过滤器,其语法类似于我们在上一个水平堆叠示例中使用的hSTACK过滤器。

这两个函数使用几乎相同的命令,只有一个简单的区别,即-filter_Complex参数下的hSTACK和vSTACK。

嗯,这两个软件都有一种非常巧妙的能力来区分最短视频的优先顺序。幸运的是,这个参数被命名为最短,它既适用于水平堆叠过滤器,也适用于垂直堆叠过滤器。使用Shortest=1可确保使用最短长度。

顺便说一句,如果您遇到声称帧正在被复制的错误,最简单的解决方法是将vsync 2参数添加到命令中,它的效果很不错。

为了测试在这种情况下会发生什么,让我们垂直堆叠两个视频-10秒剪辑和18秒剪辑。您将看到较短的剪辑在完成后只是停止,但输出视频会继续,直到最长的输入剪辑完成。

如果要将剪辑截断为最短剪辑的长度,则需要使用Shortest=1参数。让我们在下一节中看看这一点。

在本例中,我们使用Shortest=1命令行参数,如您所见,最终视频的长度被截断为输入中最短的长度。

我们可以使用hStack和vStack过滤器的组合来实现2×2的视频网格。让我们从查看命令行开始,然后分析它。这其实很简单!

Ffmpeg\-i input0.mp4-i input1.mp4-i input2.mp4-i input3.mp4\-filter_Complex\";[0:v][1:v]hSTACK=INPUTS=2[top];\[2:v][3:v]hSTACK=INPUTS=2[Bottom];\[top][Bottom]vSTACK=INPUTS=2[v]";\-MAP";[。

接下来,将前两个视频水平堆叠在一起,并将其称为“top”,即[0:v][1:v]hSTACK=INPUTS=2[top]。

然后,水平堆叠接下来的两个视频,并将其称为“Bottom”,即[2:v][3:v]hstack=inputs=2[Bottom]。

然后使用MAP命令,我们可以提取视频轨迹并将其推送到输出容器。

同样的,这里是一个3×2的视频网格,使用了hStack和vStack过滤器。

Ffmpeg\-I input0.mp4-I input1.mp4\-I input2.mp4-I input3.mp4\-I input4.mp4-I input5.mp4\-Filter_Complex\";[0:v][1:v][2:v]hstack=inputs=3[top];\[3:v][4:v][5:v]hstack=inputs=3[bottom];\[top][bottom]vstack=inputs=2[v]";";[v]";\finalOutput.mp4。

就是这样,伙计们。现在,您了解了如何在水平、垂直和网格中将视频堆叠在一起。这是非常有用的比较视频和创造有趣的效果沿途!

如果你喜欢这篇文章,一定要查看OTTVerse的FFmpeg教程的其余部分,以了解更多关于这个令人惊叹的媒体编辑和压缩软件的信息!