GIF는 왜 256색일까 — 그리고 60fps GIF를 만들 수 없는 이유
스마트폰으로 찍은 사진은 1,677만 가지 색을 표현할 수 있습니다. 그런데 그 사진으로 GIF를 만들면 색이 뭉개지고, 하늘의 그라데이션에 띠가 생기고, 용량은 원본 영상보다 커집니다. 무엇 하나 좋아 보이지 않는데도 GIF는 여전히 쓰입니다.
이유는 GIF가 1987년에 만들어진 형식이고, 그때 정해진 규칙을 지금까지 그대로 쓰고 있기 때문입니다. 그 규칙 두 가지가 색과 시간을 동시에 제약합니다.

규칙 1 — 한 파일에 색은 최대 256개
GIF는 이미지 안에 색상표를 따로 싣습니다. 그림을 그릴 때 팔레트에 물감을 짜두고 거기서만 쓰는 것과 같습니다. 이 팔레트에 담을 수 있는 색이 최대 256개입니다.
사진이 표현할 수 있는 색은 1,677만 가지(2의 24제곱)입니다. 이걸 256가지로 줄이면 65,536분의 1이 됩니다. 사람 얼굴의 미묘한 피부톤, 하늘의 그라데이션이 살아남기 어려운 이유입니다.
게다가 팔레트 크기는 아무 숫자나 못 씁니다. 2의 거듭제곱만 가능합니다.
| 팔레트 색 수 | 픽셀당 비트 | 색상표 크기 |
|---|---|---|
| 2색 | 1비트 | 6바이트 |
| 16색 | 4비트 | 48바이트 |
| 64색 | 6비트 | 192바이트 |
| 256색 | 8비트 | 768바이트 |
색 하나당 R·G·B 세 바이트를 쓰므로 256색이면 색상표만 768바이트입니다. 표에서 중요한 건 오른쪽이 아니라 가운데 칸입니다. 색을 절반으로 줄이면 픽셀 하나를 저장하는 데 드는 비트가 1비트씩 줄어듭니다. 이게 용량에 직접 영향을 줍니다.
색과 관련해 하나 더 걸리는 게 있습니다. 투명도가 켜짐/꺼짐 둘뿐이라는 점입니다. GIF는 팔레트의 색 하나를 "이 색은 투명"이라고 지정하는 방식으로 투명을 표현합니다. 그래서 완전히 투명하거나 완전히 불투명하거나, 중간이 없습니다.
PNG는 픽셀마다 투명도를 0부터 255까지 줄 수 있어서 가장자리를 부드럽게 흐릴 수 있습니다. GIF에는 그 단계가 없으니 경계가 계단처럼 각지게 남습니다. 배경이 투명한 로고를 GIF로 만들었을 때 테두리가 지저분해 보이는 이유가 이것입니다. 게다가 투명색으로 한 칸을 쓰면 실제로 쓸 수 있는 색은 255개로 줄어듭니다.

규칙 2 — 시간은 100분의 1초 단위로만
여기가 덜 알려진 부분입니다. GIF는 각 프레임을 얼마나 보여줄지 센티초(100분의 1초) 단위로 적습니다. 즉 10밀리초의 배수만 쓸 수 있습니다.
60fps 영상은 프레임 간격이 16.7밀리초입니다. 그런데 이 값을 GIF에 적으려면 10으로 나눠 반올림해야 하고, 그러면 2센티초 = 20밀리초가 됩니다. 20밀리초 간격은 50fps입니다.
| 원하는 fps | 필요한 간격 | GIF에 저장 | 실제 fps |
|---|---|---|---|
| 60fps | 16.7ms | 20ms | 50.0fps |
| 50fps | 20.0ms | 20ms | 50.0fps |
| 30fps | 33.3ms | 30ms | 33.3fps |
| 24fps | 41.7ms | 40ms | 25.0fps |
| 15fps | 66.7ms | 70ms | 14.3fps |
| 10fps | 100.0ms | 100ms | 10.0fps |
정확히 맞아떨어지는 것은 50·25·20·10fps 정도뿐입니다. 영화에서 쓰는 24fps는 25fps가 되어 4% 빨라지고, 15fps는 14.3fps가 되어 조금 느려집니다.
짧은 GIF에서는 티가 안 나지만, 원본 영상과 나란히 놓고 보면 어긋납니다. "영상이랑 GIF랑 길이가 미묘하게 다른데?" 하는 경우가 대부분 이것 때문입니다. 부드러움을 원해서 60fps로 뽑아도 GIF가 되는 순간 50fps입니다.
이미지 여러 장을 올리면 바로 GIF로 묶어줍니다. 프레임마다 지연 시간을 따로 줄 수 있어 위 표를 보고 10ms 배수로 맞추면 의도한 속도가 그대로 나옵니다.
왜 용량이 영상보다 클까
가장 큰 이유는 GIF에는 프레임 사이를 이용한 압축이 없다는 점입니다.
동영상 형식은 "이전 프레임과 달라진 부분만" 저장합니다. 배경이 고정된 화면이라면 움직이는 부분만 기록하면 되니 극적으로 줄어듭니다. GIF는 프레임마다 화면 전체를 다시 저장합니다. 가만히 있는 배경도 30번 찍으면 30번 저장됩니다.
480×270 크기로 계산해보면 이렇습니다.
- 256색(픽셀당 8비트) — 프레임당 127KB, 3초 30프레임이면 3.7MB
- 64색(6비트) — 프레임당 95KB, 3초면 2.8MB
- 16색(4비트) — 프레임당 63KB, 3초면 1.9MB
실제로는 LZW라는 압축이 적용돼 이보다 줄어듭니다. 다만 이 압축도 한 프레임 안에서만 작동합니다. 같은 배경이 반복돼도 그 사실을 이용하지 못합니다. GIF가 영상보다 열 배씩 커지는 근본 원인입니다.

용량을 줄이는 실질적인 순서
위 구조를 알면 어디를 건드려야 효과가 큰지 정해집니다. 효과가 큰 순서대로입니다.
- ① 프레임 수를 줄인다 — 30프레임을 15프레임으로 줄이면 용량도 대략 절반. 가장 확실하고, 짧은 반응 GIF에서는 티도 잘 안 납니다
- ② 크기를 줄인다 — 가로세로를 각각 절반으로 줄이면 픽셀 수가 4분의 1
- ③ 색을 줄인다 — 256색을 16색으로 낮추면 픽셀당 비트가 8→4로 절반
- ④ 그다음이 화질 — GIF에는 JPEG 같은 품질 슬라이더가 없습니다. GIF에서 "화질"은 사실상 색 수와 크기입니다
다만 색을 무작정 줄이면 안 되는 경우가 있습니다. 사진은 색이 연속적으로 변해서 색을 줄이면 하늘이나 피부에 띠가 생깁니다. 반면 스크린샷·로고·단색 배경 일러스트는 원래 쓰는 색이 적어서 16색으로 낮춰도 거의 티가 안 나면서 용량만 절반이 됩니다. GIF가 잘 맞는 소재와 안 맞는 소재가 여기서 갈립니다.
그런데도 GIF가 사라지지 않는 이유
기술적으로 열등한데도 GIF가 살아남은 이유는 단순합니다. 어디서나 이미지로 취급된다는 점입니다.
동영상은 재생 버튼을 눌러야 하고, 소리가 날 수 있고, 자동재생이 막히는 환경이 있고, 메신저나 게시판이 아예 못 올리게 하는 경우도 있습니다. GIF는 그냥 그림 파일입니다. 올라가고, 저절로 움직이고, 소리가 없고, 클릭이 필요 없습니다.
요즘은 겉보기에 GIF처럼 보이지만 실제로는 동영상 파일로 바꿔 보내주는 서비스도 많습니다. 사용자 눈에는 똑같이 움직이는 그림인데 용량만 훨씬 작습니다. 그래도 "파일 하나를 올려서 어디서든 움직이게 하고 싶다"면 여전히 GIF만큼 확실한 것이 없습니다.
정리하면, GIF의 한계는 결함이 아니라 1987년의 설계가 그대로 남은 결과입니다. 256색과 10밀리초 단위라는 두 규칙을 알고 나면, 색이 왜 뭉개지는지·속도가 왜 어긋나는지·용량을 어디서 줄여야 하는지가 한 번에 설명됩니다.
이미지를 순서대로 올리고 프레임별 지연을 10ms 배수로 맞춰보세요. 프레임 수를 줄이는 것이 용량 절감에 가장 효과가 큽니다.
함께 읽으면 좋은 글
본문의 수치는 GIF 표준(GIF89a)의 컬러테이블·지연시간 규격과 꿀도구 GIF 만들기에 구현된 인코더(최대 256색, 2의 거듭제곱 컬러테이블, 센티초 단위 지연, 프레임 내부 LZW)에서 직접 계산했습니다. 압축 전 크기는 픽셀 수 × 픽셀당 비트로 산출한 값이며 실제 파일 크기는 LZW 압축 결과에 따라 달라집니다.