ffmpeg hstack 长文件列表

问题描述 投票:0回答:1

我有 1920 张分辨率为 1920x1080 的图像。我将每个图像切成 1x1080 的切片。它们位于标记为 img0001_slices、img0002_slices、...img1920_slices 的文件夹中。在文件夹中,切片标记为 img0001_slice_0、img0001_slice_1、... img0001_slice_1919。我想使用 ffmpeg 从切片中形成新图像。新图像应该是从左侧的 img1920 到右侧的 img0001 水平排列的所有原始图像的第一个切片。新图像二应该是相同顺序的原始图像的第二个切片,新图像三应该是第三个,依此类推。

到目前为止,我一直在尝试让 shell 脚本工作,我首先创建一个要组合的所有不同切片的文本文件,即

slice_0_inputs.txt

file 'img1920_slices/img1920_slice_0.png'
file 'img1919_slices/img1919_slice_0.png'
file 'img1918_slices/img1918_slice_0.png'
.
.
.
file 'img0001_slices/img0001_slice_0.png'

然后我就跑了

ffmpeg -f concat -i slice_0_inputs.txt -filter_complex "hstack=inputs=1920" reconstructed_slice_0.png

但我不断收到错误

Cannot find a matching stream for unlabeled input pad hstack
Error binding filtergraph inputs/outputs: Invalid argument

我尝试将文件 slice_0_inputs.txt 减少到只有 2 个文件路径并运行

ffmpeg -f concat -i slice_0_inputs.txt -filter_complex "[0:v][1:v]hstack=inputs=2" test.png

但我收到错误

Invalid file index 1 in filtergraph description [0:v][1:v]hstack=inputs=2.
Error binding filtergraph inputs/outputs: Invalid argument

有人可以帮助我理解我在这里遇到的问题吗?

ffmpeg
1个回答
0
投票

从串联解复用器馈送的输入是由串联的串联帧组成的单个输入。 hstack 需要并行输入,因此需要多个

-i
声明。然而,在这种情况下,效率非常低。

您可以继续使用 concat 方法,但使用平铺过滤器。

ffmpeg -f concat -i slice_0_inputs.txt -filter:v "tile=layout=1920x1" reconstructed_slice_0.png


您不需要将列切片保存为单独的文件。您可以创建全尺寸图像的连续列表,然后连续运行,

ffmpeg -f concat -i full_inputs.txt -filter:v "crop=1:ih:X:0:exact=1,tile=layout=1920x1" reconstructed_slice_X.png

其中 X 从 0 迭代到 1979。

© www.soinside.com 2019 - 2024. All rights reserved.