我想使用ffmpeg在网格中堆叠一个、n×n视频。例如: 4x4,10x10,12x12,.因为我有很多视频,所以ffmpeg命令是在python中生成的,然后按顺序处理。xstack过滤器需要一个布局,该布局是以这种方式形成的:
xstack=inputs=16:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2|w0_0|w0_h0|w0_h0+h1|w0_h0+h1+h2|w0+w4_0|
w0+w4_h0|w0+w4_h0+h1|w0+w4_h0+h1+h2|w0+w4+w8_0|w0+w4+w8_h0|w0+w4+w8_h0+h1|w0+w4+w8_h0+h1+h2对于很少有视频的布局,我手工编写了xstack过滤器,但对于60x60视频,这是不合理的。
如何在python中生成布局字符串,给出由相同行和列组成的网格?
发布于 2022-06-22 20:50:32
对于完全填充的网格,可以使用interleave和tile筛选器来极大地简化filtergraph表达式。就像..。
[0:v]...[3599:v]interleave=3600,tile=60x60警告:这假设所有输入具有相同的框架和长度。如果输入帧不对齐,interleave可能会非常挑剔。
不过,我不知道这个链的性能如何与xstack相比。
发布于 2022-06-22 22:25:19
最后,我使用它为xstack过滤器生成布局字符串。尽管如此,它还是很混乱的:
n =4
layout_col = ["h0"]
for i in range(n-2):
current_col = "h" + str(i+1)
current_col = layout_col[-1]+"+"+current_col
layout_col.append(current_col)
layout_col.insert(0,"0")
layout_row = ["w0"]
for i in range(n-2):
current_row = "w"+str((i+1)*n)
current_row = layout_row[-1]+"+"+current_row
layout_row.append(current_row)
layout_row.insert(0,"0")
layout = []
for i in range(n):
for j in range(n):
comb = layout_row[i] + "_" + layout_col[j]
layout.append(comb)
layout = "|".join(layout)
layout = "xstack=inputs="+str(n)+":layout="+layout
print (layout)https://stackoverflow.com/questions/72721317
复制相似问题