GIF 압축했는데 용량이 그대로일 때, 셋 중 어느 경우인지부터 봅니다
문서 사이트에 올려둔 데모 GIF들을 한번에 압축했는데 결과가 제각각이었습니다. 4분의 1로 줄어든 것, 전혀 안 줄어든 것, 그리고 원본보다 조금 커진 것까지.
도구도 설정도 같았습니다. 다른 건 영상 쪽이었어요. 성격이 다른 세 개를 만들어서 다시 측정해봤습니다.
먼저, 상한은 불러오는 순간 정해집니다
GIF에는 제약이 두 개 있습니다.
한 프레임당 최대 256색. 색연필 256자루로 사진을 모사하는 것과 비슷합니다. 필요한 색이 아무리 많아도 그 안에서 골라야 합니다.
프레임 사이는 차분으로 저장됩니다. 이건 플립북에 가깝습니다. 이전 장과 오른쪽 아래만 다르면 그 부분만 그리면 되죠. 인코더도 같은 일을 합니다. 이전 프레임과 동일한 픽셀은 다시 저장하지 않습니다.
그래서 줄일 수 있는 여지를 정하는 건 화면이 얼마나 멈춰 있느냐입니다. 품질 슬라이더가 손댈 수 있는 영역이 아닙니다.
측정 환경
도구는 ImgIng의 애니메이션 작업실(imging.ai)을 썼습니다. 고른 이유는 현실적인데, 프레임 분해와 재인코딩이 브라우저 안에서 끝나기 때문입니다. 소재가 사내 콘솔 화면 녹화라 되도록 업로드하고 싶지 않았습니다. Network 탭을 계속 열어둔 채로 파일 3개, 열몇 번의 내보내기 동안 POST 요청이 한 건도 없었습니다. F12만 누르면 직접 확인할 수 있는 부분입니다.
소재는 재현성 때문에 전부 스크립트로 만들었습니다.
측정 1 — 화면 녹화형
720×405, 36프레임, 2.88초. 콘솔 UI인데 목록 여섯 줄은 계속 멈춰 있고 진행바와 커서만 움직입니다.
79.8 KB → 21.3 KB (−73%), 자동 판정은 GIF 유지 · 64색.
멈춰 있는 영역이 대부분이라 차분이 잘 먹고, 평평한 배색이라 64색으로도 눈에 차이가 없습니다.
측정 2 — 화면 전체 노이즈형
480×320, 24프레임. 매 프레임 난수로 새로 만들어서 시간축으로 일치하는 픽셀이 거의 없습니다.
2.62 MB → 2.63 MB (변화 없음), 자동 판정은 GIF 유지 · 256색.
UI가 직접 알려주더군요. "줄어들지 않았습니다 — 이런 영상은 GIF에 맞지 않고 WEBP가 보통 더 작고 선명합니다."
멈춘 픽셀이 없으니 차분은 무효, 색은 이미 상한이라 감색은 디더링 비용만 남습니다. 두 수단이 다 막힌 상태입니다.
동작 하나 덧붙이면, 줄일 수 없을 때는 원본 파일을 그대로 두고 그 사실을 알려주는 설계였습니다. 더 큰 결과물을 조용히 건네주는 구현도 실제로 있기 때문에 적어둡니다.
측정 3 — 이미 최적화된 작은 GIF
120×120, 8프레임, 3색짜리 로딩 애니메이션.
2.0 KB → 1.5 KB (−25%), 자동 판정은 GIF 유지 · 16색.
이미 작은데도 4분의 1이 줄어든 건 256칸으로 잡혀 있던 팔레트를 실제 쓰는 16색까지 좁혔기 때문입니다. 다만 여기가 끝이고, 더 가려면 크기 축소·프레임 감소·화질 저하 중 하나입니다. 그건 압축이 아니라 편집이죠.
정리 — 자주 밟는 세 가지
하나, 동영상 같은 영상을 GIF로 처리하려는 것. 동영상 추출본, 실사, 그라데이션, 노이즈. 압축이 어려운 게 아니라 컨테이너 선택이 틀린 겁니다.
둘, 이미 최적화된 GIF를 다시 압축하는 것. 배포되는 스피너나 소재는 대개 감색과 차분이 끝나 있습니다. 어림잡아 파일 크기 ÷ (가로 × 세로 × 프레임 수)가 1바이트/픽셀을 크게 밑돌면 거의 한계입니다.
셋, 컨테이너만 바꾸면 작아진다고 보는 것. 애니메이션 WebP가 GIF보다 작은 건 256색 제한이 없고 손실 인코딩이 가능해서지, 재포장이 아니라 재인코딩의 효과입니다.
적용 범위
위 세 조는 성격을 일부러 극단으로 잡은 자작 소재라 "내 GIF가 몇 % 줄어들까"를 추정하는 데는 쓸 수 없습니다. 압축 결과는 원본에 전적으로 달려 있고, 같은 영상도 크기가 달라지면 결과가 달라집니다. 가져갈 수 있는 건 원리 쪽입니다.
하나 더, "안 줄어듦"이 정답인 경우도 있습니다. 이미 최적화된 소재에 변화 없음을 알리고 원본을 남기는 쪽이, 더 큰 파일을 돌려주는 것보다 정직하다고 봅니다.
