6

使用ffmpeg拼接两张图片

 1 year ago
source link: https://zxs.io/article/1918
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

  最近在工作中遇到了一个需求,就是需要将两张图片拼接在一起,作为一个封面图。如果只是临时拼接一张,我们可以只用photoshop之类的图片编辑工具,将两张图片拼接在一起。而我们的需要是需要实现自动化,由于之前使用过ffmpeg做过图片的操作,于是搜索了下,ffmpeg确实能实现两张图片的拼接,这里分享下相关操作的命令行。

  为了方便演示拼接效果,我这里提前准备了两张图片,cat.jpg和dog.jpg。如果想练习本文中所涉及到的命令行,也可以直接下载这两张图。

在这里插入图片描述
在这里插入图片描述

备注:ffmpeg拼接图片时要求图片大小一致,所以我已经提前将两种图片预处理成同样大小的方形图片了。

水平or垂直拼接

  首先是最简单的两种拼接,也就是直接将这俩张图水平或者垂直拼接在一起,我们先看垂直拼接命令行和效果。

复制
ffmpeg -i cat.jpg -i dog.jpg -filter_complex vstack vout.jpg
在这里插入图片描述

  再看下水平拼接的命令行和效果:

复制
ffmpeg -i cat.jpg -i dog.jpg -filter_complex hstack hout.jpg
在这里插入图片描述

  这里最重要的参数就是-filter_complex hstack-filter_complex vstack 其中h代表英文单词horizontal,v代表英文单词vertical。

  如果我们只想让两张图的部分拼接在一起,防止图片过宽或者过长,我们也可以filter_complex增加一些更复杂的参数来分别截取部分内容拼接起来,如下:

复制
ffmpeg -i cat.jpg -i dog.jpg -filter_complex "[0:v]crop=960:1920:0:0[img1];[1:v]crop=960:1920:0:0[img2];[img1][img2]hstack" phoutput.jpg

  其中[0:v]和[1:v]分别表示第一张图片和第二张图片的画面。crop=960:1920:0:0表示截取大小为960:1920的区域,后面的0:0表示从坐标0:0点(左上角)开始截取,[img1]和[img2]是临时命名的截取后的图片。hstack表示水平拼接,最后的拼接效果如下:

在这里插入图片描述

  我们也可以截取狗狗图的右半部分,只需要将命令行中的第二个crop=960:1920:0:0 替换成 crop=960:1920:960:0即可,完整命令和拼接效果如下:

复制
ffmpeg -i cat.jpg -i dog.jpg -filter_complex "[0:v]crop=960:1920:0:0[img1];[1:v]crop=960:1920:960:0[img2];[img1][img2]hstack" phoutput1.jpg
在这里插入图片描述

  这里相信你也能自己拼出来垂直拼接的命令了,完整命令和拼接效果如下:

复制
ffmpeg -i cat.jpg -i dog.jpg -filter_complex "[0:v]crop=1920:960:0:0[img1];[1:v]crop=1920:960:0:960[img2];[img1][img2]vstack" pvoutput.jpg
在这里插入图片描述

  通过本篇文章的介绍,我们了解了使用FFmpeg拼接两张图片的方法。可以看到出来,使用ffmpeg将两张图片拼接在一起还是相当简单的。希望这篇文章能够对大家有所帮助,如果您有任何疑问或者建议,欢迎在评论区留言。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK