首页 > 解决方案 > 使用 FFmpeg 将 JPEG 图像序列无损合并到网格中

问题描述

我有一系列图像,它们是更大图像的块,它们共同构成了整个图像。这些块是沿均匀间隔的水平和垂直线分割原始图像的结果,因此它们没有奇怪的尺寸。

有没有办法在不重新编码图像的情况下将它们与 FFmpeg(或 ImageMagick 之类的其他东西)结合起来?

这个答案建议使用hstackor vstackFFmpeg 过滤器,但我的图像块不一定是原始图像的全宽或全高。


像这样:

3 行 2 列网格中的六个不同大小的块

也许这可以通过使用hstackor的多个 FFmpeg 命令来实现vstack(尽管我更喜欢一个命令)。还是使用复杂的过滤器?


例如蒙娜丽莎分成六个不同的块,然后排列在一起


编辑:我尝试filter_complex与 FFmpeg 一起使用:

ffmpeg -i 0.jpg -i 1.jpg -i 2.jpg -i 3.jpg -i 4.jpg -i 5.jpg \
-filter_complex "[0][1]hstack=inputs=2[row 0]; \
                 [2][3]hstack=inputs=2[row 1]; 
                 [4][5]hstack=inputs=2[row 2]; 
                 [row 0][row 1][row 2]vstack=inputs=3[out]" \
-map "[out]" -c copy out.jpg

但它不能同时过滤和复制流。

标签: image-processingffmpegjpegcrop

解决方案


你可以用 ImageMagick 做到这一点。但是,它将解压缩并重新压缩您的 jpg 文件。你会失去一些品质。

IM 6 的 Unix 语法:

convert \
\( 0.jpg 1.jpg +append \) \
\( 2.jpg 3.jpg +append \) \
\( 4.jpg 5.jpg +append \) \
-append \
mona_lisa.jpg


如果使用 Windows,请从括号中删除 \ 并将行尾替换为 ^。

如果使用 IM 7,请将 convert 替换为 magick。


推荐阅读