ImageMagick을 사용하여 애니메이션 GIF 파일의 크기를 어떻게 조정할 수 있습니까?


46

애니메이션 GIF 파일의 크기를 조정하고 싶습니다. do.gif 여기에 이미지 설명을 입력하십시오

내가 do -24.gifconvert do.gif -resize 24x24\! do-24.gif 에서 크기를 조정 하지만 애니메이션되지 않은 경우여기에 이미지 설명을 입력하십시오

동일한 애니메이션을 얻기 위해 올바른 방법으로 크기를 조정하는 방법은 무엇입니까?

답변:


56

첫 실행 :

convert do.gif -coalesce temporary.gif

그때

convert -size <original size> temporary.gif -resize 24x24 smaller.gif

2
-coalesce"애니메이션 시퀀스보다는 실제 필름 스트립과 같은 각 지점에서 애니메이션의 완전한 뷰를 생성합니다. Coalesced Animation 으로 알려진 이러한 시퀀스 는 연구, 편집, 수정 및 재 최적화가 훨씬 쉽습니다."
sam

28
gifsicle --resize 24x24 > do-24.gif이것도 할 수 있습니다

2
통합보기는 최적화 된 것보다 훨씬 큽니다 (내 테스트에서 3.2 배). 크기를 조정하면 병합 된 이미지가 생성됩니다.이 이미지는 해상도가 있어도 파일 크기 (원본 테스트에서 2.3 배)보다 원본 이미지보다 클 수 있습니다 더 작습니다. 직접 크기를 조정하려고하면 이미지가 작고 파일 크기가 작지만이 이미지에서만 작동합니다.
endolith

1
gifsicle은 제 사용 사례에 대해 훨씬 더 우수하고 최적화 된 출력을 생성했습니다. 감사합니다 @sam!
sj26

4
입력 크기를 지정하지 않고 변환 임시 .gif-크기 변경 24x24 small.gif 작동합니다.
AMB

3

-coalesce + -deconstruct

후에 -coalesce는 다음을 추가하고 싶을 것입니다 -deconstruct.

convert in.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif

문제의 근본 원인은 입력 GIF가 올바르게 최소화 되었기 때문입니다. GIF를 사용하면 다음 프레임이 이전 프레임에서 수정 된 사각형으로 오프셋됩니다.

-coalesce그런 다음 모든 프레임을 원래 크기로 확장하여 크기 조정 작업을 수행하지만 입력 이미지로 프레임을 다시 압축하지 않습니다 -deconstruct.

이 답변의 테스트 데이터 사용 : 스틸 이미지에서 애니메이션 GIF를 만드는 방법은 무엇입니까? 우리는 이것을 명확하게 볼 수 있습니다 identify:

$ identify out-convert.gif | head -n 3
out-convert.gif[0] GIF 1024x1024 1024x1024+0+0 8-bit sRGB 256c 16.7865MiB 0.020u 0:00.019
out-convert.gif[1] GIF 516x516 1024x1024+252+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019
out-convert.gif[2] GIF 515x520 1024x1024+248+257 8-bit sRGB 256c 16.7865MiB 0.030u 0:00.019

$ convert out-convert.gif -resize 256x out.gif
$ identify out.gif | head -n 3
out.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[1] GIF 256x256 256x256+125+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009
out.gif[2] GIF 256x258 256x256+123+128 8-bit sRGB 256c 5.0479MiB 0.000u 0:00.009

$ convert out-convert.gif -coalesce -resize 256x out-coalesce.gif
$ identify out-coalesce.gif | head -n 3
out-coalesce.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[1] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009
out-coalesce.gif[2] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.97683MiB 0.010u 0:00.009

$ convert out-convert.gif -coalesce -resize 256x -deconstruct out-deconstruct.gif
$ identify out-deconstruct.gif | head -n 3
out-deconstruct.gif[0] GIF 256x256 256x256+0+0 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[1] GIF 135x135 256x256+60+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010
out-deconstruct.gif[2] GIF 135x136 256x256+59+61 8-bit sRGB 256c 1.87942MiB 0.010u 0:00.010

out.gif

여기에 이미지 설명을 입력하십시오

out-coalesce.gif

여기에 이미지 설명을 입력하십시오

out-deconstruct.gif

여기에 이미지 설명을 입력하십시오

먼저, out-convert.gif프레임 2가 516x516오프셋 252+257에 있고 전체 크기의 프레임 1이 이므로 파일을 입력하는 방법 은 실제로 압축되었습니다 1024x1024.

그런 다음 세 가지 전환을 비교하면

  • out.gif: 모든 프레임이 크 256x256거나 크고 약 5MiB에서 거대합니다. 왜 TODO입니까?

    대략적으로 256x256프레임들에 0이 아닌 오프셋이 있기 때문에 시각적으로 부정확합니다 ( 예 : 125+128프레임 2)!

  • out-coalesce.gif: 모든 프레임이 256x256올바른 오프셋을 갖습니다 0+0.

    출력은 시각적으로 정확 해 보이지만 출력 파일 크기는 2.0MiB로 out-deconstruct.gif

  • out-deconstruct.gif: 압축 프레임, 최종 출력 크기 1.9 MiB.

    보다 상당히 작지는 out-coalesce.gif않지만, 이것은 검은 땅이 실제로 잘 압축되어 있기 때문에 발생하는 것으로 생각되며 일반적으로 매우 중요 할 수 있습니다.

ffmpeg와 gifsicle

또한 다음 명령을 시도했습니다.

ffmpeg -i out-convert.gif -vf scale=256:-1 out-ffmpeg-small.gif
gifsicle --resize 256x256 out-convert.gif > out-gifsicle.gif

둘 다 1.5 MiB 출력을 훨씬 더 정확하게 생성했습니다.

참고 : 스틸 이미지에서 애니메이션 GIF를 만드는 방법 (바람직하게는 명령 줄 사용)을 참조하십시오.

TODO : 왜 그것들을보다 작게 만들 수 convert있습니까? 그들은 더 작은 최소 사각형 또는 다른 것을 더 잘 선택하고 있습니까?

우분투 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8에서 테스트되었습니다.


3

나는 익숙한 imagemagick 솔루션을 찾고 있었지만 결국 @sam의 제안을 받았습니다 gifsicle. 그것은 내가 원했던 것만으로 번거롭지 않았습니다.

결과 파일 크기를 여러 가지 방법으로 최적화 할 수 있지만 크기를 줄이고 색상 수를 줄였습니다. 매력처럼 일했습니다.

gifsicle --resize 48x48 --colors 16 original.gif > smaller.gif
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.