.gif
ffmpegを使って画面を録画しました。少し圧縮しましたが、それでもgifsicle
かなり大きいですね。imagemagick
私の目標は、2フレームごとに1フレームを削除して、フレームの総数を半分に減らしてフレームを小さくすることです。
gifsicle
を使用または使用してこれを行う方法を見つけることができませんimagemagick
。man
ページは役に立ちません。
.gif
アニメーションのすべてのフレームからn
1つのフレームを削除する方法は?
ベストアンサー1
おそらくより良い方法があります。しかし、私はこの方法を使います。
まず、アニメーションをフレームに分割します。
convert animation.gif +adjoin temp_%02d.gif
次に、小さなforループを使用してnフレームの1つを選択し、すべてのフレームを繰り返し2つに分割できることを確認し、次に新しい一時ファイルにコピーします。
j=0; for i in $(ls temp_*gif); do if [ $(( $j%2 )) -eq 0 ]; then cp $i sel_`printf %02d $j`.gif; fi; j=$(echo "$j+1" | bc); done
分割できないすべての数字を保持するには(つまり、n番目のフレームごとに保持せずに削除したい場合)-eq
に置き換えます-ne
。
完了したら、選択したフレームから新しいアニメーションを作成します。
convert -delay 20 $( ls sel_*) new_animation.gif
convert.sh
このような小さなスクリプトを簡単に作成できます
#!/bin/bash
animtoconvert=$1
nframe=$2
fps=$3
# Split in frames
convert $animtoconvert +adjoin temp_%02d.gif
# select the frames for the new animation
j=0
for i in $(ls temp_*gif); do
if [ $(( $j%${nframe} )) -eq 0 ]; then
cp $i sel_`printf %02d $j`.gif;
fi;
j=$(echo "$j+1" | bc);
done
# Create the new animation & clean up everything
convert -delay $fps $( ls sel_*) new_animation.gif
rm temp_* sel_*
その後、たとえば電話してください。
$ convert.sh youranimation.gif 2 20