ImageMagickを使用して2つのアニメーションを並べて実行

ImageMagickを使用して2つのアニメーションを並べて実行

並べて実行したい2つのアニメーション(.gifファイル)があります。 ImageMagickを使ってこれを行うことはできますか?

また、他のgifの30フレームが経過した後、gifの1つの再生を開始したいと思います。これもできますか?それ以外の場合は、手動で30個の黒いフレームを画像に挿入できますが、この手順を複数回実行できるため、ImageMagickを使用してこの手順を自動化する方が簡単になります。

答え1

このスクリプトの機能は次のとおりです。

#!/bin/bash
# $1 : first gif
# $2 : second gif

mkdir first
cd first
convert $1 x%04d.gif
cd ..
mkdir second
cd second
convert $2 x%04d.gif
cd ..

for filename in first/*
do
  filename=`basename $filename`
  montage -tile 2x1 -geometry 512x512 first/$filename second/$filename concat$filename
done
convert concat* output.gif

rm -rf first
rm -rf second
rm concat*

答え2

ffmpeg "one-liner"に中間ファイルはありません

ffmpegはGIFも処理できるようになり、次の「ビデオパラレル」質問に対する回答を使用できるようになりました。2つのビデオクリップを1つにマージして並べて配置この問題も解決してみよう。次のコマンドは、それぞれ固定高さが300ピクセルの2つのGIFを並べて組み合わせます。

ffmpeg \
  -i 1.gif \
  -i 2.gif \
  -filter_complex '
  [0]scale=-1:300[a];
  [1]scale=-1:300[b];
  [a][b]hstack
  ' \
  12.gif

ここに画像の説明を入力してください。

テスト入力1.gif(480x、青色の背景、2秒)と2.gif(640x、緑色の背景、3秒)を作成しました。

ffmpeg -y -f lavfi -i "
color=blue:480x480:d=2,
drawtext=
  fontcolor=black:
  fontsize=600:
  text='%{eif\:t\:d}':
  x=(w-text_w)/2:
  y=(h-text_h)/2
" 1.gif
ffmpeg -y -f lavfi -i "
color=green:640x640:d=3,
drawtext=
  fontcolor=black:
  fontsize=800:
  text='%{eif\:t\:d}':
  x=(w-text_w)/2:
  y=(h-text_h)/2
" 2.gif

このコマンドは、次の処理グラフを生成します。

1.gif --> [0] --> scale --> [a] --+
                                  |
                                  v
                                  hstack --> 12.gif
                                  ^
                                  |
2.gif --> [1] --> scale --> [b] --+
  • まずscaleフィルター動画を編集して同じ高さに設定
  • だからhstackフィルタービデオ間で拡大されたコンテンツを取得し、水平方向に「スタック」します。

ご覧のとおり、あるGIFが他のGIFよりも長い場合、このコマンドは最後のフレームで最も短いGIFを停止します。

代わりに、ビデオを最短ビデオ実行時間に切り捨てるには、次のshortest=1オプションを追加できますhstack

ffmpeg -y -i 1.gif -i 2.gif -filter_complex '[0]scale=-1:300[a];
  [1]scale=-1:300[b];[a][b]hstack=shortest=1' 12-short.gif

ここに画像の説明を入力してください。

または、垂直に積み重ねるには、次のものを使用できます。vstackフィルター、高さの代わりにビデオの幅を変更します。

ffmpeg -y -i 1.gif -i 2.gif -filter_complex '[0]scale=300:-1[a];
  [1]scale=300:-1[b];[a][b]vstack' 12-vert.gif

ここに画像の説明を入力してください。

結果のビデオをローカルで見ると、eog最初のループにいくつかのグラフィックアーティファクトがあります。これがeogバグなのかGIF自体の問題なのかはわかりません。しかし、私はこれをブラウザで観察できませんでした。

関連:https://stackoverflow.com/questions/30927367/imagemagick-making-2-gifs-into-side-by-side-gifs-using-im-convert

Ubuntu 23.10、ffmpeg 6.0でテストされました。

答え3

convert入力画像を2つ以上提供し、オプションを提供する場合、-delay出力形式がgifの場合はアニメーションgifが出力されます。

以前は、次のリンクを参照ガイドとして使用していました。http://www.imagemagick.org/Usage/anim_basics/

関連情報