본문 바로가기

APNG를 GIF로 변환

움직이는 PNG는 색이 더 좋은 GIF인데, 인터넷의 절반은 이를 정지 이미지로 취급합니다. 올리는 곳에서 실제로 움직이는 GIF로, 모든 프레임 그대로 바꾸세요. 아무것도 저장하지 않습니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음

사용 방법

1

움직이는 PNG 추가

보통 이름은 .png, 가끔 .apng이며 둘 다 받습니다. 일반 PNG도 되며, 프레임 하나짜리 GIF로 나옵니다.

2

변환

모든 프레임을 각자의 타이밍과 함께 읽어, 그림에서 만든 팔레트로 GIF에 씁니다. 256색, 또는 더 작은 파일을 원하면 그보다 적게.

3

다운로드

하나씩, 또는 ZIP으로 받습니다. 몇 프레임이 옮겨졌는지 각 줄에 표시됩니다.

APNG란 무엇인가

APNG는 일반 PNG에 청크 종류 세 가지를 더한 것입니다. 애니메이션임을 알리는 acTL, 각 프레임 앞에서 크기, 위치, 지연 시간, 이전 프레임 처리 방법을 알려 주는 fcTL, 프레임의 픽셀을 담는 fdAT입니다. 이 청크들은 이를 모르는 뷰어에게는 평범한 정지 PNG로 보이도록 삽입됩니다. 이 하위 호환성이 2004년에는 핵심이었고, 오늘날에는 문제입니다. 헤더만 확인하는 소프트웨어는 파일을 “그림”으로 분류하고 더 들여다보지 않습니다.

각 프레임은 파일이 지시하는 대로 합성됩니다. 프레임은 캔버스의 일부만 덮고, 기존 내용 위에 섞이거나 이를 대체할 수 있으므로, 먼저 그림 전체를 만든 다음 팔레트로 양자화해 같은 지연 시간으로 GIF에 씁니다. 양자화기는 프레임 자체에서 256색을 만들고 디더링하며, APNG의 대부분을 차지하는 평면적인 그림과 픽셀 아트 스티커는 거의 그대로 옮겨집니다. 20ms 미만의 지연 시간은 브라우저가 GIF에 어차피 그렇게 하듯 100ms로 올립니다.

투명도는 1비트 방식이 되어, 픽셀은 보이거나 보이지 않거나 둘 중 하나입니다. 부드러운 그림자가 있는 APNG 스티커는 대신 불투명도 절반 지점에서 잘린 선명한 가장자리를 갖게 됩니다. 이는 변환이 아니라 GIF의 한계이며, 피하는 유일한 방법은 진짜 알파를 지원하는 형식, 즉 받는 쪽이 재생한다면 WebP를 쓰는 것입니다.

다른 작업이 필요할 때

ffmpeg는 APNG를 읽고 2단계 팔레트로 GIF를 씁니다: ffmpeg -i in.png -vf "split[a][b];[a]palettegen[p];[b][p]paletteuse" out.gif. 이 페이지에 없는 디더링 옵션도 제공하며, 그러데이션에서는 그 차이가 중요합니다.

받는 쪽이 APNG를 재생한다면(현재의 모든 브라우저가 재생하고, iMessage와 대부분의 스티커 플랫폼도 마찬가지입니다) APNG를 그대로 두세요. 진짜 투명도와 전체 색상을 갖고 있으며, GIF는 더 크고 품질도 떨어지는 호환용 사본입니다.

자주 묻는 질문

제 PNG가 움직이는지 어떻게 알 수 있나요?

Chrome, Firefox, Safari에서 열어 보세요. 셋 다 APNG를 재생하므로, 거기서는 움직이는데 올린 곳에서는 움직이지 않는다면 APNG이고 바로 이 페이지가 필요한 경우입니다. 여기서도 줄마다 찾은 프레임 수가 표시됩니다.

GIF에서도 타이밍이 유지되나요?

네. 두 형식 모두 프레임마다 지연 시간을 갖고 있고 그대로 옮기므로, 12프레임짜리 통통 튀는 움직임은 같은 속도의 12프레임 그대로 남습니다.

GIF가 더 거칠어 보이는 이유는?

APNG 프레임은 1,600만 색과 부드러운 투명도를 갖지만, GIF 프레임은 256색에 반투명이 없습니다. 팔레트는 그림에서 만들고 디더링을 적용하며, 거친 입자감은 거기서 생깁니다. APNG에 흔한 평면적인 그림에서는 거의 드러나지 않습니다.

움직이지 않는 PNG는요?

프레임 하나짜리 GIF로 변환되고 줄에도 그렇게 표시됩니다. 정지 이미지라면 거의 확실히 PNG를 그대로 두는 편이 낫고, 더 작게 하려면 PNG WEBP 변환을 쓰세요.

제 파일이 어딘가에 저장되나요?

아니요. 어떤 단계에서도 아무것도 저장하지 않습니다.

Discord나 Slack에서 제 스티커가 정지 이미지로 보이는 이유는?

많은 업로드 양식이 PNG 헤더를 보고 파일을 정지 이미지로 취급해 첫 프레임만 남깁니다. 같은 서비스에서도 GIF는 끝까지 재생됩니다. 변환이 확실한 해결책이고, 지원되는 곳이라면 WebP도 대안입니다.

참고: GIF는 프레임당 256색만 담고 반투명을 지원하지 않으므로, 부드러운 가장자리는 딱딱해지고 그러데이션에는 계단 현상이 조금 생깁니다. APNG의 프레임을 읽으려면 최신 Chrome, Edge, Opera가 필요하며, 그 밖에서는 첫 프레임이 정지 이미지로 저장되고 줄에 그렇게 표시됩니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.