Bất kỳ cách nào để tự động nén một tập tin .gif?


11

Tôi có một gif 2.0 mb tôi muốn làm cho nhỏ hơn, tốt nhất là bằng cách thả một số khung.

Có một tiện ích dòng lệnh hoặc một chương trình sẽ tự động làm điều đó cho tôi không?

Cảm ơn.


Bạn có thể muốn xem xét định dạng webm: nó giống như một gif được tối ưu hóa hơn!

Câu trả lời:


8

ImageOptim sử dụng Gifsicle để nén Gif. Theo như tôi biết, nó hoạt động khá tốt (tôi thường không sử dụng Gif những ngày này). Từ trang web của họ:

Tối ưu hóa hình ảnh động của bạn! Điều này chỉ lưu trữ phần đã thay đổi của mỗi khung và có thể thu nhỏ triệt để ảnh GIF của bạn. Bạn cũng có thể sử dụng độ trong suốt để làm cho chúng nhỏ hơn nữa. Trình tối ưu hóa của Gifsicle khá mạnh mẽ và thường làm giảm hình ảnh động trong một vài byte của trình tối ưu hóa thương mại tốt nhất.


6

Bạn có thể sử dụng GimpCài đặt gimp để xóa một số khung khỏi GIF cũng như tối ưu hóa lại tệp bằng cách lưu lại vào GIF.


Làm thế nào để bạn tối ưu hóa lại tệp khi lưu trong Gimp?
orschiro

2

Tôi sử dụng ezgif.com/optizes , vì GIMP và các công cụ khác không tốt trong công việc này. Sự khác biệt là ezgif sử dụng một gifsiclesửa đổi (với một lossycờ), không có sẵn trên aptphiên bản. Xem bản phát hành 1.82.1 tại đây (thay thế /usr/bin/gifsiclebằng bản thích hợp cho hệ thống của bạn (phần nhị phân kết thúc bằng -static).

Ghi chú của tôi về một quy trình tối ưu hóa gif đầy đủ có ở đây .

Chỉnh sửa : tập lệnh hiện tại khi được sử dụng sẽ được cập nhật trên GitHub tại đây

Tôi sẽ không mô tả cách tôi làm tất cả ở đây, ý tưởng chung là một vài hàm bash / bí danh:

function gifopt() {
    # args: $input_file ($loss_level)
    if [ -z "$2" ]
    then
        # use default of 30
        local loss_level=30
    elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ]
    then
        local loss_level=$2
    else
        echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2
        exit 1
    fi
    local inputgif="${1?'Missing input file parameter'}"
    local gifname="$(basename $inputgif .gif)"
    local basegifname=$(echo "$gifname" | sed 's/_reduced_x[0-9]//g')
    local outputgif="$basegifname-opt.gif"
    gifsicle -O3 --lossy="$loss_level" -o "$outputgif" "$inputgif";
    local oldfilesize=$(du -h $inputgif | cut -f1)
    local newfilesize=$(du -h $outputgif | cut -f1)
    echo "File reduced from $oldfilesize to $newfilesize as $outputgif"
}

function gifopt() {
    # args: $input_file ($loss_level)
    if [ -z "$2" ]
    then
        # use default of 30
        loss_level=30
    elif [[ "$2" =~ ^[0-9]+$ ]] && [ "$2" -ge 30 -a "$2" -le 200 ]
    then
        loss_level=$2
    else
        echo "${2:-"Loss level parameter must be an integer from 30-200"}" 1>&2
        exit 1
    fi
    local inputgif="${1?'Missing input file parameter'}"
    local gifname="$(basename $inputgif .gif)"
    local basegifname=$(echo "$gifname" | sed 's/_reduced_x[0-9]//g')
    local outputgif="$basegifname-opt.gif"
    gifsicle -O3 --lossy="$loss_level" -o "$outputgif" "$inputgif";
    local oldfilesize=$(du -h $inputgif | cut -f1)
    local newfilesize=$(du -h $outputgif | cut -f1)
    echo "File reduced from $oldfilesize to $newfilesize as $outputgif"
}

function gifspeedchange() {
  # args: $gif_path $frame_delay (1 = 0.1s)
  local orig_gif="${1?'Missing GIF filename parameter'}"
  local frame_delay=${2?'Missing frame delay parameter'}
  gifsicle --batch --delay $frame_delay $orig_gif
  local newframerate=$(echo "$frame_delay*10" | bc)
  echo "new GIF frame rate: $newframerate ms"
}

Các --lossylá cờ có một số nguyên 30-200, vì vậy đối với chất lượng tốt nhất:

gifsicle -O3 --lossy=30 -o output.gif input.gif

Với chức năng trên, gifoptbạn có thể đơn giản hóa các vấn đề, vì nó mặc định là 30

gifopt input.gif

... đầu ra sẽ được tự động đặt tên input-opt.gif. Bạn có thể thay đổi chức năng để sử dụng --batchcờ để chỉnh sửa tại chỗ nhưng tôi không khuyên bạn nên ghi đè tài liệu bắt đầu của bạn.

Hàm đó cũng hoạt động để loại bỏ bất kỳ _reduced_xhậu tố nào được thêm bởi chức năng giảm số lượng khung, tức là bạn có thể có một tệp trung gian input_reduced_x2.gif(một bước có thể giảm một nửa kích thước tệp bằng cách bỏ mọi khung hình khác).

Nếu bạn đã làm điều đó, tốc độ có thể thay đổi, gifspeedchange input-opt.gif 5ví dụ như đã sửa, để sử dụng độ trễ khung hình 50ms.


1

Bạn có thể tối ưu hóa tệp .gif của mình trên Gimp một cách dễ dàng.

Chỉ cần lưu dưới dạng .gif và sau đó nén hoặc bạn có thể lưu trong phần mở rộng khác dưới dạng .jpeg hoặc khác.


1
Làm thế nào để bạn nén trong Gimp?
orschiro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.