代码之家  ›  专栏  ›  技术社区  ›  A. Rex

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

  •  4
  • A. Rex  · 技术社区  · 16 年前

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

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

    4 回复  |  直到 12 年前
        1
  •  4
  •   StackedCrooked    15 年前

    我目前正在使用gstreamer进行类似的项目(讲座捕获)。你可能在找 videomixer 元素。查看此示例: Video 4-way split screen gstreamer pipeline (脚本位于 here )

    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
    
        2
  •  6
  •   evilsoup    12 年前

    下面的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滤波器添加的黑色填充上。

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

        3
  •  4
  •   John Knoeller    15 年前

    这听起来像是 AviSynth 是为解决问题而设计的。

    AviSynth本质上是一种操作视频流的脚本语言。文本文件描述要应用于一个或多个输入视频流的操作。文本文件被传递到avisynch引擎,该引擎提供一个虚拟的.avi文件,在获取源流时一帧一帧地对其进行操作。

    将avisynch与一个单独的工具结合在一起,该工具从虚拟.avi文件中读取并写入新文件以保存更改。

        4
  •  1
  •   mouviciel    16 年前

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

    推荐文章