Video

刪除 gif 的第 n 幀(每 n 幀刪除一幀)

  • October 14, 2014

我已經.gif用 ffmpeg 錄製了一個螢幕。我已經使用gifsicleimagemagick壓縮了一點,但它仍然很大。我的意圖是通過每 2 幀刪除一幀來使其變小,這樣總幀數將減半。

我找不到辦法做到這一點,無論是 withgifsicle還是 with imagemagickman頁面沒有幫助。

如何.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

引用自:https://unix.stackexchange.com/questions/89242