Tôi nghĩ rằng tôi cần một lời giải thích mới phức tạp hơn (độ trễ khung hình cũng là điều quan trọng cũng cần được xem xét) ... Đối với quy trình mới này, bạn sẽ cần tải xuống JREPL.BAT từ liên kết này:
http://www.dostips.com /forum/viewtopic.php?t=6044
Trước tiên, sao chép gif đã chụp vào tệp input.gif, sau đó bắt đầu trình thông dịch lệnh và gõ:
gifsicle input.gif -I "# -1"> input.txt
nhìn vào input.txt và xem độ dài của hình ảnh động là bao nhiêu - nó chứa bao nhiêu khung hình ... cũng xem xét độ trễ của khung hình và nếu 0,07 của nó có nghĩa là bạn nên đặt tùy chọn -d14 (7msec * 2) vào dòng này trong process.cmd: gifsicle -b -U -d14 input.gif, sau khi chỉnh sửa lưu process.cmd
sau đó chỉnh sửa test.bat và thay đổi giá trị của biến 166 từ dòng này để khớp với số khung hình của hình động: for / L %% i IN (1,2,166) DO echo "# %% i" >> input.bat, sau chỉnh sửa lưu test.bat ...
sau đó bắt đầu process.cmd và cắt hình động với mọi khung hình lẻ sẽ được xử lý thành tệp input.gif
PS Ưu điểm của phương pháp này là bạn có toàn quyền kiểm soát những gì bạn muốn xóa khỏi gif (mỗi khung hình thứ hai (1,2,166) hoặc mỗi thứ ba (1,3,166)), và cứ thế thay đổi số giữa dòng lô, nhưng lưu ý rằng nếu bạn chỉ định (1,3,166), bạn nên thay đổi -d14 (tùy chọn độ trễ) từ process.cmd để phản ánh thay đổi (7msec * 3/2 = 10), vì vậy thay vì (7msec * 2 / 1 = 14), tùy chọn cho độ trễ phải là -d10 ...
Các tệp khác (ví dụ: xóa mọi khung hình thứ hai): 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 -
quá trình.cmd:
gifsicle -b -U -d14 input.gif
call "test.bat"
call "input.bat"
gifsicle -b -O3 input.gif
erase "input.bat"
Và tập tin trợ giúp 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