Layout 如何平铺视频/创建视频蒙太奇?

Layout 如何平铺视频/创建视频蒙太奇?,layout,video,montage,Layout,Video,Montage,我有四个视频,我想以2x2的方式平铺,以制作一个新的视频。有没有一种方法可以让我轻松地做到这一点,最好是在Linux下免费完成?我愿意编写适量的程序,也许是为了与某个库交互,但不愿意自己编写整个视频处理程序。您可以假设输入和输出视频采用最方便的常见格式 类似的命令(用于图像)将非常棒。一个可能的解决方案是使用多媒体标记语言描述视频蒙太奇的布局。这需要一个用于编写SMIL文档的文本编辑器和一个用于显示SMIL文档的SMIL视频播放器(例如Quicktime或Realplayer)。这听起来像是设计

我有四个视频,我想以2x2的方式平铺,以制作一个新的视频。有没有一种方法可以让我轻松地做到这一点,最好是在Linux下免费完成?我愿意编写适量的程序,也许是为了与某个库交互,但不愿意自己编写整个视频处理程序。您可以假设输入和输出视频采用最方便的常见格式


类似的命令(用于图像)将非常棒。

一个可能的解决方案是使用多媒体标记语言描述视频蒙太奇的布局。这需要一个用于编写SMIL文档的文本编辑器和一个用于显示SMIL文档的SMIL视频播放器(例如Quicktime或Realplayer)。

这听起来像是设计用来解决的问题

AviSynth本质上是一种用于操纵视频流的脚本语言。文本文件描述要应用于一个或多个输入视频流的操作。文本文件被交给AviSynth引擎,它提供了一个虚拟的.AVI文件,当您获取源流时,它一次处理一帧源流


将AviSynth与一个单独的工具结合起来,该工具从virtual.AVI文件中读取并写入一个新文件以保存更改

我目前正在使用GStreamer进行类似的项目(讲座捕获)。您可能正在寻找元素。查看这个示例:(脚本位于)

GStreamer在Windows上也能很好地工作。如果您感兴趣,您可能想查看

示例
下面是一个在Windows上适用的基本脚本(它没有反斜杠,因为我使用C代码的调用来解析管道描述):


以下ffmpeg命令将完全满足提问者的要求:

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex \
'[0:v]pad=iw*2:ih*2:0:0[int2];[int2][1:v]overlay=0:H/2[int3];[int3][2:v]overlay=W/2:0[int4];[int4][3:v]overlay=W/2:H/2[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4
首先,pad过滤器将第一个输入视频的大小加倍,将原始视频保留在左上角。然后,串行叠加滤波器将其他输入置于pad滤波器添加的黑色填充上


如果视频的分辨率不同,则需要对该命令进行一些修改。

这看起来不错,但对我不起作用。然而,它确实起了作用,尽管如所声称的那样,它效率低下,而且缺乏声音。这肯定比我目前得到的要好。谢谢同时,我将尝试找出Ray的方法不起作用的原因。我发布了一个更简单的例子。如果你想要音频,那么你必须选择你想要使用音频的视频。然后,您需要为该视频使用一个命名的decodebin元素,并将其连接到audioconvert->audioresample->audiosink。如果你需要更多的帮助,尽管问吧。好吧,那太好了!Re audio:我不太需要它,但是如果你有一种混合所有音频的方法,那就太好了。关于Windows:正如我的问题所说,我使用的是Linux。我想这就是为什么“dshowvideosink”对我不起作用,但我只是把它改成了FileLink。无论如何,我认为这是最好的答案,因为它包含了完整的指令,而不仅仅是指向一种原则上应该能够完成任务的语言的指针。谢谢你的帮助!很好:)顺便说一句,你可以在Linux上使用autovideosink而不是dshowvideosink。您可能还需要在文件链接之前添加一个muxer元素,以获得正确的播放速度。谢谢您的帮助。因为我必须选择一个答案来奖励赏金,所以我选择了一个有最完整说明的答案。尽管如此,我希望您能获得一些支持。很抱歉,您无法安装它。几年前我安装它时,它才起作用。不管怎么说,我就是这样记得的;)工作起来很有魅力:如果ffmpeg不可用,D也可以与avconv完美结合(参数相同)
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex \
'[0:v]pad=iw*2:ih*2:0:0[int2];[int2][1:v]overlay=0:H/2[int3];[int3][2:v]overlay=W/2:0[int4];[int4][3:v]overlay=W/2:H/2[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4