天天看點

[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