使用ImageMagick和ffmpeg将gif图片组合成九宫格视频
- 简介
- 将所有的gif都转为正方形
-
- 第一步
- 第二步
-
- 方法一
- 方法二
- gif转mp4
- concat合并多个相同视频
- 多路合并视频并调整位置
-
- 加入音频
简介
将9个gif排列成3x3格式制作成视频
如图:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP31EerRkT3dmeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0IzM5UDOwkTM3EzMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
将所有的gif都转为正方形
改变gif尺寸,使长方形的gif图片转变为正方形,且图片比例不变,添加指定的背景颜色
第一步
magick convert 9.gif -coalesce 9_1.gif
-coalesce或-layers coalesce 在每个点上创建动画的完整视图,有点像真实的电影胶片,而不是动画序列。这种序列被称为合并动画,它更容易研究,编辑,修改和重新优化
参考:https://www.imagemagick.org/Usage/layers/#coalesce
https://qastack.cn/ubuntu/257831/how-can-i-resize-an-animated-gif-file-using-imagemagick
注:如果不执行这条命令,有些gif的某些帧会错乱
第二步
方法一
magick convert 9_1.gif -resize 200x200 -background #f8d3a3 -gravity center -extent 200x200 9_2.gif
-extent 调整图像尺寸,参考:https://www.imagemagick.org/Usage/crop/#extent
方法二
magick montage 9_1.gif -tile 1x1 -geometry 200x200 -background "#f8d3a3" 9_2.gif
montage 蒙太奇剪辑图片工具,通过组合几个单独的图像来创建合成图像。图像可以平铺在合成图像上,并可以为图像加上边框,框架,图像名称等。
-tile 指定平铺图像的布局,参考:https://www.imagemagick.org/Usage/montage/#tile
注:不知道为什么这样会使得gif变慢(帧率减少?),所以还是选择方法一比较好
gif转mp4
ffmpeg -f gif -i 9_2.gif -pix_fmt yuv420p 9.mp4
-pix_fmt [:stream_specifier] format (input/output,per-stream) 设置像素格式
注:如果没有-pix_fmt yuv420p,Windows下的播放器无法播放视频,但浏览器可以
将所有9个gif都转化成mp4
concat合并多个相同视频
参考:http://trac.ffmpeg.org/wiki/Concatenate
因为一个gif转成的视频只循环一次,时间很短,不符合我们的要求,所以要让其多循环几次,所以将gif转的mp4,多合并几个增加它的循环次数(我也不知有没有其它更好的方法)
首先要新建个txt ---- list.txt,其中内容如下:
file ‘E:\11.08\test\mp4\1.mp4’ (多写几行)
ffmpeg -f concat -safe 0 -i list.txt -t 7 -c copy 1_1.mp4
多路合并视频并调整位置
ffmpeg -i 1_1.mp4 -i 2_1.mp4 -i 3_1.mp4 -i 4_1.mp4 -i 5_1.mp4 -i 6_1.mp4 -i 7_1.mp4 -i 8_1.mp4 -i 9_1.mp4 -filter_complex "[0:v]pad=iw*3:ih*3[a];[a][1:v]overlay=w[b];[b][2:v]overlay=w*2[c];[c][3:v]overlay=0:h[d];[d][4:v]overlay=w:h[e];[e][5:v]overlay=w*2:h[f];[f][6:v]overlay=0:h*2[g];[g][7:v]overlay=w:h*2[h];[h][8:v]overlay=w*2:h*2" com.mp4
-filter_complex filtergraph
其余的自己体会,哈哈
加入音频
ffmpeg -i com.mp4 -i bgm.mp3 -t 7 -c copy gif.mp4