猿问

如何将网格中的多个视频合并到一个视频中?

我有 36 个具有相同尺寸的视频文件,想要将它们连接成一个具有 6x6 网格的视频。

理想情况下,给出的视频数量是非正方形的,例如 12 个,4x3 网格,因为它可以是最大的正方形就很好了。

我尝试使用 matplotlib 的动画库,但未能首先将两个方向的视频连接为行,然后连接为列。

任何帮助都是appriced!

慕桂英546537
浏览 1568回答 1
1回答

慕斯王

OP 讨论了 256 个视频的缩放问题。就此而言,我建议使用自动化,例如使用 Python。我们可以看到这部分会随着视频数量的变化而变化:假设你有一个 python 中所有视频的列表(你可以手动完成,但我建议os.listdir像这样使用)以同样的方式,您必须生成过滤器的输入overlay,这将取决于您的输出分辨率。假设它是由width和height变量定义的。grid_width另外,在我的示例中,网格(和)的视频数量grid_width是手动设置的。这是一个代码示例,我没有资源或时间来测试,但这应该是您工作的良好基础:###list_videos contains the path the the videoswidth = 1920height = 1080input_videos = ""input_setpts = "nullsrc=size={}x{} [base];".format(width, height)input_overlays = "[base][video0] overlay=shortest=1 [tmp0];"grid_width = 16grid_height = 16for index, path_video in enumerate(list_video):        input_videos += " -i " + path_video        input_setpts += "[{}:v] setpts=PTS-STARTPTS, scale={}x{} [video{}];".format(index, width//grid_width, height//grid_height, index)        if index > 0 and index < len(list_video) - 1:            input_overlays += "[tmp{}][video{}] overlay=shortest=1:x={}:y={} [tmp{}];".format(index-1, index, width//grid_width * (index%grid_width), height//grid_height * (index//grid_width), index)        if index == len(list_video) - 1:            input_overlays += "[tmp{}][video{}] overlay=shortest=1:x={}:y={}".format(index-1, index, width//grid_width * (index%grid_width), height//grid_height * (index//grid_width))complete_command = "ffmpeg" + input_videos + " -filter_complex \"" + input_setpts + input_overlays + "\" -c:v libx264 output.mp4"print(complete_command) 
随时随地看视频慕课网APP

相关分类

Python
我要回答