.gif 파일을 자동으로 압축하는 방법이 있습니까?


11

가급적 작게 만들고 싶은 2.0 mb gif가 있습니다.

자동으로 수행 할 명령 줄 유틸리티 나 프로그램이 있습니까?

감사.


webm 형식을 살펴보고 싶을 수도 있습니다. 최적화 된 GIF와 같습니다!

답변:


8

ImageOptim의 용도 Gifsicle를 그있는 GIF 압축에. 내가 아는 한, 잘 작동합니다 (요즘에는 일반적으로 Gif를 사용하지 않습니다). 그들의 사이트에서 :

애니메이션을 최적화하십시오! 이것은 각 프레임의 변경된 부분 만 저장하며 GIF를 크게 줄입니다. 투명도를 사용하여 더 작게 만들 수도 있습니다. Gifsicle의 옵티마이 저는 매우 강력하며 일반적으로 최고의 상용 옵티마이 저의 2 바이트 이내로 애니메이션을 줄입니다.


6

Gimp김프 설치 를 사용 하여 GIF에서 일부 프레임을 제거하고 파일을 다시 GIF로 저장하여 파일을 다시 최적화 할 수 있습니다.


Gimp 저장시 파일을 어떻게 다시 최적화합니까?
orschiro

2

김프 및 기타 도구가이 작업에 적합하지 않으므로 ezgif.com/optimize를 사용 합니다. 차이점은 ezgif가 버전에서 사용할 수없는 gifsicle수정 ( lossy플래그 포함)을 사용한다는 것 apt입니다. 여기에서 릴리스 1.82.1을 참조 하십시오 ( /usr/bin/gifsicle시스템에 적합한 것으로 대체 하십시오 ( 이진수는로 끝남 -static).

전체 GIF 최적화 워크 플로우에 대한 나의 노트는 여기에 있습니다 .

편집 : 현재 사용중인 스크립트는 GitHub 에서 업데이트됩니다.

여기에 내가 어떻게하는지 설명하지 않을 것입니다. 일반적인 아이디어는 몇 가지 bash 함수 / 별칭입니다.

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"
}

--lossy플래그는 그래서 최고의 품질을 위해, 200-30의 정수를 취합니다

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

위의 기능 gifopt을 사용하면 기본값이 30이므로 문제를 단순화 할 수 있습니다

gifopt input.gif

... 출력의 이름은 자동으로 지정 input-opt.gif됩니다. --batch내부 편집에 플래그 를 사용하도록 기능을 변경할 수 있지만 시작 자료를 덮어 쓰지 않는 것이 좋습니다.

이 기능은 또한 _reduced_x프레임 수 감소 기능에 의해 추가 된 접미사 를 제거하는 데에도 사용됩니다. 즉, 중간 파일 input_reduced_x2.gif(다른 프레임마다 드롭하여 파일 크기를 반으로 줄이는 단계)을 가질 수 있습니다 .

그렇게하면 속도가 변경되어 gifspeedchange input-opt.gif 5예를 들어 50ms 프레임 지연을 사용하도록 고정 될 수 있습니다 .


1

Gimp에서 .gif 파일을 쉽게 최적화 할 수 있습니다.

.gif로 저장 한 다음 압축하거나 다른 확장자로 .jpeg 또는 기타로 저장할 수 있습니다.


1
김프에서 어떻게 압축합니까?
orschiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.