为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2023-08-22 16:02:19
我有 36 个具有相同尺寸的视频文件,想要将它们连接成一个具有 6x6 网格的视频。理想情况下,给出的视频数量是非正方形的,例如 12 个,4x3 网格,因为它可以是最大的正方形就很好了。我尝试使用 matplotlib 的动画库,但未能首先将两个方向的视频连接为行,然后连接为列。任何帮助都是appriced!
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

OP 讨论了 256 个视频的缩放问题。就此而言,我建议使用自动化,例如使用 Python。我们可以看到这部分会随着视频数量的变化而变化:

假设你有一个 python 中所有视频的列表(你可以手动完成,但我建议os.listdir像这样使用)

以同样的方式,您必须生成过滤器的输入overlay,这将取决于您的输出分辨率。假设它是由widthheight变量定义的。grid_width另外,在我的示例中,网格(和)的视频数量grid_width是手动设置的。这是一个代码示例,我没有资源或时间来测试,但这应该是您工作的良好基础:

###list_videos contains the path the the videos

width = 1920

height = 1080

input_videos = ""

input_setpts = "nullsrc=size={}x{} [base];".format(width, height)

input_overlays = "[base][video0] overlay=shortest=1 [tmp0];"

grid_width = 16

grid_height = 16

for 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) 


查看完整回答
反对 回复 2023-08-22
  • 1 回答
  • 0 关注
  • 1567 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信