Video
刪除 gif 的第 n 幀(每 n 幀刪除一幀)
我已經
.gif
用 ffmpeg 錄製了一個螢幕。我已經使用gifsicle
並imagemagick
壓縮了一點,但它仍然很大。我的意圖是通過每 2 幀刪除一幀來使其變小,這樣總幀數將減半。我找不到辦法做到這一點,無論是 with
gifsicle
還是 withimagemagick
。man
頁面沒有幫助。如何
.gif
每幀從動畫中刪除一n
幀?
可能有更好的方法來做到這一點,但這是我會做的
首先,將動畫分割成幀
convert animation.gif +adjoin temp_%02d.gif
然後,選擇一個帶有小 for 循環的 n 幀,在其中循環遍歷所有幀,檢查它是否可被 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