답변:
김프 및 기타 도구가이 작업에 적합하지 않으므로 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 프레임 지연을 사용하도록 고정 될 수 있습니다 .