使用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