
並べて実行したい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自体の問題なのかはわかりません。しかし、私はこれをブラウザで観察できませんでした。
Ubuntu 23.10、ffmpeg 6.0でテストされました。
答え3
convert
入力画像を2つ以上提供し、オプションを提供する場合、-delay
出力形式がgifの場合はアニメーションgifが出力されます。
以前は、次のリンクを参照ガイドとして使用していました。http://www.imagemagick.org/Usage/anim_basics/