Myślę, że potrzebuję nowego, bardziej złożonego wyjaśnienia (opóźnienie ramki jest również ważną rzeczą, którą również należy wziąć pod uwagę) ... W tym nowym procesie musisz pobrać JREPL.BAT z tego linku:
http://www.dostips.com /forum/viewtopic.php?t=6044
Najpierw skopiuj przechwycony gif do pliku input.gif, a następnie uruchom interpreter poleceń i wpisz:
gifsicle input.gif -I "# -1"> input.txt
spójrz na input.txt i zobacz, jaka jest długość animacji - ile klatek zawiera ... również sprawdź opóźnienie klatki i jeśli jej 0.07s oznacza, że powinieneś wstawić opcję -d14 (7 ms * 2) w tym wierszu w process.cmd: gifsicle -b -U -d14 input.gif, po edycji zapisz proces.cmd
następnie edytuj test.bat i zmień wartość zmiennej 166 z tego wiersza, aby dopasować ją do liczby klatek animacji: for / L %% i IN (1,2,166) DO echa "# %% i" >> input.bat, po edytuj zapisz test.bat ...
następnie uruchom process.cmd i przycięte animacje z każdą nieparzystą klatką zostaną przetworzone do pliku input.gif
PS Zaletą tej metody jest również to, że masz pełną kontrolę nad tym, co chcesz usunąć z gif (co druga klatka (1,2,166) lub co trzecia (1,3,166)) i tak dalej, po prostu zmień środkową liczbę w linia wsadowa, ale pamiętaj, że jeśli podasz (1,3,166), odpowiednio zmień -d14 (opcja opóźnienia) z process.cmd, aby odzwierciedlić zmianę (7 ms * 3/2 = 10), więc zamiast (7 ms * 2 / 1 = 14), opcja opóźnienia powinna wynosić -d10 ...
Inne pliki (na przykład usuwanie co drugą klatkę): test.bat:
@echo off
echo gifsicle -b input.gif --delete>> input.bat
for /L %%i IN (1,2,166) DO echo "#%%i">> input.bat
echo --done>> input.bat
call jrepl.bat "\n" "" /x /m /f input.bat /o -
process.cmd:
gifsicle -b -U -d14 input.gif
call "test.bat"
call "input.bat"
gifsicle -b -O3 input.gif
erase "input.bat"
I plik pomocniczy readme input.txt:
* input.gif 166 images
logical screen 1366x768
global color table [256]
background 15
loop forever
+ image #165 1x1 at 1365,767 transparent 15
disposal asis delay 0.07s
let i=0; while [[ $i -lt $(($numframes / 2)) ]]; do gifsicle $2 --delete "#$i" -o $2; let i=i+1; done