我用 ffmpeg xstack 做分屏——经过一些迭代后它们变得非常大,所以我想在这个过程中缩小它们。但我收到错误“过滤器刻度有未连接的输出”。这是我的代码(从 Python 调用,但对于过滤器应该没有区别):
subprocess.call(['ffmpeg', '-i', input_clips[j + 0], '-i', input_clips[j + 1], '-i', input_clips[j + 2], '-i', input_clips[j + 3], '-filter_complex', '[0:v]scale=3840:1920[v0];[1:v]scale=3840:1920[v1];[2:v]scale=3840:1920[v2];[3:v]scale=3840:1920[v3];[0:v][1:v][2:v][3:v]xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0[v]', '-map', '[v]', '-c:v', 'libx265', '-crf', '12', '-preset', 'ultrafast', '-an', output])
我知道问题出在输入和输出语法中,但我只是没有找到任何可以理解的解释(谷歌太短了):例如做什么。[0:v] [v0] 和 [v] 真的是什么意思?
给 xstack 缩放的视频。您的命令正在向 xstack 提供原始未缩放的视频。
利用:
subprocess.call(['ffmpeg', '-i', input_clips[j + 0], '-i', input_clips[j + 1], '-i', input_clips[j + 2], '-i', input_clips[j + 3], '-filter_complex', '[0:v]scale=3840:1920[v0];[1:v]scale=3840:1920[v1];[2:v]scale=3840:1920[v2];[3:v]scale=3840:1920[v3];[v0][v1][v2][v3]xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0[v]', '-map', '[v]', '-c:v', 'libx265', '-crf', '12', '-preset', 'ultrafast', '-an', output])
您收到错误
Filter scale has an unconnected output
是因为必须使用所有过滤器输出:通常由其他过滤器或通过将其定向到输出文件。但是您的命令只是孤立了比例过滤器的输出。[0:v]
0
是输入#0。v
是来自输入 #0 的所有视频。input_clips[j + 0]
因此,它指的是您的命令中命名的第一个输入中的视频。[v0]
是比例过滤器之一的输出的任意名称。您可以随意命名它,例如,[superamazingscaledvideo]
如果您愿意的话。[v]
是另一个任意名称,指的是 xstack 的最终输出,然后用于-map
从 xstack 选择输出并将其放入输出文件的选项中。同样,您可以使用任何您想要的名称。在这种情况下[v]
,并且-map [v]
可以选择省略,因为默认情况下,输出-filter_complex
将包含在输出文件中,但具体来说并不是一个坏主意。有关更多信息,请参阅FFmpeg 过滤介绍。