问题描述
遇到让我难堪的 hstack
FFmpeg 命令的问题。
input1
和 input2
都是 360x640 垂直视频。我将 input1
裁剪为一个正方形,将其与 input2
垂直合并,然后从生成的视频的每一侧裁剪一个垂直条并水平合并这三个视频(左条,中间垂直堆叠的视频,右条)。
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex [0:v]crop=360:360:0:140,fps=30[v0],[1:v]fps=30[v1],[v0][v1]vstack=inputs=2[m],[m]crop=101:ih:0:0[l],[m]crop=101:ih:259:0[r],[l][m][r]hstack=inputs=3[v];[0:a][1:a]amix[a] -map [v] -map [a] -preset ultrafast ./stackedOutput.mp4
[Parsed_hstack_6 @ 0x7ff5394482c0] Input 1 height 640 does not match input 0 height 1000. [Parsed_hstack_6 @ 0x7ff5394482c0] Failed to configure output pad on Parsed_hstack_6
但是[m]
(Input 1
中的hstack
)的高度不是 640
,它是1000
。我已经在独立运行命令时验证了这一点。
为什么 FFmpeg 无法识别 [m]
的正确高度?非常感谢任何帮助或指示!提前致谢!
解决方法
使用:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]crop=360:360:0:140,fps=30[v0];[1:v]fps=30[v1];[v0][v1]vstack=inputs=2,split=3[lc][m][rc];[lc]crop=101:ih:0:0[l];[rc]crop=101:ih:259:0[r];[l][m][r]hstack=inputs=3[v];[0:a][1:a]amix[a]" -map "[v]" -map "[a]" -preset ultrafast ./stackedOutput.mp4
两个问题:
-
您的语法不正确。同一线性链中的过滤器用逗号分隔,不同的线性过滤器链用分号分隔。见filtering introduction。
-
您不能多次重复使用过滤器的输出。在您的命令中
[m]
已被第一次裁剪消耗,因此它不再可用于后续裁剪和 hstack。拆分过滤器可用于制作过滤器输出的多个副本。