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

的类似物 通用汽车蒙太奇 命令(用于图像)会很棒。

有帮助吗?

解决方案

我目前正在使用 GStreamer 进行类似的项目(讲座捕获)。您可能正在寻找 视频混合器 元素。看看这个例子: 视频4路分屏gstreamer管道 (脚本位于 这里).

GStreamer 在 Windows 上也能完美运行。您可能想查看 GStreamer WinBuilds 如果你感兴趣。

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

  v0. ! queue
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! videobox right=-320 bottom=-240
      ! ffmpegcolorspace
      ! vmix.sink_0
  v1. ! queue   
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! videobox bottom=-240
      ! ffmpegcolorspace
      ! vmix.sink_1
  v2. ! queue   
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! videobox right=-240
      ! ffmpegcolorspace
      ! vmix.sink_2
  v3. ! queue   
      ! decodebin
      ! ffmpegcolorspace
      ! videoscale
      ! video/x-raw-yuv,width=320,height=240
      ! ffmpegcolorspace
      ! vmix.sink_3
  vmix. ! queue 
        ! ffmpegcolorspace
        ! dshowvideosink
  filesrc location="c:/test.mpg" name="v0"
  filesrc location="c:/test.mpg" name="v1"
  filesrc location="c:/test.mpg" name="v2"
  filesrc location="c:/test.mpg" name="v3"
  videomixer name=vmix
             sink_0::xpos=0   sink_0::ypos=0   sink_0::zorder=0
             sink_1::xpos=320 sink_1::ypos=0   sink_1::zorder=1
             sink_2::xpos=0   sink_2::ypos=240 sink_2::zorder=2
             sink_3::xpos=320 sink_3::ypos=240 sink_3::zorder=3

其他提示

在下面的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

首先,将垫过滤加倍所述第一输入视频的大小,留下原始视频的左上角。串行覆盖过滤器然后将其他输入在由垫过滤器添加的黑色填充。

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

这听起来像的那种问题,即 AviSynth的被设计用来解决。

AviSynth的基本上是用于操纵视频流的脚本语言。一个文本文件,描述要应用到一个或多个输入视频流业务。该文本文件交给AviSynth的引擎,它提供了操纵源在时间流一帧为您获取它们的虚拟AVI文件。

与单独的工具,从虚拟AVI文件的读取和写入到一个新的文件,保存更改联合AviSynth的。

一种可能的解决办法是描述视频剪辑与 SMIL ,多媒体布局标记语言。这需要编写SMIL文件和SMIL播放器(例如,王宇,Quicktime或Realplayer的文本编辑器),用于显示它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top