天天看点

[ImageMagick、ffmpeg]将9个gif图片组合成九宫格视频简介将所有的gif都转为正方形gif转mp4concat合并多个相同视频多路合并视频并调整位置

使用ImageMagick和ffmpeg将gif图片组合成九宫格视频

  • 简介
  • 将所有的gif都转为正方形
    • 第一步
    • 第二步
      • 方法一
      • 方法二
  • gif转mp4
  • concat合并多个相同视频
  • 多路合并视频并调整位置
    • 加入音频

简介

将9个gif排列成3x3格式制作成视频

如图:

[ImageMagick、ffmpeg]将9个gif图片组合成九宫格视频简介将所有的gif都转为正方形gif转mp4concat合并多个相同视频多路合并视频并调整位置

将所有的gif都转为正方形

改变gif尺寸,使长方形的gif图片转变为正方形,且图片比例不变,添加指定的背景颜色

[ImageMagick、ffmpeg]将9个gif图片组合成九宫格视频简介将所有的gif都转为正方形gif转mp4concat合并多个相同视频多路合并视频并调整位置

第一步

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’ (多写几行)

[ImageMagick、ffmpeg]将9个gif图片组合成九宫格视频简介将所有的gif都转为正方形gif转mp4concat合并多个相同视频多路合并视频并调整位置
ffmpeg -f concat -safe 0 -i list.txt -t 7 -c copy 1_1.mp4 
           

多路合并视频并调整位置

[ImageMagick、ffmpeg]将9个gif图片组合成九宫格视频简介将所有的gif都转为正方形gif转mp4concat合并多个相同视频多路合并视频并调整位置
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