5

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

gm montage命令(用于图像)的类似物会很棒。

4

4 回答 4

6

以下 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

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

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

于 2013-01-17T02:46:40.453 回答
5

我目前正在自己​​使用 GStreamer 进行类似的项目(讲座捕获)。您可能正在寻找videomixer元素。查看此示例:视频 4 路分屏 gstreamer 管道(脚本位于此处)。

GStreamer 在 Windows 上也能正常工作。如果您有兴趣,可以查看GStreamer WinBuilds 。

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

  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
于 2010-01-07T13:44:39.600 回答
4

这听起来像是AviSynth旨在解决的问题。

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

将 AviSynth 与从虚拟 .AVI 文件读取并写入新文件以保存更改的单独工具相结合。

于 2010-01-06T00:35:06.153 回答
1

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

于 2009-02-23T10:07:11.413 回答