多个视频源合并为一个

本文关键字:一个 合并 视频 | 更新日期: 2023-09-27 18:10:00

我正在寻找一种有效的方法来做以下事情:

使用几个源视频(长度大致相同),我需要生成一个输出视频,该视频由所有原始源组成,每个源在自己的区域内运行(就像一堆不同大小的pip)。所以,最终的结果是所有的原始代码并排运行,每个都在自己的区域/框中。

源和输出需要是flv,我使用的平台是Windows(在Windows 7 64位开发,部署到Windows server 2008)。

我已经看过avisynth,但不幸的是它不能处理flv和非插件和flv分离器我已经尝试工作。

我当前的进程以以下方式使用ffmpeg:

  1. 使用ffmpeg每秒生成25个png的视频,根据需要调整原始大小。
  2. 使用System.Drawing命名空间将每一组帧组合成一个新图像,从静态背景开始,然后将每一帧加载到Image并绘制到背景Graphics对象-这给了我组合的帧。
  3. 使用ffmpeg将生成的图像合并成视频。

所有这些都是非常IO密集型的(这是我目前的处理瓶颈),我觉得必须有一个更有效的方法来达到我的目标。我在视频处理方面没有多少经验,也不知道有什么选择。

谁能提出一个更有效的方法来处理这些?

多个视频源合并为一个

在ffmpeg中执行所有操作。你可以用视频过滤器做很多事情。例如,连接两个视频并排:

ffmpeg -i input0.avi -vf "movie=input1.avi [in1]; [in]pad=640*2:352[in0]; [in0][in1] overlay=640:0 [out]" out.avi

@Oded:这基本上就是这个命令所做的。您可以删除pad过滤器并更改overlay过滤器的参数,以移动第二个视频,无论您喜欢的地方。

ffmpeg -i big.avi -vf "movie=small.avi [small]; [in][small] overlay=10:10 [out]" out.avi

我提供的链接描述了过滤器语法。您可以将多个过滤器链接在一起:

ffmpeg -i big.avi -vf "movie=small0.avi [small0]; [in][small0] overlay=10:10 [tmp];'
                       movie=small1.avi [small1]; [tmp][small1] overlay=30:10 [out]" out.avi