이 페이지의 코드가 시작되지 않았습니다.

index.html을 폴더에서 바로 열면 브라우저가 JavaScript 모듈을 막습니다. 그래서 GIF 한 개를 골라도 아무 일도 일어나지 않아요. 폴더를 http로 띄워서 여세요:

powershell -ExecutionPolicy Bypass -File serve.ps1

그런 다음 http://localhost:8080/을 여세요.

GIF 프레임 분리 — 모든 프레임을 PNG 한 장씩

모든 프레임을 PNG 한 장씩으로.

언어: 한국어
소스 보기
GIF는 절대 업로드되지 않습니다. 서버가 아예 없으니까요.

GIF를 읽고 풀고 그리는 일은 전부 내 브라우저가 하고, PNG도 이 기기의 메모리 안에서 만들어집니다. 여기 있는 무언가가 보내려 한다 해도, 이 페이지 반대편에는 애니메이션을 받아 줄 서버 자체가 없습니다.

실시간 확인: 확인 중…

오프라인: 확인 중…

그냥 믿지 마시고 직접 확인해 보세요. 개발자 도구의 '네트워크' 탭을 켜 놓고 GIF를 분리해 보십시오. 이미지도, 프레임도, 파일 이름도 실려 나가는 요청이 없습니다. 아니면 인터넷을 끊고 그냥 분리해 보셔도 됩니다.

1 GIF 고르기

2 프레임이 나오는 방식

남길 프레임 전부 대신 두 장에 한 장, 다섯 장에 한 장만 가져옵니다. 한눈에 보는 시트를 만들 때나 녹화가 길 때 쓰십시오.

시간 목록 각 프레임이 얼마나 머물렀고 어디에 놓였는지. PNG만 모아 둔 폴더가 스스로 들고 갈 수 없는 정보입니다.

프레임

3 프레임

Markdown으로 보기

GIF를 프레임으로 나누는 방법

  1. GIF를 고릅니다. 선택 영역에 끌어다 놓거나 직접 찾아 주십시오. 브라우저가 디스크에서 바로 읽고, 페이지가 무엇을 찾았는지 알려 줍니다. 크기, 프레임 수, 재생 길이, 반복 횟수입니다.
  2. PNG 한 장에 무엇을 담을지 정합니다. 보이는 그대로의 프레임이 거의 모두가 원하는 쪽입니다. 애니메이션의 그 순간 화면 전체가 됩니다. 그 프레임이 저장한 픽셀만은 파일이 실제로 들고 있는 조각으로, 제 크기와 제자리 그대로입니다. GIF가 작게 유지되는 이유가 이것이고, 애니메이션이 보이는 모습과는 다릅니다.
  3. 투명도를 어떻게 할지 정합니다. PNG는 투명도를 그대로 담을 수 있고, 그것이 정직한 기본값입니다. 투명도를 무시하고 검게 칠해 버리는 곳으로 프레임을 가져갈 거라면 대신 색으로 채우십시오.
  4. 원하는 프레임을 고릅니다. 기본은 전부입니다. '두 프레임에 한 장만 남기기'는 긴 녹화를 솎아 내는 설정이고, 격자의 체크 상자가 그보다 우선합니다. 번호는 절대 바뀌지 않으니, 옆을 아무리 버려도 42번 프레임은 계속 42번입니다.
  5. 내려받습니다. 격자에서 한 장씩 받아도 되고, 전부 한 개의 ZIP으로 받아도 됩니다. ZIP이면 저장 확인이 수백 번이 아니라 한 번으로 끝납니다. ZIP에는 각 프레임이 얼마나 머물렀는지 적은 frames.txt를 함께 넣을 수 있습니다. PNG만 모아 둔 폴더가 스스로 말할 수 없는 유일한 정보입니다.

자세한 설명

GIF를 프레임으로 나누는 법 움직이는 GIF의 모든 프레임을 PNG로 뽑는 방법. 어떤 프레임은 왜 그림의 작은 조각뿐인지, 투명은 어떻게 되는지, 그리고 다시 합칠 수 있도록 시간 정보를 남기는 법.

자주 묻는 질문

제 GIF가 어딘가로 업로드되나요?

아닙니다. 파일을 읽고 풀고 그리는 일은 내 브라우저가 내 하드웨어에서 하고, PNG도 여기 메모리에서 만들어집니다. 이 도구에는 서버 쪽이 없고, 페이지의 Content-Security-Policy에는 연결할 수 있는 주소가 전부 적혀 있는데 그중 이 사이트 것은 없습니다. 네트워크를 끊어도 GIF는 계속 분리됩니다.

프레임 하나가 그림의 작은 조각처럼 보이는 이유가 뭔가요?

파일이 그렇게 담고 있기 때문입니다. GIF는 첫 그림 하나에 이어 붙은 조각들입니다. 뒤의 프레임은 바뀐 사각형만 저장하고, 화면의 나머지는 앞 프레임들이 남겨 둔 것입니다. 가만한 벽 앞에서 말하는 사람 영상이라면 프레임마다 얼굴만 저장되지 그림 전체가 저장되지는 않습니다. 이 포맷이 거대해지지 않는 이유가 바로 그것입니다.

지금 그렇게 보이는 것은 '그 프레임이 저장한 픽셀만'이 선택돼 있어서입니다. '보이는 그대로의 프레임'으로 바꾸면 모든 PNG가 그 순간 애니메이션의 화면 전체가 됩니다.

투명도는 유지되나요?

유지됩니다. GIF의 투명도는 1비트라서 픽셀은 칠해졌거나 보이지 않거나 둘 중 하나이고 그 사이는 없습니다. PNG가 바로 그것을 담기 때문에 투명한 영역이 그대로 나옵니다. 꽉 찬 배경이 낫다면 '투명한 영역'을 색으로 채우도록 바꾸십시오. 그 색은 PNG에 적히고 나중에 되돌릴 수 없습니다.

프레임 시간이 예상한 숫자와 다른 이유는 뭔가요?

GIF는 각 프레임 시간을 100분의 1초 단위로 담는데, 브라우저는 1990년대부터 2 미만인 값을 0.1초로 끌어올립니다. 당시 돌아가던 지구본을 위해 쓰인 규칙이고 끝내 없어지지 않았습니다. 파일에 0.01초라고 적힌 프레임은 어디서나 0.10초로 재생됩니다. 이 도구는 실제로 재생되는 시간을 보여 주고, 파일에 적힌 값과 다르면 그 값도 옆에 적어 둡니다.

분리한 프레임을 다시 합칠 수 있나요?

있습니다. 이 사이트의 GIF 만들기를 쓰거나, 이미지 폴더를 받아 주는 다른 프로그램을 쓰셔도 됩니다. ZIP 안의 frames.txt가 그래서 있습니다. 애니메이션을 분리하면 타이밍이 사라집니다. PNG에는 얼마나 머물렀는지 적어 둘 자리가 없으니까요. 대신 그 목록이 각 프레임의 시간과 위치를 함께 들고 나옵니다.

프레임은 어떤 형식으로 저장되나요?

PNG이고, 일부러 PNG만입니다. GIF 프레임은 많아야 256색에 투명도가 1비트인데, PNG는 그것을 정확히 손실 없이 담습니다. JPEG였다면 투명도를 버리고, 프레임에 없던 색을 만들어 내고, 평평한 그림에서는 보통 더 큰 파일이 나옵니다. JPEG가 필요하시면 나중에 이미지 크기 조절로 변환하십시오.

읽을 수 있는 프레임 수에 제한이 있나요?

정해진 제한은 없습니다. 실제 한계는 내 기기의 메모리입니다. GIF는 읽는 동안 픽셀 하나, 프레임 하나마다 1바이트 정도로 부풀기 때문에 작은 파일도 아주 많은 메모리가 될 수 있습니다. 그래서 이 페이지는 탭이 죽게 두느니 읽기를 멈춥니다. 그런 일이 생기면 그렇게 말하고, 거기까지 얻은 프레임을 돌려줍니다.

망가진 GIF도 열리나요?

대개 열립니다. 중간에 끊긴 다운로드, 없어진 종료 표시, 데이터 도중에 끝나는 마지막 프레임은 모두 흔한 일이고, 그런 걸 거절하는 판독기는 사람들이 가장 뜯어보고 싶어 하는 파일에서 하필 쓸모가 없습니다. 온전한 프레임은 전부 돌아오고, 무엇이 잘못됐는지도 함께 적힙니다. 아예 GIF가 아닌 파일만 처음부터 거절됩니다.

무료인가요? 가입해야 하나요?

무료이고 계정도, 로그인도, 체험판도 없습니다. 프레임에 워터마크도 없습니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 파일에 관한 것은 넘어가지 않습니다.

오프라인에서도 되나요?

됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 아무것도 업로드되지 않는다는 가장 간단한 증명이기도 하고요. 처리하려고 애니메이션을 어딘가로 보내는 도구라면 선을 뽑는 순간 멈춰 버릴 테니까요.