gifのn番目のフレーム削除(nフレームごとに1フレーム削除)

gifのn番目のフレーム削除(nフレームごとに1フレーム削除)

.gifffmpegを使って画面を録画しました。少し圧縮しましたが、それでもgifsicleかなり大きいですね。imagemagick私の目標は、2フレームごとに1フレームを削除して、フレームの総数を半分に減らしてフレームを小さくすることです。

gifsicleを使用または使用してこれを行う方法を見つけることができませんimagemagickmanページは役に立ちません。

.gifアニメーションのすべてのフレームからn1つのフレームを削除する方法は?

ベストアンサー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

おすすめ記事