답변:
첫 실행 :
convert do.gif -coalesce temporary.gif
그때
convert -size <original size> temporary.gif -resize 24x24 smaller.gif
gifsicle --resize 24x24 > do-24.gif
이것도 할 수 있습니다
-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에서 테스트되었습니다.
-coalesce
"애니메이션 시퀀스보다는 실제 필름 스트립과 같은 각 지점에서 애니메이션의 완전한 뷰를 생성합니다. Coalesced Animation 으로 알려진 이러한 시퀀스 는 연구, 편집, 수정 및 재 최적화가 훨씬 쉽습니다."